BGP

aus ANOther Wiki, der freien Wissensdatenbank

 

Inhaltsverzeichnis

BGP Routing zwischen AS

Ein Hauptziel von BGP ist, ein Interdomain-Routing zu bieten, welches loopfreies Routenaustauschen zwischen verschiedenen AS ermöglicht

BGP4 ist hierbei die aktuellste BGP-Version. Ws wird verwendet, um ISPs untereinander bzw mit deren Kunden zu verbinden

BGP4 unterstützt VLSM und CIDR, die Vorgänger allerdings nicht. Daher sollten diese auch nicht mehr verwendet werden.

Wenn CIDR von großen ISPs verwendet wird, besteht die Routingtabelle aus mehr als 170.000 Blöcken. Ohne CIDR würden sich in der Tabelle mehr als 2.000.000 Einträge befinden

AS-Nummern bestehen aus 16 bit. Hier werden 1-64511 für öffentliche AS verwendet, 64512 bis 65535 sind für private Zwecke reserviert (http://www.faqs.org/rfcs/rfc1930.html">RFC 1930)

Vergleich mit IGP

IGPs legen Wert auf schnelle Wege zu den jeweiligen Zielen, sei es durch Hopcounts (RIP) oder Bandbreite (EIGRP)

BGP tut dies nicht. Es ist ein policybasierendes Routingprotokoll (PBR), das AS erlaubt, den Verkehr über verschiedene BGP-Pfadattribute zu steuern

BGP-Nachrichtentypen

In BGP sind folgende Typen definiert

  • OPEN: beinhaltet die folgenden Informationen
    • die Versionsnummer
    • die AS-Nummer
    • den Hold-Down-Timer
    • die BGP-Router ID
    • und weitere - optionale - Parameter
  • KEEPAKIVE MESSAGE
  • UPDATE MESSAGE: eine BGP-Update-Macricht beinhaltet nur einen Pfad. Mehrere Pfade haben mehrere Update-Nachrichten zur Folge. Eine Update-Nachricht kann folgende Felder enthalten
    • withdrawn routes
    • path attributes
    • network layer reachability informations
  • NOTIFICATION MESSAGE: sie wird gesendet, wenn ein Fehler erkannt wird. Die BGP-Verbindung wird unmittelbar nach dem Senden der Nachricht abgebrochen

EBGP und IBGP

BGP Nachbarschaften

Ein BGP-Router wird auch als BGP speaker bezeichnet. Formt ein BGP-Speaker eine Nachbarschaft mit anderen Speakern, werden diese als BGP-peers bezeichnet. Da sich im Internet in den über 21000 AS zigtausend BGP-Speaker befinden, kann ein Router nur eine gewisse Anzahl an Nachbarschaften herstellen.

 

Herstellen von EBGP-Nacharschaften

Ein EBGP-Peer ist ein Router ausserhalb des eigenen AS; zwischen den NAchbarn ist kein IGP konfiguriert. Damit diese Nachbarn Routenupdates austauschen können, was mittels TCP passiert, muss die IP, die im BGP-neighbor-command angegeben wurde, erreichbar sein. Per default sind ENGP-Router direkt miteinander verbunden

Herstellen von IBGP-Nachbarschaften

IBRP-Router befinden sich in einer AS. Sie müssen nicht direkt verbunden sein, solange sie die Sessions via TCP herstellen können. So können IBRP-Router auch mittels statischen Routen oder einem internen Routingprotokoll verbunden sein. Da in einem AS im Allgemeinen mehrere Wege zum Ziel führen, wird eine Loopback-IP generiert und diese im BGP-neighbor-command verwendet, um die Sessions herzustellen

IBGP auf Routern der Transitpfade

IBGP in einem Transit-AS

Wenn Verkehr durch eine AS geroutet werden muss, stehen zwei Möglichkeiten zur Verfügung

  1. Redistributieren der BGP-Routen in ein IGP
  2. einsetzen von IBGP im AS

da das Internet aus relativ vielen Hosts besteht, diese sich in vielen Netzen befinden, und diese sich in riesigen Routingtabellen wiederfinden würden ist 1. nur eine theoretische Möglichkeit

IBGP in einem Nicht-Transit-AS

Sollte ein Unternehmen als Sicherheit an zwei AS verschiedener ISP angeschlossen sein (multihoming), ist es nicht erwünscht, dass ISP1 den Verkehr zu ISP2 über das AS des Kunden leitet.

Da die Entwicler von BGP nicht davon ausgehen konnten, dass alle Router in einem AS BGP-Speaker sind, musste eine Methode gefunden werden, dass alle JBGP-Router miteinander sprechen können, und Routingloops verhindert werden.

Um Loops zu verhindern wurde definiert, dass eine Route, die via IBGP gelernt wurde, nicht über IBGP weiterverbreitet wird.

 

Konfiguration

Einleiten der Konfiguration

Router(config)# router bgp [AS-Nummer]
  • damit wird in den "globalen Konfigurationsmodus" von BGP gewechselt, um BGP zu aktivieren müssen weitere Subkommandos abgesetzt werden

 

Aktivieren einer BGP-Session

Router(config-router)# neighbor {IP-Adresse|peer-group-name} remote-as [AS]
  • das neighbor-Kommando startet eine BGP-Sesipn mit dem Nachbarn
  • die IP-Adresse, die angegeben wird, ist die Zieladresse des Nachbarn, an den die BGP-Pakete gehen sollen
  • damit eine NAchbarschaftsbeziehung hergestellt werden kann, muss der Router einen IP-Pfad zum künftigen Nachbarn haben
  • mit "remote-as" wird deiniert, ob es sich um IBGP [AS ist gleich] oder EBGP [AS unterscheidet sich vom Globalen Konfigmodus] handelt
  • daher gilt dieses Kommando für beide BGP-Varianten

Dieses Kommando ist obligatorisch für die Nachbarschaftsbildung

 

Abschalten eines BGP-Nachbarn

Router(config-router)# neighbor {IP-Adresse|peer-group-name} shutdown
  • wird verwendet, um Nachbarn administrativ ausser kraft zu setzen
  • wird mit "no" wieder eingeschalten

 

BGP-Nachbar update-source-Kommando

Router(config-router)# neighbor {IP-Adresse|peer-group-name} update-source interface-type interface-number
  • hier wird dem BGP-Prozess eine IP eines Interfacs zur Verfügung gestellt, die als Quell-IP für Updates an die jeweiligen Nachbarn verwendet wird
  • in der REgel wird hierfür ein Loopback-Interface verwendet, da dieses Interface immer vorhanden ist und nie auf down gehen kann
  • die IP im neighbor-Kommando des Nachbar-Routers ist die Ziel-IP für alle BGP-Updates. Sie sollte die Loopback DIESES Routers sein
  • diese Kommandofolge wird nur bei IBGP verwendet; die Adresse eines EBGP-Nachbarn muss "direct connected" sein, und das ist ein Loopback-Interface nicht

 

Beispielkonfig

so könnte eine Konfiguration ausschauen:

[AS65100]-172.16.1.1-[AS65101]-192.168.1.1-[AS65102]

AS65101 besteht aus R2 und R3, welche intern mit einem 10er-Netz verbunden sind auf beiden Routern sind Loopback-Interfaces konfiguriert, lo0=2.2.2.2 bzw 3.3.3.3

R2:

router bgp 65101
neighbor 172.16.1.1 remote-as 65100
neighbor 3.3.3.3 remote-as 65101
neighbor 3.3.3.3 update-source Loopback0
!
router eigrp 1
network 10.0.0.0
network 2.0.0.0

R3:

router bgp 65101
neighbor 192.168.1.1 remote-as 65102
neighbor 2.2.2.2 remote-as 65101
neighbor 2.2.2.2 update-source Loopback0
!
router eigrp 1
network 10.0.0.0
network 3.0.0.0

BGP neighbor ebgp multihop

Router(config-router)# neighbor {IP-Adresse|peer-group-name} ebgp-multihost [Anzahl der Hops]


Mit diesem Kommando wird die Anzahl der IP-Hops zwischen den EBGP-Peers angegeben, die per default auf "1" steht. Angenommen, R1 [AS65102] und R2 [AS65101] wären beide mit Loopbacks bestückt, würde dieser Befehl zum Tragen kommen, da zwischen den beiden Loopback-Adressen 2 IP-Hops (direct connected interfaces) liegen

Beispiel

R1

router bgp 65102
neighbor 1.1.1.1 remote-as 65101
neighbor 1.1.1.1 update-source Loopback 0
neighbor 1.1.1.1 ebgp multihop 2
!
ip route 1.1.1.1 255.255.255.255 192.168.1.18
ip route 1.1.1.1 255.255.255.255 192.168.1.34

R2

router bgp 65101
neighbor 2.2.2.2 remote-as 65102
neighbor 2.2.2.2 update-source Loopback 0
neighbor 2.2.2.2 ebgp multihop 2
!
ip route 2.2.2.2 255.255.255.255 192.168.1.17
ip route 2.2.2.2 255.255.255.255 192.168.1.33

 

BGP wurde nicht für Lastverteilung entworfen. Die Pfade werden aufgrund Entscheidungen einer Policy getroffen. BGP wählt einen einzigen, besten Pfad. Mitteld des ebgp-multihop-Kommandos wird jedoch Lastverteilung und Redundanz auf mehrere Pfade zwischen verschiedenen AS (2 im obrigen Beispiel) ermöglicht