Difference between revisions of "Cisco BGP"

From HackerNet
Jump to: navigation, search
Line 13: Line 13:
 
UPDATE: En update innehåller routinginformation. Varje NLRI skickas endast en gång. <br/>
 
UPDATE: En update innehåller routinginformation. Varje NLRI skickas endast en gång. <br/>
 
NOTIFICATION: Errormeddelanden, kan skickas för att starta om ett grannskap. <br/>
 
NOTIFICATION: Errormeddelanden, kan skickas för att starta om ett grannskap. <br/>
KEEPALIVE: Skickas regelbundet för att säkerställa att grannen lever. <br/>
+
KEEPALIVE: Skickas regelbundet för att säkerställa att grannen lever. Peers måste komma överens om detta, default är 60 sek. <br/>
  
 
===BGP table===
 
===BGP table===
 
Källor till BGP table:
 
Källor till BGP table:
* Network command: lägger prefix i bgp table men kan inte annonseras ut om det inte finns i routingtabellen
+
* Network command
* BGP updates:
+
* BGP updates
* Redistribution: default så redistribueras endast eBGP till andra protokoll pga att iBGP inte har någon egen loop prevention mekanism.
+
* Redistribution
 +
 
 
Verify BGP table
 
Verify BGP table
 
  show ip bgp
 
  show ip bgp
Line 25: Line 26:
  
 
==Neighbor==
 
==Neighbor==
För att kunna utbyta routinginformation måste grannskap upprättas, detta görs med en TCP-anslutning som det skickas BGP-meddelanden över. eBGP har ttl 1 på alla BGP-paket som skickas ut samt accepteras in, detta går att ändra med ''ebgp-multihop''. iBGP har inga sådana ttl-begränsningar. eBGP byter även next-hop på den NLRI som skickas ut. BGP kan inte peera med hjälp av en default route.
+
För att kunna utbyta routinginformation måste grannskap upprättas, detta görs med en TCP-anslutning som det skickas BGP-meddelanden över. eBGP har ttl 1 på alla BGP-paket som skickas ut samt accepteras in, detta går att ändra med ''ebgp-multihop''. iBGP har inga sådana begränsningar utan skickar med TTL 255. eBGP byter även next-hop på den NLRI som skickas ut. eBGP kan inte peera med hjälp av en default route.
  
 
'''States''' <br/>
 
'''States''' <br/>
Line 39: Line 40:
 
Established State: Skicka uppdateringar. Neighbor up <br/>
 
Established State: Skicka uppdateringar. Neighbor up <br/>
  
===Konfiguration===
+
==Konfiguration==
 +
För att byta från NLRI-format till AFI-format i konfigurationen
 +
bgp upgrade-cli
 +
Synchronization is disabled by default in Cisco IOS post 12.2(8)T. Synchronization bör vara avstängt annars medföljer vissa begränsningar. T.ex. måste routes finnas i IGP innan det kan propagera vidare med BGP och OSPF RID måste vara samma som BGP RID om sync är på.
 +
no synchronization
 +
 
 
Om ett grannskap är iBGP eller eBGP avgörs med remote-as som antingen är samma AS som en själv eller ett annat.  
 
Om ett grannskap är iBGP eller eBGP avgörs med remote-as som antingen är samma AS som en själv eller ett annat.  
 
  router bgp 65000
 
  router bgp 65000
Line 51: Line 57:
 
  neighbor 1.1.1.1 password SECRET
 
  neighbor 1.1.1.1 password SECRET
 
  show ip bgp neighbors 1.1.1.1 | i state|Flags
 
  show ip bgp neighbors 1.1.1.1 | i state|Flags
 +
 +
Default for internal neighbors is 5 sec and for external is 30 seconds.
 +
neighbor 1.1.1.1 advertise-interval <interval>
  
 
Verify
 
Verify
Line 56: Line 65:
 
  show ip bgp summary
 
  show ip bgp summary
 
  show tcp brief
 
  show tcp brief
 +
 +
Debug
 +
debug ip bgp events
  
 
'''Passive Peer''' <br/>
 
'''Passive Peer''' <br/>
Line 67: Line 79:
 
  show ip bgp peer-group
 
  show ip bgp peer-group
 
Det går även att skapa policy och session templates, ''show ip bgp template peer-session''  
 
Det går även att skapa policy och session templates, ''show ip bgp template peer-session''  
 +
 +
Dynamically split the slow peer to slow-update group. When “permanent” is not configured, the “slow peer” will be moved to its regular original update group, after it becomes regular peer (converges).
 +
  bgp slow-peer split-update-group dynamic
 +
show ip bgp neighbors slow
  
 
'''Dynamic Peering'''
 
'''Dynamic Peering'''
Line 72: Line 88:
 
   bgp listen limit 10
 
   bgp listen limit 10
 
   bgp listen range 10.0.0.0/24 peer-group GROUP01
 
   bgp listen range 10.0.0.0/24 peer-group GROUP01
   neighbor GROUP01 remote-as 102
+
   neighbor GROUP01 remote-as 101
Dynamically split the slow peer to slow-update group. When “permanent” is not configured, the “slow peer” will be moved to its regular original update group, after it becomes regular peer (converges).
 
  bgp slow-peer split-update-group dynamic
 
show ip bgp neighbors slow
 
  
 
'''Route Refresh vs Soft Reconfiguration''' <br/>
 
'''Route Refresh vs Soft Reconfiguration''' <br/>
Line 93: Line 106:
 
Oavsett om reset eller reconfiguration används så kör man clear-kommandot för att göra det.
 
Oavsett om reset eller reconfiguration används så kör man clear-kommandot för att göra det.
 
  clear ip bgp 1.1.1.1 soft [in]
 
  clear ip bgp 1.1.1.1 soft [in]
 +
clear ip bgp * soft
  
 
'''eBGP Multihop''' <br/>
 
'''eBGP Multihop''' <br/>
Line 112: Line 126:
 
  show ip bgp neighbors 1.1.1.1 | i Maximum|Threshold
 
  show ip bgp neighbors 1.1.1.1 | i Maximum|Threshold
  
Default for internal neighbors is 5 sec and for external is 30 seconds.
+
'''GRE''' <br/>
  neighbor 1.1.1.1 advertise-interval <interval>
+
Det går även att upprätta BGP-grannskap över [[Cisco_GRE|GRE]]-tunnlar.
 +
 
 +
===Next Hop===
 +
Ändra så att annonserade uppdateringar har den egna IP-adressen istället för det som står i uppdateringen från den granne man har lärt sig nätverket av.
 +
neighbor 10.0.0.10 next-hop-self
 +
Alternativt
 +
neighbor 10.0.0.10 route-map OUT
 +
route-map OUT permit 10
 +
  set ip next-hop self | peer-address
 +
 
 +
===Diverse===
 +
När BGP startar väntas en specificerad tidsperiod för att grannarna ska etablera sig själva innan de första uppdateringarna skickas. När perioden är slut räknas best path för varje prefix och detta annonseras. Detta förbättrar konvergeringstiden eftersom om det skickades uppdateringar direkt och det strax efter kom ny information och en annan best path hade det behövts skickas igen. Update-delay används för att konfigurera just denna tidsperiod, default är 120 sekunder.
 +
bgp update-delay <seconds>
 +
Kan användas i kombination med
 +
bgp graceful-restart
 +
 
 +
Origin
 +
Kan vara incomplete eller IGP (EGP finns inte längre)
 +
show ip bgp 13.3.7.0 | b Origin
 +
 
 +
Timers
 +
timers bgp <keepalive> <holdtime> <minimum hold time from neighbor>
 +
timers bgp 10 30 20
 +
 
 +
'''Backdoor''' <br/>
 +
Sätter AD till 200 på routen så IGPs används i första hand.
 +
network 10.0.0.0 mask 255.0.0.0 backdoor
 +
Går även manuellt att sätta högre distance på prefix från grannar
 +
 
 +
'''DMZ Link''' <br/>
 +
Use DMZ Link Bandwidth as weight for BGP multipaths on single-hop EBGP peers. Bandwidth skickas med i uppdateringar som extended community och kan användas för lastdelning av trafiken.
 +
bgp dmzlink-bw
 +
neighbor 2.2.2.2 dmzlink-bw
 +
 
 +
Have route-map set commands take priority over BGP commands such as next-hop unchanged
 +
bgp route-map priority
 +
 
 +
Default annonseras routes som ej hamnar i RIB (RIB-failure) vidare till andra, ändra detta:
 +
bgp suppress-inactive
 +
show ip bgp rib-failure
 +
 
 +
==Default route==
 +
Send default route, måste finnas i routingtabellen
 +
