Cisco BGP

From HackerNet
Jump to: navigation, search

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 står för 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 valid.

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.

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.

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

Om ett grannskap är iBGP eller eBGP (ttl 1) 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]

eBGP om det ej är directly connected, t.ex. loopback

neighbor 1.1.1.1 ebgp-multihop 2

Verify

show ip bgp neighbor
show ip bgp summary
show tcp brief

Authentication

md5 authentication görs med tcp option 19

neighbor 1.1.1.1 password CISCO

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

Passive Peer

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

bgp neighbor transport connection-mode active/passive

Dynamic Peering

router bgp 100
 bgp listen limit
 bgp listen range 10.0.0.0/24 peer-group GROUP
 neighbor GROUP ebgp-multihop TTL
 neighbor GROUP remote-as 102 alternative-as 105
show ip bgp peer-group GROUP
debug ip bgp range

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 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

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

bgp soft-reconfig-backup

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]

Path Selection

Till skillnad från IGPer används inte 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.

Well Known
Mandatory attributes

  • AS Path
  • Next Hop
  • Origin

Descretionary attributes

  • Local Preference
  • Atomic Aggregate

Optional
Transitive attributes

  • Aggregator
  • Community

Non transitive attributes

  • MED (Multi Exit Discriminator)
  • Originator
  • Cluster ID
Attribute Description Preferens
Weight Administrativ Högsta
Local Preference 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 Lägsta
eBGP Peering Favor more stable routes Äldsta
Router ID Sista tie breaker Lägsta

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.

router bgp 100
 maximum-paths ibgp 4

eBGP multipath

router bgp 100
 bgp bestpath as-path multipath-relax
 maximum-paths eibgp 2

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
  • BGP updates:
  • Redistribution:

Verify BGP table

show ip bgp

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.

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.

Diverse

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

bgp upgrade-cli 

Router ID

router-id [loopback-adress]
(bgp router-id vrf auto-assign)

Nätverk som ska annonseras

network [ip-address] mask [subnet-mask]
show ip bgp 10.10.10.0/24

Synchronization is enabled by default in Cisco IOS Software Release prior to 12.2(8)T.

no synchronization

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

show ip bgp 13.3.7.0 | b Origin

AS

bgp asnotation dot

Timers

tim bg 10 30 20

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

Om något händer med en befintlig nexthop, meddela BGP-processen.

bgp nexthop trigger enable

När ska nästa scan köras

bgp nexthop trigger delay 10

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

aggregate-address, null route automatically installed

aggregate-address 10.0.0.0 255.0.0.0 [summary-only]

summary-only, suppress detailed routes

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

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. 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.

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

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

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. 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 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 konfa med bgp confederation peers

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.

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
#ip bgp new-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

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

  • 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-export

Filtering

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

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

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

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

MED

Multi-exit discriminator. Jämförs bara om flera olika paths kommer från samma AS, ändras med bgp always-compare-med.

ip access-list standard MED
 permit 1.1.1.0 0.0.0.255
route-map MED_50 permit 10
 match ip address MED
 set metric 50

Best path

bgp always-compare-med
bgp bestpath as-path ignore
bgp bestpath med missing-worst
bgp bestpath med confed

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

Conditional Route Injection

show ip bgp injected-paths

AS-path manipulation

Se alla routes från ett visst AS.

show ip bgp regex 65000$

Route Manipulation

Outbound:

  • Weight
  • Local preference
  • Communities

Inbound:

  • AS-prepend
  • MED

Convergence

BGP är inte designat för att vara det snabbaste protkollet, 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
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

BFD

neighbor 1.1.1.1 fall-over bfd
show bfd neighbor

Dampening

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

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

router bgp [ASN]
bgp dampening route-map selective_dampening

Route flap

show ip bgp flap-statistics
show ip bgp dampening parameters

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

Show

show ip bgp summary
show bgp ipv4 unicast 
show ip bgp paths
show ip bgp rib-failure

Routes som skickas

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

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