BGP Inter-domain routing met het Border Gateway Protocol Iljitsch van Beijnum Amsterdam, 14 maart 2006
Routing tussen ISPs Interne routingprotocollen werken hier niet: te veel informatie Dus: externe routingprotocollen: Exterior Gateway Protocols (EGPs) Andere manier om dit te zien: niet per router, maar per netwerk/organisatie ofwel "autonomous system"
Autonomous Systems AS192
AS2503
AS29077
De bomen en het bos Tracing the route to www.isoc.nl (212.206.127.42) 1 2 3 4 5 6 7 8 9 10 11 12
fa3-0-4-asd8ro2.enertel.nl (195.7.144.85) [AS 12394] 4 msec fa1-0-0-asd1ro6.enertel.nl (195.7.144.145) [AS 12394] 4 msec po0-0-0-asd10ro1.enertel.nl (195.7.154.14) [AS 12394] 4 msec adm-b2-pos2-1.telia.net (213.248.72.133) [AS 1299] 4 msec pos3-2.BR1.AMS3.ALTER.NET (146.188.64.113) [AS 702] 4 msec so-0-2-0.TR1.AMS2.ALTER.NET (146.188.3.213) [AS 702] 4 msec so-5-0-0.XR1.AMS6.ALTER.NET (146.188.8.77) [AS 702] 4 msec so-0-0-0.cr1.hag1.alter.net (212.136.176.110) [AS 702] 4 msec so-4-0-0.cr2.hag1.alter.net (212.136.176.146) [AS 702] 8 msec so-0-0-0.cr2.rtm1.alter.net (212.136.176.121) [AS 702] 8 msec 412.atm10-0-0.gw4.rtm1.alter.net (212.136.177.146) [AS 702] 16 msec www.isoc.nl (212.206.127.42) [AS 702] 4 msec
De bomen en het bos Tracing the route to www.isoc.nl (212.206.127.42) 1 2 3 4 5 6 7 8 9 10 11 12
fa3-0-4-asd8ro2.enertel.nl (195.7.144.85) [AS 12394] 4 msec fa1-0-0-asd1ro6.enertel.nl (195.7.144.145) [AS 12394] 4 msec po0-0-0-asd10ro1.enertel.nl (195.7.154.14) [AS 12394] 4 msec adm-b2-pos2-1.telia.net (213.248.72.133) [AS 1299] 4 msec pos3-2.BR1.AMS3.ALTER.NET (146.188.64.113) [AS 702] 4 msec so-0-2-0.TR1.AMS2.ALTER.NET (146.188.3.213) [AS 702] 4 msec so-5-0-0.XR1.AMS6.ALTER.NET (146.188.8.77) [AS 702] 4 msec so-0-0-0.cr1.hag1.alter.net (212.136.176.110) [AS 702] 4 msec so-4-0-0.cr2.hag1.alter.net (212.136.176.146) [AS 702] 8 msec so-0-0-0.cr2.rtm1.alter.net (212.136.176.121) [AS 702] 8 msec 412.atm10-0-0.gw4.rtm1.alter.net (212.136.177.146) [AS 702] 16 msec www.isoc.nl (212.206.127.42) [AS 702] 4 msec
IDR geschiedenis Gateway-to-Gateway protocol (GGP) Exterior Gateway Protocol (EGP) BGP 1, 2 and 3 IDRP and IDPR BGP4, RFC 1771 is het enige wat we momenteel gebruiken
BGP's functies Geef door welke IP-adressen waar gebruikt worden Dwing "routing policy" af Voorkom routing loops Vermijd kapotte links Als extra waar mogelijk: gebruik kortste pad
Welke adressen zitten waar Geen geografische relevantie aan adresuitgifte Bovendien: geografisch dichtbij != netwerktopologisch dichtbij Dus: voor iedere prefix moeten we weten waar op het netwerk ie gebruikt wordt
Wie gebruikt BGP? Meeste ISPs, om andere ISPs te laten weten welke adresblokken ze gebruiken Eindgebruikers? Meeste niet, ISP regelt dit voor hun adressen Eindgebruikers met meer dan één ISP (die "multihomed" zijn) wel, die kunnen dit niet door één ISP laten doen
Hoe BGP werkt "Border routers" hebben een sessie met border routers van aangrenzende ASen (en met alle BGP routers in het lokale AS) Communicatie over TCP poort 179 Sessies worden handmatig gecreëerd
Hoe BGP werkt (2) Zodra een verbinding opkomt stuurt elke router een (min of meer) complete kopie van de "global routing table" aan zijn buur Pad via buur-router beter? Gebruik het dan zelf Hierna alleen updates als er wat verandert
BGP Header 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + + | Marker | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length | Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
OPEN Header 0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+ | Version | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | My Autonomous System | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hold Time | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BGP Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Opt Parm Len | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Optional Parameters | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
UPDATE Header +-----------------------------------------------------+ | Unfeasible Routes Length (2 octets) | +-----------------------------------------------------+ | Withdrawn Routes (variable) | +-----------------------------------------------------+ | Total Path Attribute Length (2 octets) | +-----------------------------------------------------+ | Path Attributes (variable) | +-----------------------------------------------------+ | Network Layer Reachability Information (variable) | +-----------------------------------------------------+
NOTIFICATION Hdr 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Error code | Error subcode | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
KEEPALIVE Header 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + + | Marker | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length | --> 4 <-| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
BGP pad attributen Informatie die routers uitwisselen bestaat uit een reeks IP-adresblok met "path attributes" Adresinformatie (prefix): Network Layer Reachability Information (NLRI) Gebruikelijke pad attributen zijn: AS path, next hop, origin, Multi Exit Discriminator (of metric) en community's
AS pad Verplicht attribuut Allereerst: om loops te detecteren Ook belangrijk voor transit/peering filters En voor filters die zorgen dat klanten zich niet per ongeluk als "transit" ISP gedragen (kortste AS pad wordt gekozen als een prefix via meerdere routers/ASen bereikbaar is)
Loops 192.0.2.0/24 AS2 BGP table: 192.0.2.0 1 4321
AS1
AS2
AS4
AS3
AS3 BGP table: 192.0.2.0 2 1 AS4 BGP table: 192.0.2.0 2 1 321
Local Preference Alleen uitgewisseld binnen hetzelfde AS, maar daar wel verplicht Route met de hoogste local preference wordt gebruikt Alleen wanneer local pref gelijk is wordt naar andere attributen gekeken
Multi Exit Discriminator Optioneel Vergelijkbaar met "metric" in interne routingprotocollen Oorspronkelijk om te kunnen kiezen voor meerdere routes via één buur-AS, maar ook bruikbaar in andere situaties Wordt niet naar andere ASen doorgegeven tenzij specifiek een waarde gezet is
Community's 32-bit waarde die geen vaste betekenis heeft Niet in de originele BGP specificatie! (Dus uiteraard optioneel) Wel een paar "well-known communities" Meeste in de vorm AS:nn (zoals 701:120) waar de betekenis afhangt van het bron-AS Voor speciale behandeling bepaalde routes
Multiprotocol BGP Multiprotocol Extensions for BGP-4: RFC 2858 Uitbreiding op BGP4 die het mogelijk maakt routinginformatie voor extra "address families" uit te wisselen Geef beschikbare opties aan in "open message" Niet-IPv4 info in twee nieuwe pad attributen
MP_REACH_NLRI +---------------------------------------------------------+ | Address Family Identifier (2 octets) | +---------------------------------------------------------+ | Subsequent Address Family Identifier (1 octet) | +---------------------------------------------------------+ | Length of Next Hop Network Address (1 octet) | +---------------------------------------------------------+ | Network Address of Next Hop (variable) | +---------------------------------------------------------+ | Number of SNPAs (1 octet) | +---------------------------------------------------------+ | Length of first SNPA(1 octet) | +---------------------------------------------------------+ | First SNPA (variable) | +---------------------------------------------------------+ | | . . . . . . . . .
MP_REACH_NLRI (2) . . . . . . . . . | | +---------------------------------------------------------+ | Length of second SNPA (1 octet) | +---------------------------------------------------------+ | Second SNPA (variable) | +---------------------------------------------------------+ | ... | +---------------------------------------------------------+ | Length of Last SNPA (1 octet) | +---------------------------------------------------------+ | Last SNPA (variable) | +---------------------------------------------------------+ | Network Layer Reachability Information (variable) | +---------------------------------------------------------+
MP_UNREACH_NLRI +---------------------------------------------------------+ | Address Family Identifier (2 octets) | +---------------------------------------------------------+ | Subsequent Address Family Identifier (1 octet) | +---------------------------------------------------------+ | Withdrawn Routes (variable) | +---------------------------------------------------------+ NLRI encoding: +---------------------------+ | Length (1 octet) | +---------------------------+ | Prefix (variable) | +---------------------------+
IPv6 RFC 2545: Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing Bijna volledig identiek aan IPv4 Ok, de adressen zijn langer... Next hop: global, + optioneel link local Maar operationeel wel redelijk anders, pas sinds kort "serieus" in gebruik
BGP security BGP is gevoelig voor aanvallen op TCP, IP en link (gewoonlijk ethernet) -niveau Maar in de meeste gevalen niet makkelijk te misbruiken! MD5/wachtwoord helpt, maar lastig te managen Toekomst: Secure BGP (S-BGP) en/of secure origin BGP (soBGP)
BGP TCP MD5 Option RFC 2385: +---------+---------+-------------------+ | Kind=19 |Length=18| MD5 digest... | +---------+---------+-------------------+ | | +---------------------------------------+ | | +---------------------------------------+ | | +-------------------+-------------------+ | | +-------------------+ De MD5 digest is altijd 16 bytes lang, de optie wordt in ieder TCP segment van een BGP sessie meegegeven.
S-BGP Secure BGP, ontwikkeld door BBN Proof-of-concept implementatie beschikbaar Koppel prefix aan AS Stop bestemmings-AS in BGP update Signature op iedere update Informatie zit in pad attributen
soBGP Secure Origin BGP, mensen van Cisco Authenticeer relatie tussen prefix en AS Uitbreidbaar Authenticatie-informatie in nieuw type BGP message
S-BGP vs soBGP S-BGP veel zwaarder: ± 500k signature checks bij opkomen BGP-sessie S-BGP moet private keys in routers hebben soBGP zou crypto door externe server kunnen laten afhandelen
Problemen Al die crypto! Geheugen Waar is een goede lijst van welke prefix bij welk AS hoort? Kan ook simpeler met heel grote filters in routers Kip/ei
Policy In tegenstelling tot OSPF is filteren toegestaan, consistentie geen vereiste Stuur alleen routes wanneer het mag: bied geen transit tenzij je ervoor betaald wordt Pas ingestelde voorkeuren toe En: controleer dat wat de buur stuurt klopt
Verkeer balanceren Met mer dan één externe verbinding balanceert BGP het verkeer automatisch Maar niet altijd op de gewenste manier Hoofdstuk over "traffic engineering" uit mijn boek is online op de O'Reilly website, de URL is http://www.oreilly.com/catalog/bgp/
BGP path selection 1. Prefer the path with the largest LOCAL_PREF 2. Prefer the path with the shortest AS_PATH 3. Prefer the path with the lowest multi-exit discriminator (MED) 4. Prefer external (eBGP) over internal (iBGP) paths 5. Prefer the path with the lowest IGP metric to the BGP next hop 6. Prefer the route coming from the BGP router with the lowest router ID 7. Prefer the path coming from the lowest neighbor address
Te effectief?
Wanneer twee ISPs beiden met grotendeels dezelfde netwerken peeren zijn AS paden steeds even lang Dan kunnen zelfs kleine veranderingen al een radicaal andere verkeersverdeling opleveren
Schaalbaarheid iBGP iBGP Full mesh requirement (au!) Werk hier omheen met: Route reflectors: client praat met reflector, reflectors en non-clients in full mesh Confederations: splits AS in sub-ASen, full mesh hierbinnen, semi-eBGP naar overige
Full mesh
Routereflectie
Confederaties
Loopback Rtr1 b
Rtr3
a
Rtr2
y
x Rtr4
Peering "Private peering" (directe verbinding link), of Exchange zoals AMS-IX, LINX, DE-CIX Groot laag 2 netwerk, iedereen hangt hier een router aan Directe BGP-sessies met anderen om routing info uit te wisselen
Policy voor transit Transit wordt gegeven aan betalende klanten X geeft transit aan Y X routeert pakketten van/naar verweg voor Y Dus X "adverteert" (announces) naar iedereen dat Y via hen bereikbaar is En X adverteert aan Y dat de hele wereld via hen bereikbaar is
Policy voor peering Wissel verkeer uit zonder dat er geld aan te pas komt (gewoonlijk) X peert met Z X adverteert aan to Z dat X's klanten via X bereikbaar zijn, rest van de wereld NIET Z doet hetzelfde, waardoor al het verkeer dat X of een klant van X als bron heeft en Z of een klant van Z als bestemming rechtstreeks loopt
Transit vs Peering AS 200
AS 300
AS 400
AS 100
Y
X
Z
Voorbeeld peering/transit
Multilaterale peering Iedereen peert met de route server Route server geeft alle routes door Next hop adres wordt niet veranderd Dus verkeer loopt direct (niet via de route server) Zie http://www.openpeering.nl/
Meer interconnects Moet je bepalen waar van netwerk A naar netwerk B te springen Early exit / hot potato: verkeer zo snel mogelijk het AS uit (gaat automatisch) Late exit / cold potato: hou verkeer zo lang mogelijk in eigen AS (zeldzaam)
Early Exit
Early Exit (2)
De "global routing table" 175000 routes in de global routing table Vaak slechte aggregatie Dus: filter op prefixlengte: < /24: vergeet het maar RIR blok: nooit problemen Tussenin: soms problemen, meestal ok
IPv6 global routing table < 1000 routes ISPs minimaal /32 Op dit moment geen multihoming met eigen prefix mogelijk /48s voor speciale dingen als root servers Wel soms nog erg lange paden doordat mensen transit weggeven
That's it! http://www.bgpexpert.com/ http://www.runningipv6.net/ RFC 1771 (BGP version 4) RFC 2385 (BGP TCP MD5 Option)