network 0.0.0.0
 +
eller
 +
default-information originate
 +
Requires redistribution och måste finnas i routingtabellen
 +
neighbor default-originate
 +
Skickar default route villkorslöst
 +
 
 +
==Summarization==
 +
Auto-Summary är avstängt default och bör vara det. Om det är påslaget påverkar det network och redistribution.
 +
* network-kommando: classful and more specific
 +
* redistribution: only classful
 +
 
 +
aggregate-address, null route automatically installed
 +
aggregate-address 10.0.0.0 255.0.0.0 [summary-only] [as-set]
 +
summary-only, suppress detailed routes. AS-set innebär att alla ASN från de mer specifika routsen ska klumpas ihop och inkluderas i summeringen, ett set räknas som ett AS hopp.
 +
 
 +
Alternativt
 +
ip route 10.0.0.0 255.0.0.0 null 0
 +
router bgp 100
 +
  network 10.0.0.0 255.0.0.0
 +
 
 +
'''Suppress-map''' <br/>
 +
Med aggregate-address skickas en summary och de mer specifika prefixen. Detta går att styra med en suppress-map som fungerar som en svartlista.
 +
ip prefix-list DONT-SUPPRESS-THIS permit 10.0.2.0/24
 +
route-map SUPPRESS deny 10
 +
  match ip address prefix-list DONT-SUPPRESS-THIS
 +
route-map SUPPRESS permit 20
 +
router bgp 100
 +
  aggregate-address 10.0.0.0 255.255.0.0 suppress-map SUPPRESS
 +
 
 +
'''Unsuppress-map''' <br/>
 +
Används om man vill skicka mer specifika prefix till en granne trots att man använder summary-only, fungerar som en vitlista.
 +
router bgp 100
 +
  aggregate-address 10.0.0.0 255.255.0.0 summary-only
 +
  neighbor 1.1.1.1 unsuppress-map UNSUPPRESS
 +
ip prefix-list UNSUPPRESS-THIS permit 10.0.2.0/24
 +
route-map UNSUPPRESS permit 10
 +
  match ip address prefix-list UNSUPPRESS-THIS
 +
 
 +
==Multiprotocol BGP==
 +
För att kunna skicka NLRI om annat än IPv4, t.ex. VPN routes för olika VRF:er,  behövs fler path attributes. MP-BGP (RFC 4760) är ett extension till BGP som ger två nya optional nontransitive attributes. Multiprotocol Reachable NLRI (MP_REACH_NLRI) annonserar MP-routes och Multiprotocol Unreachable NLRI (MP_UNREACH_NLRI) drar tillbaka MP-routes. Dessa innehåller AFI, Next-hop och NLRI. NLRI står för lägga till eller ta bort routes och next-hop. MP-BGP listas som capability i Open-paketen och körs för det mesta inom samma AS. Se även [[Cisco_MPLS|MPLS]].
 +
 
 +
IPv4 unicast aktiveras så fort man konfigurerar MP-BGP.
 +
  router bgp 100
 +
  no bgp default ipv4-unicast
 +
  address-family vpnv4
 +
  neighbor 1.1.1.1 activate
 +
  neighbor 1.1.1.1 send-community extended
 +
  exit-address-family
 +
BGP send-community slås på automatiskt när man aktiverar en granne för det är ett måste för att MP-BGP ska fungera.
 +
 
 +
Routes som skickas från en VRF (adj-ribs-out)
 +
show ip bgp vrf Name neighbors 10.10.10.10 advertised-routes
 +
 
 +
==Route Reflector==
 +
Routes lärda av iBGP skickas ej vidare till iBGP-grannar per default. En route reflector (RFC 1966) bryter denna regel så full mesh iBGP-grannskap behövs ej och iBGP blir mer skalbart. Dock skickar en RR endast vidare routes som anses "best" i den egna BGP-tabellen, detta håller nere antalet annonserade routes. För övrigt är enda gången en RR inte skickar vidare NLRI när det ska till en icke-klient då NLRI är mottagen från en icke-klient. För att hålla nätverket loopfritt används Path Attribute. RR sätter CLUSTER_LIST och det innehåller egna cluster-id som skickas med Updates, innehåller en mottagen update det egna cluster-id så kommer prefixet discardas. ORIGINATOR_ID, RID på iBGP-routern som först annonserade prefixet, skickas även med. Ser en router ett prefix med sitt egna RID som ORIGINATOR_ID kommer inte prefixet att annonseras vidare. För HA används fördelaktigt ett eller flera RR-kluster.
 +
 
 +
'''Utmaningar''' <br/>
 +
På grund av att RR endast annonserar vidare en path blir det reduced path diversity och om inte klienterna får additional path visibility i förväg kan RR introducera högre konvergeringstid samt att man tappar multi-pathing. Detta går att lösa med Additional Paths. Eftersom RR kör best path utifrån sitt eget perspektiv (IGP cost) kan det även leda till sub-optimal routing. Om man kör IP forwarding istället för label forwarding kan även forwarding loopar skapas tack vare RR.
 +
 
 +
RR-server
 +
router bgp 65000
 +
  neighbor 1.1.1.1 remote-as 65000
 +
  neighbor 1.1.1.1 update-source lo0
 +
  neighbor 1.1.1.1 route-reflector-client
 +
 
 +
Kluster konfigureras på RR-server, sätt samma cluster-id på de RR som ska ingå i klustret. Man kan ha flera kluster.
 +
router bgp 65000
 +
  bgp cluster-id 5
 +
 
 +
RR-klienter känner inte till RR-konceptet så de konfigureras som vanlig iBGP.
 +
router bgp 65000
 +
  neighbor 2.2.2.2 remote-as 65000
 +
  neighbor 2.2.2.2 update-source lo0
 +
 
 +
Verify
 +
show ip bgp update-group
  
neighbor 1.1.1.1 transport multi-session
+
Det är inte alltid RR finns i forwarding path, då kan man använda "Selective RIB Download" för att spara lokala resurser. All NLRI finns i BGP-tabellen som vanligt för best-path och annonsering men det behöver ju aldrig läggas in entries i RIB/FIB. En table-map är en route-map för BGP-tabellen istället för per grannskap.
 +
table-map BORD filter
  
'''GRE''' <br/>
+
==Confederations==
Det går även att upprätta BGP-grannskap över [[Cisco_GRE|GRE]]-tunnlar.
+
BGP confederations (RFC 5065) delar upp ett AS i flera sub-AS. Routrar inom samma sub-AS är confederation iBGP-grannar medans mellan sub-AS är confederation eBGP-grannar. iBGP fungerar precis likadant, dvs routes lärda från iBGP annonseras ej vidare till iBGP-grannar och det behövs således full mesh grannskap alternativt en route reflector inom varje sub-AS. För att undvika loopar används path attributet AS_PATH. Istället för de vanliga AS_SEQ och AS_SET används AS_CONFED_SEQ och AS_CONFED_SET. Finns en grannes sub-AS redan med i AS_CONFED_SEQ så kommer prefixet inte att annonseras till den. När det gäller confederation eBGP används TTL 1 precis som med vanlig eBGP däremot ändras inte NEXT_HOP default mellan sub-AS. Om ett prefix ska annonseras ut från en confederation tas confederation ASN bort från AS_PATH så utsidan ser endast ett AS.
 +
router bgp 65000
 +
  bgp confederation identifier 123
 +
 
 +
För att routern ska veta att det är ett confederation eBGP-grannskap och inte ett vanligt ange ''bgp confederation peers''. Detta behövs inte på routrar som ej har confederation eBGP-grannskap.
 +
router bgp 65000
 +
  bgp confederation peers 65001
 +
  neighbor 10.0.0.20 remote-as 65001
  
 
==Path Selection==
 
==Path Selection==
Till skillnad från IGPer används inte enbart metric för att avgöra vilken som är bästa routen, istället används ett gäng Path Attributes för att komma fram till vad som ska installeras i routingtabellen.  
+
Till skillnad från IGPer används inte enbart metric för att avgöra vilken som är bästa routen, istället används ett gäng Path Attributes för att komma fram till vad som ska annonseras vidare och installeras i routingtabellen. Kolla inkomna PA som inte stöds: ''show ip bgp path-attribute discard|unknown''
  
 
'''Well Known''' ska stödjas av alla BGP-implementationer
 
'''Well Known''' ska stödjas av alla BGP-implementationer
Line 153: Line 294:
 
|Cluster ID
 
|Cluster ID
 
|}
 
|}
Transitive betyder att PA ska forwarderas till andra även om routern själv inte har stöd för just det PA. Nontransitive PA ska tas bort från uppdateringar som skickas vidare.
+
Transitive betyder att PA ska forwarderas till andra även om routern själv inte har stöd för just det PA. Nontransitive PA ska tas bort från uppdateringar som lämnar det egna AS.
  
 
'''Path Selection Summary'''
 
'''Path Selection Summary'''
Line 203: Line 344:
  
 
'''Best path selection''' <br/>
 
'''Best path selection''' <br/>
Det finns många sätt att ändra BGPs beteende.
+
Det finns många sätt att ändra BGPs beteende med avseende på path selection.
  
 
Allow comparing MED from different neighbors
 
Allow comparing MED from different neighbors
Line 227: Line 368:
  
 
'''Additional Paths''' <br/>
 
'''Additional Paths''' <br/>
Med iBGP kan man använda add-paths.  
+
Med iBGP kan man använda add-paths. Add-paths lägger på ett unikt Path ID på prefixet för att det ska kunna gå att skilja på dem.
 
  router bgp 100
 
  router bgp 100
 
   bgp additional-paths select all
 
   bgp additional-paths select all
Line 235: Line 376:
 
Finns också best-external och diverse-path. (Diverse-Path tells a BGP router to deliberately calculate the 2nd-best path that has a different next hop than the first-best path. Diverse-Path was a workaround before Add-Path was supported, görs endast på route reflector: ''neighbor 2.2.2.2 advertise diverse-path backup'')
 
Finns också best-external och diverse-path. (Diverse-Path tells a BGP router to deliberately calculate the 2nd-best path that has a different next hop than the first-best path. Diverse-Path was a workaround before Add-Path was supported, görs endast på route reflector: ''neighbor 2.2.2.2 advertise diverse-path backup'')
  
==Multiprotocol BGP==
+
==Path Manipulation==
För att kunna skicka NLRI om annat än IPv4, t.ex. VPN routes för olika VRF:er,  behövs fler path attributes. MP-BGP (RFC 4760) är ett extension till BGP som ger två nya optional nontransitive attributes. Multiprotocol Reachable NLRI (MP_REACH_NLRI) annonserar MP-routes och Multiprotocol Unreachable NLRI (MP_UNREACH_NLRI) drar tillbaka MP-routes. Dessa innehåller AFI, Next-hop och NLRI. NLRI står för lägga till eller ta bort routes och next-hop. MP-BGP listas som capability i Open-paketen och körs för det mesta inom samma AS. Se även [[Cisco_MPLS|MPLS]].
+
'''Outbound from AS:'''
 +
* Weight
 +
* Local preference
 +
* Communities (mer skalbart än LOCAL_PREF)
  
IPv4 unicast aktiveras så fort man konfigurerar MP-BGP.
+
'''Inbound to AS:'''
router bgp 100
+
* AS-prepend
  no bgp default ipv4-unicast
+
* MED
  address-family vpnv4
 
  neighbor 1.1.1.1 activate
 
  neighbor 1.1.1.1 send-community extended
 
  exit-address-family
 
BGP send-community slås på automatiskt när man aktiverar en granne för det är ett måste för att MP-BGP ska fungera.
 
  
==Diverse==
+
===MED===
För att byta från NLRI-format till AFI-format i konfigurationen
+
Multi-exit discriminator är ett konfigurerbart värde som kan användas för att välja var trafik komma in till sitt AS. Eftersom det är ett nontransitive attribute skickas det inom AS men lämnar ej. Det jämförs bara om flera olika paths kommer från samma AS, detta kan ändras med bgp ''always-compare-med''.
  bgp upgrade-cli
+
route-map MED_50 permit 10
 +
  set metric 50
 +
  neighbor 1.1.1.1 route-map MED_50 out
  
Delay the first update
+
===Local Preference===
bgp update-delay <seconds>
+
Local Preference är ett konfigurerbart värde som används för att välja var trafik ska lämna det egna AS. Det skickas med NLRI till iBGP-grannar men ej eBGP. När en uppdateringar kommer från en eBGP-peer sätts default preference (100) på prefixet innan det annonseras vidare till iBGP.
Kan användas i kombination med
+
  bgp default local-preference 100
  bgp graceful-restart
 
  
Synchronization is disabled by default in Cisco IOS post 12.2(8)T. Routes need to be visible in IGP before BGP can propagate prefix. OSPF RID måste vara samma som BGP RID.
+
Högst preference vinner
no synchronization
+
route-map LOCALPREF permit 10
 +
  set local-preference 500
 +
neighbor 1.1.1.1 route-map LOCALPREF in
  
Origin
+
===AS-prepend===
Kan vara incomplete eller IGP (EGP finns inte längre)
+
För att ändra var man vill att trafik ska komma in till det egna AS kan man manipulera AS_PATH genom att lägga på sitt AS flera gånger för att göra pathen längre.
  show ip bgp 13.3.7.0 | b Origin
+
route-map PREPEND permit 10
 +
  set as-path prepend 100 100 100
 +
  neighbor 1.1.1.1 route-map PREPEND out
  
Timers
+
===Weight===
timers bgp <keepalive> <holdtime> <minimum hold time from neighbor>
+
Cisco proprietary och finns endast inom routern själv.  
timers bgp 10 30 20
+
  route-map WEIGHT permit 10
 
+
   set weight 2000
Scan interval <br/>
+
  neighbor 1.1.1.1 route-map WEIGHT in
Hur ofta IGP ska scannas efter uppdateringar, default är 60 sekunder.
 
router bgp 100
 
  bgp scan-time <5-60>
 
  address-family vpnv4 unicast
 
  bgp scan-time import <5-60>
 
 
 
'''Backdoor''' <br/>
 
Sätter AD till 200 på routen så IGPs används i första hand.
 
network 10.0.0.0 mask 255.0.0.0 backdoor
 
Går även manuellt att sätta högre distance på prefix från grannar
 
 
 
'''DMZ Link''' <br/>
 
Use DMZ Link Bandwidth as weight for BGP multipaths on single-hop EBGP peers. Bandwidth skickas med i uppdateringar som extended community och kan användas för lastdelning av trafiken.
 
bgp dmzlink-bw
 
neighbor 2.2.2.2 dmzlink-bw
 
 
 
Have route-map set commands take priority over BGP commands such as next-hop unchanged
 
bgp route-map priority
 
 
 
Default annonseras routes som ej hamnar i RIB (RIB-failure) vidare till andra, ändra detta:
 
bgp suppress-inactive
 
 
 
===Next Hop===
 
Ändra så att annonserade uppdateringar har den egna IP-adressen istället för det som står i uppdateringen från den granne man har lärt sig nätverket av.
 
  neighbor 10.0.0.10 next-hop-self
 
Alternativt
 
neighbor 10.0.0.10 route-map OUT
 
route-map OUT permit 10  
 
   set ip next-hop-self
 
Alternativt
 
route-map 10.0.0.10 permit 10
 
  set ip next-hop peer-address
 
 
 
==Default route==
 
Send default route, måste finnas i routingtabellen
 
network 0.0.0.0
 
eller
 
default-information originate
 
Requires redistribution och måste finnas i routingtabellen
 
neighbor default-originate
 
Skickar default route villkorslöst
 
 
 
==Summarization==
 
Auto-Summary är avstängt default och bör vara det. Om det är påslaget påverkar det network och redistribution.
 
* network-kommando: classful and more specific
 
* redistribution: only classful
 
 
 
aggregate-address, null route automatically installed
 
aggregate-address 10.0.0.0 255.0.0.0 [summary-only] [as-set]
 
summary-only, suppress detailed routes. AS-set innebär att alla AS från de mer specifika routsen skickas med summeringen.
 
 
 
Alternativt
 
ip route 10.0.0.0 255.0.0.0 null 0
 
router bgp 100
 
  network 10.0.0.0 255.0.0.0
 
 
 
Attribute-map
 
 
 
'''Suppress-map''' <br/>
 
Med aggregate-address skickas en summary och de mer specifika prefixen. Detta går att styra med en suppress-map.
 
ip prefix-list DONT-SUPPRESS-THIS permit 10.0.2.0/24
 
route-map SUPPRESS deny 10
 
  match ip address prefix-list DONT-SUPPRESS-THIS
 
route-map SUPPRESS permit 20
 
router bgp 100
 
  aggregate-address 10.0.0.0 255.255.0.0 suppress-map SUPPRESS
 
 
 
'''Unsuppress-map''' <br/>
 
Används om man vill skicka mer specifika prefix till en granne trots att man använder summary-only.
 
  router bgp 100
 
  aggregate-address 10.0.0.0 255.255.0.0 summary-only
 
  neighbor 1.1.1.1 unsuppress-map UNSUPPRESS
 
ip prefix-list UNSUPPRESS-THIS permit 10.0.2.0/24
 
route-map UNSUPPRESS permit 10
 
  match ip address prefix-list UNSUPPRESS-THIS
 
 
 
==Route Reflector==
 
Routes lärda av iBGP skickas ej vidare till iBGP-grannar per default. En route reflector bryter denna regel så full mesh iBGP-grannskap behövs ej och iBGP blir mer skalbart. Dock skickar en RR endast vidare routes som anses "best" i den egna BGP-tabellen, detta håller nere antalet annonserade routes. För övrigt är enda gången en RR inte skickar vidare NLRI när det ska till en icke-klient då NLRI är mottagen från en icke-klient. För att hålla nätverket loopfritt används Path Attribute. RR sätter CLUSTER_LIST och det innehåller egna cluster-id som skickas med Updates, innehåller en mottagen update det egna cluster-id så kommer prefixet discardas. ORIGINATOR_ID, RID på iBGP-routern som först annonserade prefixet, skickas även med. Ser en router ett prefix med sitt egna RID som ORIGINATOR_ID kommer inte prefixet att annonseras vidare. För HA används fördelaktigt ett eller flera RR-kluster.
 
 
 
'''Utmaningar''' <br/>
 
På grund av att RR endast annonserar vidare en path blir det reduced path diversity och om inte klienterna får additional path visibility i förväg kan RR introducera högre konvergeringstid samt att man tappar multi-pathing. Detta går att lösa med Additional Paths. Eftersom RR kör best path utifrån sitt eget perspektiv (IGP cost) kan det även leda till sub-optimal routing. Om man kör IP forwarding istället för label forwarding kan även forwarding loopar skapas tack vare RR.
 
 
 
RR-server
 
router bgp 65000
 
  neighbor 1.1.1.1 remote-as 65000
 
  neighbor 1.1.1.1 update-source lo0
 
  neighbor 1.1.1.1 route-reflector-client
 
 
 
Kluster konfigureras på RR-server, sätt samma cluster-id på de RR som ska ingå i klustret. Man kan ha flera kluster.
 
router bgp 65000
 
  bgp cluster-id 5
 
 
 
RR-klienter känner inte till RR-konceptet så de konfigureras som vanlig iBGP.
 
router bgp 65000
 
  neighbor 2.2.2.2 remote-as 65000
 
  neighbor 2.2.2.2 update-source lo0
 
 
 
Verify
 
show ip bgp update-group
 
 
 
Det är inte alltid RR finns i forwarding path, då kan man använda "Selective RIB Download" för att spara lokala resurser. All NLRI finns i BGP-tabellen som vanligt för best-path och annonsering men det behöver ju aldrig läggas in entries i RIB/FIB. En table-map är en route-map för BGP-tabellen istället för per grannskap.
 
table-map BORD filter
 
  
==Confederations==
+
===Community===
BGP confederations (RFC 5065) delar upp ett AS i flera sub-AS. Routrar inom samma sub-AS är confederation iBGP-grannar medans mellan sub-AS är confederation eBGP-grannar. iBGP fungerar precis likadant, dvs routes lärda från iBGP annonseras ej vidare till iBGP-grannar och det behövs således full mesh grannskap alternativt en route reflector inom varje sub-AS. För att undvika loopar används path attributet AS_PATH. Istället för de vanliga AS_SEQ och AS_SET används AS_CONFED_SEQ och AS_CONFED_SET. Finns en grannes sub-AS redan med i AS_CONFED_SEQ så kommer prefixet inte att annonseras till den. När det gäller confederation eBGP används TTL 1 precis som med vanlig eBGP däremot ändras inte NEXT_HOP default mellan sub-AS. Om ett prefix ska annonseras ut från en confederation tas confederation ASN bort från AS_PATH så utsidan ser endast ett AS.
 
router bgp 65000
 
  bgp confederation identifier 123
 
 
 
För att routern ska veta att det är ett confederation eBGP-grannskap och inte ett vanligt ange ''bgp confederation peers''. Detta behövs inte på routrar som ej har confederation eBGP-grannskap.
 
router bgp 65000
 
  bgp confederation peers 65001
 
  neighbor 10.0.0.20 remote-as 65001
 
 
 
==Community==
 
 
Community Path Attribute är 32-bitars nummer som används för att tagga prefix. Då kan man använda taggen för att matcha på och sedan manipulera path eller filtrera. Routrar kan kolla efter taggen och sedan fatta routingbeslut. Detta PA bärs med i annonseringarna och kan därmed användas av enheter som befinner sig flera AS bort. Eftersom det är ett optional transitive PA så behöver inte ens routrarna emellan förstå det. Till exempel kan man konfigurera att prefix med en viss community ska få en viss LOCAL_PREF och man kan på så sätt styra trafiken.  
 
Community Path Attribute är 32-bitars nummer som används för att tagga prefix. Då kan man använda taggen för att matcha på och sedan manipulera path eller filtrera. Routrar kan kolla efter taggen och sedan fatta routingbeslut. Detta PA bärs med i annonseringarna och kan därmed användas av enheter som befinner sig flera AS bort. Eftersom det är ett optional transitive PA så behöver inte ens routrarna emellan förstå det. Till exempel kan man konfigurera att prefix med en viss community ska få en viss LOCAL_PREF och man kan på så sätt styra trafiken.  
  
Line 422: Line 454:
 
* local-as: Annonsera inte utanför eget confederation sub-AS
 
* local-as: Annonsera inte utanför eget confederation sub-AS
 
  show ip bgp community no-advertise no-export local-AS
 
  show ip bgp community no-advertise no-export local-AS
 +
 +
===AS Manipulation===
 +
Do not prepend local-as to updates from ebgp peers and replace real AS with local AS in the EBGP updates
 +
neighbor 1.1.1.1 local-as 601 no-prepend replace-as
 +
 +
Kan användas för att dölja ASN, Override matching AS-number while sending update
 +
neighbor 1.1.1.1 as-overide
 +
 +
Accept as-path with own AS present in it
 +
neighbor 1.1.1.1 allowas-in
 +
 +
Remove private AS number from outbound updates
 +
neighbor 1.1.1.1 remove-private-as [all]
 +
 +
'''Attribute-map''' <br/>
 +
Attribute map kan användas för att manipulera AS och/eller attributes från AS-sets.
  
 
==Filtering==
 
==Filtering==
Line 475: Line 523:
 
  show bgp vpnv4 unicast all extcommunity-list FILTER-AS400-VPNV4-IN
 
  show bgp vpnv4 unicast all extcommunity-list FILTER-AS400-VPNV4-IN
  
==Path Manipulation==
+
==Convergence==
'''Outbound from AS:'''
+
BGP är inte designat för att vara det snabbaste protokollet, detta för att kunna fungera i stor skala men det finns flera tekniker för att sänka konvergeringstid (recovery). Även om routes tas bort från routingtabellen snabbt så väntar BGP-processen på att TCP-sessionen ska timea ut eller hold-down ska gå ut innan konvergeringsprocessen börjar. Hold-down timer är default 3 minuter. Det är också så att BGP inte skickar uppdateringar direkt till grannar utan det sker periodvis baserat på peering-typ, 5 sekunder för iBGP-grannar och 30 sekunder för eBGP. BGP verifierar next-hop reachability med hjälp av IGP, detta görs var 60:e sekund. Allt detta leder till att BGP kan ta väldigt lång tid på sig att konvergera.
* Weight
 
* Local preference
 
* Communities
 
  
'''Inbound to AS:'''
+
'''Next Hop Tracking''' <br/>
* AS-prepend (''set as-path prepend 100 100 100'')
+
NHT is an on-by-default feature that notifies BGP to a change in routing for BGP prefix next-hops. This is important because previously this only happened as part of the BGP Scanner process, which runs every 60 seconds by default. The bgp nexthop trigger delay defines how long for the NHT process to delay updating BGP. This timer is here to prevent BGP from being beaten up by a flapping IGP route. At 5 seconds, the BGP process can't get bogged down from unnecessary updates.
* MED
+
bgp nexthop trigger enable
 +
bgp nexthop trigger delay 10
  
===MED===
+
'''Scan interval''' <br/>
Multi-exit discriminator. Jämförs bara om flera olika paths kommer från samma AS, ändras med bgp ''always-compare-med''.
+
Hur ofta IGP ska scannas efter uppdateringar, default är 60 sekunder.
ip access-list standard MED
+
  router bgp 100
  permit 1.1.1.0 0.0.0.255
+
   bgp scan-time <5-60>
  route-map MED_50 permit 10
+
   address-family vpnv4 unicast
  match ip address MED
+
  bgp scan-time import <5-60>
   set metric 50
 
 
 
===Local Preference===
 
Preference
 
bgp default local-preference 100
 
 
 
Högst preference vinner
 
route-map LOCALPREF permit 10
 
   set local-preference 500
 
neighbor 1.1.1.1 route-map LOCALPREF in
 
 
 
===AS Manipulation===
 
Do not prepend local-as to updates from ebgp peers and replace real AS with local AS in the EBGP updates
 
neighbor 1.1.1.1 local-as 601 no-prepend replace-as
 
 
 
Kan användas för att dölja ASN, Override matching AS-number while sending update
 
neighbor 1.1.1.1 as-overide
 
 
 
Accept as-path with own AS present in it
 
neighbor 1.1.1.1 allowas-in
 
 
 
Remove private AS number from outbound updates
 
neighbor 1.1.1.1 remove-private-as [all]
 
 
 
==Convergence==
 
BGP är inte designat för att vara det snabbaste protokollet, detta för att kunna fungera i stor skala men det finns flera tekniker för att sänka konvergeringstid (recovery). Även om routes tas bort från routingtabellen snabbt så väntar BGP-processen på att TCP-sessionen ska timea ut eller hold-down ska gå ut innan konvergeringsprocessen börjar. Hold-down timer är default 3 minuter. Det är också så att BGP inte skickar uppdateringar direkt till grannar utan det sker periodvis baserat på peering-typ, 5 sekunder för iBGP-grannar och 30 sekunder för eBGP. BGP verifierar next-hop reachability med hjälp av IGP, detta görs var 60:e sekund. Allt detta leder till att BGP kan ta väldigt lång tid på sig att konvergera.
 
  
 
'''eBGP neighbor loss detection''' <br/>
 
'''eBGP neighbor loss detection''' <br/>
Line 538: Line 558:
  
 
====BFD====
 
====BFD====
 +
Se även [[Cisco_BFD|Cisco BFD]].
 
  neighbor 1.1.1.1 fall-over bfd
 
  neighbor 1.1.1.1 fall-over bfd
 
  show bfd neighbor
 
  show bfd neighbor
 
The C-Bit is set by the BFD process itself, and isn't something you can toggle. However, you can tell your BFD process whether to ignore the setting or not. The default is to ignore.
 
The C-Bit is set by the BFD process itself, and isn't something you can toggle. However, you can tell your BFD process whether to ignore the setting or not. The default is to ignore.
 
  neighbor 2.2.2.2 fall-over bfd check-control-plane-failure
 
  neighbor 2.2.2.2 fall-over bfd check-control-plane-failure
Se även [[Cisco_BFD|BFD]].
 
 
'''Next Hop Tracking''' <br/>
 
NHT is an on-by-default feature that notifies BGP to a change in routing for BGP prefix next-hops. This is important because previously this only happened as part of the BGP Scanner process, which runs every 60 seconds by default. The bgp nexthop trigger delay defines how long for the NHT process to delay updating BGP. This timer is here to prevent BGP from being beaten up by a flapping IGP route. At 5 seconds, the BGP process can't get bogged down from unnecessary updates.
 
bgp nexthop trigger enable
 
bgp nexthop trigger delay 10
 
  
 
==Dampening==
 
==Dampening==
Line 559: Line 574:
 
  show ip bgp flap-statistics
 
  show ip bgp flap-statistics
 
  show ip bgp dampening parameters
 
  show ip bgp dampening parameters
 
==Show==
 
show ip bgp summary
 
show bgp ipv4 unicast
 
show ip bgp paths
 
show ip bgp rib-failure
 
Routes som skickas (adj-ribs-out)
 
sh ip bgp vrf Name neighbors 10.10.10.10 advertised-routes
 
 
Reset
 
clear ip bgp *
 
clear ip bgp <address> soft
 
 
Debug
 
debug ip bgp events
 
  
 
==Conditional Route Injection==
 
==Conditional Route Injection==

Revision as of 10:19, 29 May 2016

Border Gateway Protocol (RFC 4271) är ett path vector routing protokoll. Det kommunicerar på TCP port 179 så routing måste vara på plats, man kan nästan se det som ett L4-protokoll. TCP tillhandahåller acknowledgement, retransmission, sequencing och update fragmentation. BGP kan få många vägar till samma destination. Bästa vägen väljs utifrån en algoritm. Den bästa pathen markeras valid/best och blir en kandidat till routingtabellen. Om next hop inte är reachable så blir aldrig en route best. Default används 2 bytes ASN vilket ger 65535 stycken men det räcker inte. Det har i RFC 5396 skapats nya optional path attributes: AS4_PATH, AS4_AGGREGATOR och extended communities. Detta är en capability som listas i OPEN message. Ska en ny router i ett AS högre än 65535 prata med en gammal router används det reserverade ASN 23456 (AS_TRANS). Man kan konfigurera hur man vill att outputen ska se ut AS-mässigt, bgp asnotation dot

Type: Path Vector

AD: 20, 200

Protocols: IP

Packets: 4

Pakettyper

OPEN: Första paketet som skickas av varje sida används för att upprätta grannskap, innehåller grundläggande parametrar och capabilities.
UPDATE: En update innehåller routinginformation. Varje NLRI skickas endast en gång.
NOTIFICATION: Errormeddelanden, kan skickas för att starta om ett grannskap.
KEEPALIVE: Skickas regelbundet för att säkerställa att grannen lever. Peers måste komma överens om detta, default är 60 sek.

BGP table

Källor till BGP table:

  • Network command
  • BGP updates
  • Redistribution

Verify BGP table

show ip bgp
show bgp <AFI> unicast update-sources 

Neighbor

För att kunna utbyta routinginformation måste grannskap upprättas, detta görs med en TCP-anslutning som det skickas BGP-meddelanden över. eBGP har ttl 1 på alla BGP-paket som skickas ut samt accepteras in, detta går att ändra med ebgp-multihop. iBGP har inga sådana begränsningar utan skickar med TTL 255. eBGP byter även next-hop på den NLRI som skickas ut. eBGP kan inte peera med hjälp av en default route.

States
Grannskap kan befinna sig i olika tillstånd.
TCP
Idle State: ConnectRetry timer 120 sekunder
Active State: BGP speaker försöker nå peer med TCP
Connect State: TCP session established

BGP
OpenSent State: BGP version, AS number, hold time, BGP ID. Börja skicka keepalives
OpenConfirm State: Response recieved
Established State: Skicka uppdateringar. Neighbor up

Konfiguration

För att byta från NLRI-format till AFI-format i konfigurationen

bgp upgrade-cli 

Synchronization is disabled by default in Cisco IOS post 12.2(8)T. Synchronization bör vara avstängt annars medföljer vissa begränsningar. T.ex. måste routes finnas i IGP innan det kan propagera vidare med BGP och OSPF RID måste vara samma som BGP RID om sync är på.

no synchronization

Om ett grannskap är iBGP eller eBGP avgörs med remote-as som antingen är samma AS som en själv eller ett annat.

router bgp 65000
 neighbor 1.1.1.1 remote-as 65001
 neighbor 1.1.1.1 description Other side

Loopback. When configuring iBGP always use loopbacks (advertised by your IGP) for peering.

neighbor 1.1.1.1 update-source [interface]

md5 authentication görs med tcp option 19

neighbor 1.1.1.1 password SECRET
show ip bgp neighbors 1.1.1.1 | i state|Flags

Default for internal neighbors is 5 sec and for external is 30 seconds.

neighbor 1.1.1.1 advertise-interval <interval>

Verify

show ip bgp neighbor
show ip bgp summary
show tcp brief

Debug

debug ip bgp events

Passive Peer
Kan t.ex. behövas om grannskap går igenom en brandvägg. Default är såklart active.

bgp neighbor transport connection-mode active/passive

Peer Group

För att förenkla konfen kan man gruppera flera grannar i så kallade peer groups. Det blir även lite effektivare processing eftersom identiska Updates skickas till alla peers i gruppen.

neighbor GROUP01 peer-group
neighbor 1.1.1.1 peer-group GROUP01
show ip bgp peer-group

Det går även att skapa policy och session templates, show ip bgp template peer-session

Dynamically split the slow peer to slow-update group. When “permanent” is not configured, the “slow peer” will be moved to its regular original update group, after it becomes regular peer (converges).

 bgp slow-peer split-update-group dynamic
show ip bgp neighbors slow

Dynamic Peering

router bgp 100
 bgp listen limit 10
 bgp listen range 10.0.0.0/24 peer-group GROUP01
 neighbor GROUP01 remote-as 101

Route Refresh vs Soft Reconfiguration
Både Route Refresh och Soft Reconfiguration tillåter en router att ändra sin routing policy utan att starta om grannskapet (Hard reset). Soft reset skickar route-refresh för att begära att all NLRI skickas igen. Soft Reconfiguration lagrar all NLRI som kommer in från grannen i en separat tabell (adj-ribs-in) för att kunna köra om policyn lokalt när man clearar. Blir minne korrupt över tiden kan det dock ställa till problem. Soft Reconfiguration använder mer minne medans Route Refresh använder lite mer bandbredd. Route Refresh är rekommenderat.

show ip bgp neighbors 1.1.1.1 | s Neighbor capabilities
Neighbor capabilities:
   Route refresh: advertised and received(new)

Om en router inte har stöd för Refresh får Soft Reconfiguration användas. Då måste man slå på det på grannskapet.

neighbor 1.1.1.1 soft-reconfiguration inbound
show bgp ipv4 unicast neighbors 1.1.1.1 policy

Alternativt använd soft reconfiguration som fallback om andra sidan inte stödjer route refresh.

bgp soft-reconfig-backup

Kolla adj-ribs-in (alla prefix raw):

show ip bgp neighbors 1.1.1.1 received-routes

Oavsett om reset eller reconfiguration används så kör man clear-kommandot för att göra det.

clear ip bgp 1.1.1.1 soft [in]
clear ip bgp * soft

eBGP Multihop
Ska man upprätta eBGP-grannskap om neighbor-IP ej är directly connected, t.ex. mellan loopbacks, behöver man öka TTLn på paketen som skickas ut.

neighbor 1.1.1.1 ebgp-multihop 3

Alternativt godta TTL 1 genom att stänga av checken som kollar om grannen sitter på ett directly connected network genom att kolla routingtabellen. Grannen kan dock max vara ett hop bort för TTL är 1 med detta alternativ.

neighbor 1.1.1.1 disable-connected-check

TTL Security
TTL security till skillnad från eBGP-multihop räknar neråt från 255 som är vad eBGP-paketen nu skickas ut med. Det används för att skydda mot spoof attacks. TTL security and eBGP multihop are mutually exclusive, dvs endast en behövs. Detta gäller endast för eBGP peers.

neighbor 2.2.2.2 ttl-security hops 10
show ip bgp neighbors 2.2.2.2 | i TTL

10 betyder att endast BGP-paket med TTL 245 eller högre kan accepteras.

Maximum prefixes

neighbor 1.1.1.1 maximum-prefix 1000 

Only give warning message when limit is exceeded

neighbor 1.1.1.1 maximum-prefix 1000 warning-only
show ip bgp neighbors 1.1.1.1 | i Maximum|Threshold

GRE
Det går även att upprätta BGP-grannskap över GRE-tunnlar.

Next Hop

Ändra så att annonserade uppdateringar har den egna IP-adressen istället för det som står i uppdateringen från den granne man har lärt sig nätverket av.

neighbor 10.0.0.10 next-hop-self

Alternativt

neighbor 10.0.0.10 route-map OUT
route-map OUT permit 10 
 set ip next-hop self | peer-address

Diverse

När BGP startar väntas en specificerad tidsperiod för att grannarna ska etablera sig själva innan de första uppdateringarna skickas. När perioden är slut räknas best path för varje prefix och detta annonseras. Detta förbättrar konvergeringstiden eftersom om det skickades uppdateringar direkt och det strax efter kom ny information och en annan best path hade det behövts skickas igen. Update-delay används för att konfigurera just denna tidsperiod, default är 120 sekunder.

bgp update-delay <seconds>

Kan användas i kombination med

bgp graceful-restart

Origin Kan vara incomplete eller IGP (EGP finns inte längre)

show ip bgp 13.3.7.0 | b Origin

Timers

timers bgp <keepalive> <holdtime> <minimum hold time from neighbor>
timers bgp 10 30 20

Backdoor
Sätter AD till 200 på routen så IGPs används i första hand.

network 10.0.0.0 mask 255.0.0.0 backdoor

Går även manuellt att sätta högre distance på prefix från grannar

DMZ Link
Use DMZ Link Bandwidth as weight for BGP multipaths on single-hop EBGP peers. Bandwidth skickas med i uppdateringar som extended community och kan användas för lastdelning av trafiken.

bgp dmzlink-bw
neighbor 2.2.2.2 dmzlink-bw

Have route-map set commands take priority over BGP commands such as next-hop unchanged

bgp route-map priority

Default annonseras routes som ej hamnar i RIB (RIB-failure) vidare till andra, ändra detta:

bgp suppress-inactive
show ip bgp rib-failure

Default route

Send default route, måste finnas i routingtabellen

network 0.0.0.0

eller

default-information originate

Requires redistribution och måste finnas i routingtabellen

neighbor default-originate

Skickar default route villkorslöst

Summarization

Auto-Summary är avstängt default och bör vara det. Om det är påslaget påverkar det network och redistribution.

  • network-kommando: classful and more specific
  • redistribution: only classful

aggregate-address, null route automatically installed

aggregate-address 10.0.0.0 255.0.0.0 [summary-only] [as-set]

summary-only, suppress detailed routes. AS-set innebär att alla ASN från de mer specifika routsen ska klumpas ihop och inkluderas i summeringen, ett set räknas som ett AS hopp.

Alternativt

ip route 10.0.0.0 255.0.0.0 null 0
router bgp 100
 network 10.0.0.0 255.0.0.0

Suppress-map
Med aggregate-address skickas en summary och de mer specifika prefixen. Detta går att styra med en suppress-map som fungerar som en svartlista.

ip prefix-list DONT-SUPPRESS-THIS permit 10.0.2.0/24
route-map SUPPRESS deny 10
 match ip address prefix-list DONT-SUPPRESS-THIS
route-map SUPPRESS permit 20
router bgp 100
 aggregate-address 10.0.0.0 255.255.0.0 suppress-map SUPPRESS

Unsuppress-map
Används om man vill skicka mer specifika prefix till en granne trots att man använder summary-only, fungerar som en vitlista.

router bgp 100
 aggregate-address 10.0.0.0 255.255.0.0 summary-only 
 neighbor 1.1.1.1 unsuppress-map UNSUPPRESS
ip prefix-list UNSUPPRESS-THIS permit 10.0.2.0/24
route-map UNSUPPRESS permit 10
 match ip address prefix-list UNSUPPRESS-THIS

Multiprotocol BGP

För att kunna skicka NLRI om annat än IPv4, t.ex. VPN routes för olika VRF:er, behövs fler path attributes. MP-BGP (RFC 4760) är ett extension till BGP som ger två nya optional nontransitive attributes. Multiprotocol Reachable NLRI (MP_REACH_NLRI) annonserar MP-routes och Multiprotocol Unreachable NLRI (MP_UNREACH_NLRI) drar tillbaka MP-routes. Dessa innehåller AFI, Next-hop och NLRI. NLRI står för lägga till eller ta bort routes och next-hop. MP-BGP listas som capability i Open-paketen och körs för det mesta inom samma AS. Se även MPLS.

IPv4 unicast aktiveras så fort man konfigurerar MP-BGP.

router bgp 100
 no bgp default ipv4-unicast
 address-family vpnv4
  neighbor 1.1.1.1 activate
  neighbor 1.1.1.1 send-community extended
 exit-address-family

BGP send-community slås på automatiskt när man aktiverar en granne för det är ett måste för att MP-BGP ska fungera.

Routes som skickas från en VRF (adj-ribs-out)

show ip bgp vrf Name neighbors 10.10.10.10 advertised-routes 

Route Reflector

Routes lärda av iBGP skickas ej vidare till iBGP-grannar per default. En route reflector (RFC 1966) bryter denna regel så full mesh iBGP-grannskap behövs ej och iBGP blir mer skalbart. Dock skickar en RR endast vidare routes som anses "best" i den egna BGP-tabellen, detta håller nere antalet annonserade routes. För övrigt är enda gången en RR inte skickar vidare NLRI när det ska till en icke-klient då NLRI är mottagen från en icke-klient. För att hålla nätverket loopfritt används Path Attribute. RR sätter CLUSTER_LIST och det innehåller egna cluster-id som skickas med Updates, innehåller en mottagen update det egna cluster-id så kommer prefixet discardas. ORIGINATOR_ID, RID på iBGP-routern som först annonserade prefixet, skickas även med. Ser en router ett prefix med sitt egna RID som ORIGINATOR_ID kommer inte prefixet att annonseras vidare. För HA används fördelaktigt ett eller flera RR-kluster.

Utmaningar
På grund av att RR endast annonserar vidare en path blir det reduced path diversity och om inte klienterna får additional path visibility i förväg kan RR introducera högre konvergeringstid samt att man tappar multi-pathing. Detta går att lösa med Additional Paths. Eftersom RR kör best path utifrån sitt eget perspektiv (IGP cost) kan det även leda till sub-optimal routing. Om man kör IP forwarding istället för label forwarding kan även forwarding loopar skapas tack vare RR.

RR-server

router bgp 65000
 neighbor 1.1.1.1 remote-as 65000
 neighbor 1.1.1.1 update-source lo0
 neighbor 1.1.1.1 route-reflector-client

Kluster konfigureras på RR-server, sätt samma cluster-id på de RR som ska ingå i klustret. Man kan ha flera kluster.

router bgp 65000
 bgp cluster-id 5

RR-klienter känner inte till RR-konceptet så de konfigureras som vanlig iBGP.

router bgp 65000
 neighbor 2.2.2.2 remote-as 65000
 neighbor 2.2.2.2 update-source lo0

Verify

show ip bgp update-group

Det är inte alltid RR finns i forwarding path, då kan man använda "Selective RIB Download" för att spara lokala resurser. All NLRI finns i BGP-tabellen som vanligt för best-path och annonsering men det behöver ju aldrig läggas in entries i RIB/FIB. En table-map är en route-map för BGP-tabellen istället för per grannskap.

table-map BORD filter

Confederations

BGP confederations (RFC 5065) delar upp ett AS i flera sub-AS. Routrar inom samma sub-AS är confederation iBGP-grannar medans mellan sub-AS är confederation eBGP-grannar. iBGP fungerar precis likadant, dvs routes lärda från iBGP annonseras ej vidare till iBGP-grannar och det behövs således full mesh grannskap alternativt en route reflector inom varje sub-AS. För att undvika loopar används path attributet AS_PATH. Istället för de vanliga AS_SEQ och AS_SET används AS_CONFED_SEQ och AS_CONFED_SET. Finns en grannes sub-AS redan med i AS_CONFED_SEQ så kommer prefixet inte att annonseras till den. När det gäller confederation eBGP används TTL 1 precis som med vanlig eBGP däremot ändras inte NEXT_HOP default mellan sub-AS. Om ett prefix ska annonseras ut från en confederation tas confederation ASN bort från AS_PATH så utsidan ser endast ett AS.

router bgp 65000
 bgp confederation identifier 123

För att routern ska veta att det är ett confederation eBGP-grannskap och inte ett vanligt ange bgp confederation peers. Detta behövs inte på routrar som ej har confederation eBGP-grannskap.

router bgp 65000
 bgp confederation peers 65001
 neighbor 10.0.0.20 remote-as 65001

Path Selection

Till skillnad från IGPer används inte enbart metric för att avgöra vilken som är bästa routen, istället används ett gäng Path Attributes för att komma fram till vad som ska annonseras vidare och installeras i routingtabellen. Kolla inkomna PA som inte stöds: show ip bgp path-attribute discard|unknown

Well Known ska stödjas av alla BGP-implementationer

Mandatory Discretionary
AS Path Local Preference
Next Hop Atomic Aggregate
Origin

Allt som är Mandatory måste alltid skickas med i varje uppdatering, det är ej ett krav för Discretionary.

Optional

Transitive Non transitive
Aggregator MED
Community Originator
Cluster ID

Transitive betyder att PA ska forwarderas till andra även om routern själv inte har stöd för just det PA. Nontransitive PA ska tas bort från uppdateringar som lämnar det egna AS.

Path Selection Summary

Attribute Description Preferens
Weight Administrativ Högsta
LOCAL_PREF Skickas mellan peers inom AS Högsta
Self-originated Prefer paths originated locally
AS_PATH Minimize AS hops Kortast
ORIGIN Prefer IGP-learned routes over unknown IGP
MED Used externally to enter an AS Lägsta
External Prefer eBGP routes over iBGP (AD) eBGP
IGP Cost Consider IGP metric to NEXT_HOP Lägsta
eBGP Peering Favor more stable routes Äldsta
Router ID Sista tie breaker Lägsta

Best path selection
Det finns många sätt att ändra BGPs beteende med avseende på path selection.

Allow comparing MED from different neighbors

bgp always-compare-med

Treat missing MED as the least preferred one

bgp bestpath med missing-as-worst

Compare MED among confederation paths

bgp bestpath med confed

Pick the best-MED path among paths advertised from the neighboring AS

bgp deterministic-med

Ignore cost communities in bestpath selection

bgp bestpath cost-community ignore

Stänga av att oldest path kan ge best route. Compare router-id for identical EBGP paths

bgp bestpath compare-routerid

Maximum Paths
Flera paths kan hamna i routingtabellen men endast best path kan annonseras vidare (om inte add-path används). Default är EN path till skillnad från andra routingprotokoll. Default måste allt upp till IGP Cost vara lika för att maximum paths ska spela någon roll. Inte alla topologier stödjer multipath.

router bgp 100
 maximum-paths 4  #eBGP
 maximum-paths ibgp 4  #iBGP
 maximum-paths eibgp 4  #both

Additional Paths
Med iBGP kan man använda add-paths. Add-paths lägger på ett unikt Path ID på prefixet för att det ska kunna gå att skilja på dem.

router bgp 100
 bgp additional-paths select all
 neighbor 1.1.1.1 additional-paths send receive
 neighbor 1.1.1.1 advertise additional-paths all

Finns också best-external och diverse-path. (Diverse-Path tells a BGP router to deliberately calculate the 2nd-best path that has a different next hop than the first-best path. Diverse-Path was a workaround before Add-Path was supported, görs endast på route reflector: neighbor 2.2.2.2 advertise diverse-path backup)

Path Manipulation

Outbound from AS:

  • Weight
  • Local preference
  • Communities (mer skalbart än LOCAL_PREF)

Inbound to AS:

  • AS-prepend
  • MED

MED

Multi-exit discriminator är ett konfigurerbart värde som kan användas för att välja var trafik komma in till sitt AS. Eftersom det är ett nontransitive attribute skickas det inom AS men lämnar ej. Det jämförs bara om flera olika paths kommer från samma AS, detta kan ändras med bgp always-compare-med.

route-map MED_50 permit 10
 set metric 50
neighbor 1.1.1.1 route-map MED_50 out

Local Preference

Local Preference är ett konfigurerbart värde som används för att välja var trafik ska lämna det egna AS. Det skickas med NLRI till iBGP-grannar men ej eBGP. När en uppdateringar kommer från en eBGP-peer sätts default preference (100) på prefixet innan det annonseras vidare till iBGP.

bgp default local-preference 100

Högst preference vinner

route-map LOCALPREF permit 10
 set local-preference 500
neighbor 1.1.1.1 route-map LOCALPREF in

AS-prepend

För att ändra var man vill att trafik ska komma in till det egna AS kan man manipulera AS_PATH genom att lägga på sitt AS flera gånger för att göra pathen längre.

route-map PREPEND permit 10
 set as-path prepend 100 100 100
neighbor 1.1.1.1 route-map PREPEND out

Weight

Cisco proprietary och finns endast inom routern själv.

route-map WEIGHT permit 10
 set weight 2000
neighbor 1.1.1.1 route-map WEIGHT in

Community

Community Path Attribute är 32-bitars nummer som används för att tagga prefix. Då kan man använda taggen för att matcha på och sedan manipulera path eller filtrera. Routrar kan kolla efter taggen och sedan fatta routingbeslut. Detta PA bärs med i annonseringarna och kan därmed användas av enheter som befinner sig flera AS bort. Eftersom det är ett optional transitive PA så behöver inte ens routrarna emellan förstå det. Till exempel kan man konfigurera att prefix med en viss community ska få en viss LOCAL_PREF och man kan på så sätt styra trafiken.

Både heltal och AA:NN accepteras i konfiguration och show-kommandon men outputen från show route-map går att ändra. Detta är best practice.

ip bgp-community new-format

Verify

show ip bgp community ?

Så står det antingen aa:nn eller 1-4294967295 beroende på format

För att Community ska funka måste det skickas i uppdateringarna, standard och extended

neighbor [ip-address] send-community both

Skicka community

route-map SETCOMMUNITY permit 10
 match ip address prefix-list COMMUNITY
 set community 5

Alternativt flera med eller utan additive beroende på om att lägga till community istället för att ersätta är önskvärt.

 set community 5 10 15
 set community 5 10 15 additive

Man kan även ta bort community.

 set community none

Delete anything starting with 300

ip community-list expanded REGEXP permit 300:[0-9]+_
route-map DELETE permit 10
 set comm-list REGEXP delete

Ta emot community

ip community-list 6 permit 5
route-map CHANGEPREF permit 10
 match community 6
 set local-preference 250

Vill man matcha med regex måste man använda en extended community list.

ip community-list 101 permit <regex>

Show

show ip bgp community

Några kända communities, set community ?

  • Internet
  • no-export: Annonsera inte utanför eget AS
  • no-advertise: Annonsera inte till någon
  • local-as: Annonsera inte utanför eget confederation sub-AS
show ip bgp community no-advertise no-export local-AS

AS Manipulation

Do not prepend local-as to updates from ebgp peers and replace real AS with local AS in the EBGP updates

neighbor 1.1.1.1 local-as 601 no-prepend replace-as

Kan användas för att dölja ASN, Override matching AS-number while sending update

neighbor 1.1.1.1 as-overide

Accept as-path with own AS present in it

neighbor 1.1.1.1 allowas-in

Remove private AS number from outbound updates

neighbor 1.1.1.1 remove-private-as [all]

Attribute-map
Attribute map kan användas för att manipulera AS och/eller attributes från AS-sets.

Filtering

BGP kan filtrera AS, NLRI och PA i alla inkommande och utgående uppdateringar antingen per granne eller per peer group. För att en filterändring ska gå igenom krävs clear-kommandot.

AS

Regular Expressions

  • .* = Any
  • ^$ = Local AS
  • _200$ = Originated in AS 200
  • _200_ = Transited AS 200
  • ^200_ = Learned from 200
  • [0-9]+ = Any AS

AS-path ACL

ip as-path access-list 100 deny _120$
ip as-path access-list 100 permit .*
neighbor 1.1.1.1 filter-list 100 in

Maximum number of ASes in the AS-PATH attribute

bgp maxas-limit <1-254>

Network

Distribute-list, standard ACL

access-list 1 permit 10.10.10.0 0.0.0.255 
neighbor 1.1.1.1 distribute-list 1 in

Extended ACL tolkas av BGP som:

access-list 100 permit ip <subnet> <wildcard for subnet> <mask> <wildcard for mask>
neighbor 1.1.1.1 distribute-list 100 in

Prefix-list, det rekommenderade sättet.

ip prefix-list ACCEPT seq 10 permit 10.10.10.0/24 le 24
neighbor 1.1.1.1 prefix-list ACCEPT in

Verify

show ip bgp prefix-list ACCEPT
show ip bgp neighbors 1.1.1.1 received prefix-filter

Outbound route filtering

neighbor 1.1.1.1 capability orf prefix-list both
show ip bgp neighbors 1.1.1.1 | s Outbound

RT

Filtrera inkommande routes genom att vitlista specifikt route-target

ip extcommunity-list standard FILTER-AS400-VPNV4-IN permit rt 1337:10
route-map FILTER-AS400-VPNV4-IN permit 10
 match extcommunity FILTER-AS400-VPNV4-IN
address-family vpnv4
 neighbor 172.16.99.2 route-map FILTER-AS400-IN in

Verify

show ip extcommunity-list
show bgp vpnv4 unicast all extcommunity-list FILTER-AS400-VPNV4-IN

Convergence

BGP är inte designat för att vara det snabbaste protokollet, detta för att kunna fungera i stor skala men det finns flera tekniker för att sänka konvergeringstid (recovery). Även om routes tas bort från routingtabellen snabbt så väntar BGP-processen på att TCP-sessionen ska timea ut eller hold-down ska gå ut innan konvergeringsprocessen börjar. Hold-down timer är default 3 minuter. Det är också så att BGP inte skickar uppdateringar direkt till grannar utan det sker periodvis baserat på peering-typ, 5 sekunder för iBGP-grannar och 30 sekunder för eBGP. BGP verifierar next-hop reachability med hjälp av IGP, detta görs var 60:e sekund. Allt detta leder till att BGP kan ta väldigt lång tid på sig att konvergera.

Next Hop Tracking
NHT is an on-by-default feature that notifies BGP to a change in routing for BGP prefix next-hops. This is important because previously this only happened as part of the BGP Scanner process, which runs every 60 seconds by default. The bgp nexthop trigger delay defines how long for the NHT process to delay updating BGP. This timer is here to prevent BGP from being beaten up by a flapping IGP route. At 5 seconds, the BGP process can't get bogged down from unnecessary updates.

bgp nexthop trigger enable
bgp nexthop trigger delay 10

Scan interval
Hur ofta IGP ska scannas efter uppdateringar, default är 60 sekunder.

router bgp 100
 bgp scan-time <5-60>
 address-family vpnv4 unicast
  bgp scan-time import <5-60>

eBGP neighbor loss detection
BGP-grannskap rivs direkt när länken mellan går ner vilket leder till att BGP-routsen flushas direkt och det sökes efter alternativ. Detta är default i IOS sedan länge.

bgp fast-external-fallover  #Global
ip bgp fast-external-fallover  #Per interface

iBGP neighbor loss detection
Så fort en grannens IP-address försvinner från routingtabellen (tack vare IGP) så tas grannskapet ner och konvergering kan börja direkt. Ingen hold-down eller delay i deaktivering av BGP-session används. Är IGPn det minsta långsam på att hitta en alternativ route till grannen så hinner grannskapet tas ner. Det går även att använda detta för eBGP t.ex. om man peerar med loopbacks och det fungerar på samma sätt.

neighbor 1.1.1.1 fall-over

PIC
Prefix Independent Convergence är en CEF/FIB-feature framtagen för att snabba upp data-plane recovery när man har FIB med väldigt många routes och next-hop blir unreachable men det finns en annan gångbar next-hop. Traditionellt byggdes FIB med Prefix -> Interface/Next-Hop. Ändras next-hop måste FIBen uppdateras för varenda prefix. Detta kan ta lång tid ifall det finns många. Med PIC lägger man in en pointer emellan, Prefix -> Pointer -> Interface/Next-Hop. Ändras next-hop behöver endast en pointer pekas om, alla prefix kan fortfarande peka mot samma pointer.

Core

cef table output-chain build favor convergence-speed
cef table output-chain build favor memory-utilization  #Stänga av PIC

Edge

bgp additional-path install
bgp advertise-best-external

BFD

Se även Cisco BFD.

neighbor 1.1.1.1 fall-over bfd
show bfd neighbor

The C-Bit is set by the BFD process itself, and isn't something you can toggle. However, you can tell your BFD process whether to ignore the setting or not. The default is to ignore.

neighbor 2.2.2.2 fall-over bfd check-control-plane-failure

Dampening

Förutom att använda route aggregation för att minska risken att CPU går i taket på alla enheter när något flappar kan dampening användas.

route-map DAMPENING permit 10
 set dampening 5 1900 2000 10

5=half-life, 1900=reuse-limit, 2000=suppress-limit, 10 max-suppress-limit

router bgp 100
 bgp dampening route-map DAMPENING

Route flap

show ip bgp flap-statistics
show ip bgp dampening parameters

Conditional Route Injection

The ability to insert more specific prefixes into BGP without having them in the IP routing table.

Routemap which specifies prefixes to inject and routemap which specifies exist condition (Det går även köra med non-exist om man vill vända på det)

ip prefix-list INJECT-THIS permit 110.0.1.0/24
ip prefix-list INJECT-THIS permit 110.0.2.0/24
ip prefix-list ROUTE permit 110.0.0.0/8
ip prefix-list NEXT-HOP permit 1.1.1.1/32
route-map INJECT
 set ip address prefix-list INJECT-THIS
route-map EXIST
 match ip address prefix-list ROUTE
 match ip route-source prefix-list NEXT-HOP
router bgp 100
 bgp inject-map INJECT exist-map EXIST

The less-specific prefix MUST come from a BGP neighbor. No insertion of more-specific prefixes of a locally-originated prefix.

Verify

show ip bgp injected-paths
show ip bgp neighbors 1.1.1.1 | i status

BMP

The BGP Monitoring Protocol (BMP) feature supports the following functionality to monitor Border Gateway Protocol (BGP) neighbors

router bgp 65000
neighbor 30.1.1.1 bmp-activate server 1
bmp server 1
 activate

Show

show ip bgp bmp server 1
show ip bgp bmp server summary

Resource Public Key Infrastructure

RPKI is used to secure the Border Gateway Protocol (BGP)

router bgp 100
 bgp rpki server tcp 10.0.10.10 port 1333 refresh 600
show ip bgp rpki servers
show ip bgp rpki table
clear ip bgp rpki server