BGP
KONFIGURACE BGP // ALEF 23/9/2024
"tady máme příklad tý síťky"
"to je takovej turbolab na pár minut"
pozn.:
NDA u ISP (?)
BFD protocol - rychlá reakce na failiures v síti
DMVPN - cisco
útoky na BGP
ctrl + V + ? - vložení otazníku do cisco cli, jinak se spouští nápověda
BGP
- interdomain routing, mezi doménami (autonomními systémy - jeden AS = skupina routerů s jednotnou správou); v současné době je v internetu kolem 50 tisíc AS
- uvnitř AS běží interní směrovací protokol (menší OSPF, větší IS-IS) // IS-IS je stabilnější, použitelný ve větších sítích (ISP)
- BGP tabulka internetu má v současné době kolem 1mil IPv4 routes a 200-300k IPv6 routes
- BGP - advanced path vector směrovací protokol (rozšířený distance vector protocol)
- spolehlivé updaty v síti - díky komunikaci přes TCP (port 179) (nemusím celou routovací tabulku posílat pravidelně); jen na začátku naváže se sousedem TCP session a pošle směrovací tabulku
- posílám pouze změny, ne celou tabulku (triggered updates only), ne periodické
- pro ověření jestli soused žije se posílají "keepalives" které udržují TCP session (každou minutu); po třech neúspěšných je peer prohlášen za "down" (dá se změnit)
- při živé síti - IBGP akumuluje informace o změnách a neposílá je rychleji než jednou za 5s, u EBGP nikdy ne dřív než za 30s
- bohatá metrika - mnoho nastavitelných parametrů (u interních protokolů většinou cena cesty, nebo pár parametrů ze kterých se vypočítá jedno číslo, zpravidla čím menší tím lepší)
- scenarios:
- single homed - jednodušší použít statický routing, případně BGP (použijeme privátní číslo AS, privátní IP adresy)
- multihomed - veřejné číslo AS, veřejné IP adresy
- tranzitní AS - přes něj komunikují jiné AS mezi sebou, musí umět přeposílat a vyměňovat updates
- negativa - udržování TCP sessions jsou náročné na CPU a výpočetní výkon, zároveň pomalá konvergence sítě
- nemůžu tolik ovlivnit
ATRIBUTY
- 2 skupiny
- well known- musí rozpoznat každá implementace BGP protokolu
- optional- různé implementace BGP protokolu jim navzájem nemusí rozumět; toto ale umožňuje například jiným výrobcům rozšiřovat a přidávat různé atributy;
- pokud router atributu nerozumí, buďto ho zahodí nebo pošle dál
- WELL KNOWN
- dvě skupiny - mandatory- vždy tam musí být
- discretionary- nutně nemusí být
- mandatory:
- ORIGIN - řiká jak se route dostala do BGP
- i - originated in an IGP//
- e - originated in EGP// redistribuuji routy z jiného externího směrovacího protokolu (např z EGP (předchůdce BGP), v současné době se ale používá pouze BGP)
- ? - redistribuovaná do BGP// redistribuuji routy z jiného interního směrovacího protokolu do BGP (z IS-IS, OSPF), rozdíl oproti "i" - v případě že dostanu 2 routy, router preferuje dle pořadí "i","e","?"
- AS-PATH - sekvence čísel AS, kterými routa prošla; umožňuje trasování, kontrola smyčky - každý router provádí check jestli v AS-Path už není jeho číslo AS
- NEXT-HOP - IP adresa next-hop routeru // IP adresa je tu namísto interfaců - BGP nemá asociován odchozí interface; router propaguje dalšímu routeru svojí adresu, aby věděl kudy pak směrovat
- discretionary:
- Local preference - používá se pro nastavení směrovací politiky uvnitř námi ovládaného AS, pokud chceme aby směrovací politika byla konzistentní napříč routery; na jednom routeru uvnitř mého AS nastavím hodnotu local-preference a tím ovlivním, kudy budou ostatní routery routovat (nemusím to pak nastavovat na všech jednotlivě)
- Atomic aggregate - říká že routa byla agregovaná (route summary) // např když máme 10 routes, každá má svoje parametry, všechny sumarizujeme do jedné a nastavíme jednotný atribut - atomic aggregate říká že toto se stalo
// if the router has routes 192.168.1.0/24 and 192.168.2.0/24, auto-summary will summarize and advertise the classful network 192.168.0.0/16 - nezahlcuju tolik tabulky propagováním horzně moc podsítí, shrnu to pod jednu síť jakoby
- OPTIONAL
- transitive - i když mu router sám nerozumí, posílá ho dál (přidává partial bit, který dalšímu routeru značí, že jsem mu nerozuměl)
- Aggregator - specifikuje IP adresu a číslo AS routeru, který provedl route agregaci
- Community - číslo (může být i více čísel), používá se pro route tagging (např.: tuto routu číslo X mám zakázat, routě číslo Z mám přiřadit nějaký atribut)
- nontransitive - pokud atributu router nerozumí, zahodí ho
- MED (multiexit discriminator) - metrika interního směrovacího protokolu; pomáhá určit preferovanou cestu do AS pro návratový traffic (čím nižší číslo, tím lepší cesta); tímto dokážu ovlivnit sousední AS, ale není to úplně zaručené
AS-PATH
- když vytvoříme lokální cestu, AS-Path je prázdný
- při cestě do jiného AS přes BGP vkládáme do atributu svoje číslo AS; další AS přidává svoje číslo atd, vzniká v podstatě vektor složený z čísel AS - (4 21 78 652 7) - první byl 7, poslední byl 4
- při rozhodování v routingu se router často dívá na délku této posloupnosti // pozn.: s tím že je v současné době aktivních okolo 50 tisíc AS, průměrná délka AS-Path je kolem 4-5
- atribut AS-Path slouží zároveň jako prevence smyčky - po obdržení BGP update se router podívá a kontroluje, zda v v AS-Path už není jeho číslo AS, pokud tam je tak routu zahazuje;
- maximální délka může být až 256 AS // pozn.: v minulosti jeden český ISP přesáhl max délku a shodil tím velkou část internetu - nyní ošetřeno
NEXT-HOP
- BGP nemá odchozí interface, tento atribut obsahuje next-hop IP adresu
- nejčastěji je to nastaveno na IP adresu odchozího interface routeru, který paket posílá - router kterému data přijdou pak ví kam má pakety forwardovat, ví kdo a odkud mu něco poslal
- na sdíleném médiu - pokud jsou routery na sdíleném médiu, IP adresa next-hop zůstává stejná aby pak zpětný provoz neběhal po síti dvakrát, pozor na toto v DMVPN
BGP Neighbour discovery
- sousedské vztahy musím navázat manuálně na obou stranách (u externího routing protokolu je to žádoucí)
- sousedé se pak pokusí spojit na portu 179 (TCP session)
- BGP open message obsahuje - BGP verze (současně v4), číslo AS lokálního routeru, hold time, BGP router ID, optional parametry
- síť konverguje, vymění se BGP tabulky; pro zrychlení konvergence můžu snížit hold time
- následně se používají BGP keepalives pro držení sousedských vztahů (každých 60s, lze změnit)
- zabezpečení BGP komunikace - MD5 TCP hashování, s tím že se hashuje každá TCP segment který se posílá, routery mají sdílený secret (oba dva routery musí být nakonfigurovány se stejným heslem)
ROUTE SELECTION CRITERIA
- router propaguje jen cestu vybranou jako best
- výběr best (route selection process) - seřazeno v odrážkách postupně jako posloupnost:
- nejdřív se router dívá jestli je platný next hop, pokud není dosažitelný, routa je ignorována; pokud je cesta validní, je označena "*" (# show ip bgp)
- preferuj vyšší váhu (weight)
- preferuj vyšší lokální preferenci (local preference - atribut který (pokud je vyšší než defaultní 100) stáhne provoz z vnitřní sítě na sebe a pak egress)
- preferuj routu kterou sám originuje (next hop by byl 0.0.0.0 pokud je lokálně)
- preferuj kratší AS-Path (porovnává se délka, kolik čísel AS je v tomto atributu)
- preferuj nižší origin code (IGP (i) > EGP (e) > incomplete (?))
- preferuj nižší MED (multiexit discriminator)
- preferuj externí BGP cesty před interními BGP cestami
- pokud jsou to interní BGP cesty, rozhoduje bližší BGP peer přes interní metriku
- pokud jsou to externí BGP cesty, preferuj starší cestu (více stabilní)
- preferuj cesty s nižším BGP router ID
- preferuj routy pocházející od souseda s nižší IP adresou
- na základě tohoto můžeme manipulovat s cestami (např.: změna váhy, lokální preference, změna MED, ... )
- po výběru best routy se tato route zapíše do směrovací tabulky (# show ip route); je tam pouze next-hop adresa a administrativní vzdálenost, ne interface
- čili - next hop > weight > nejnižší local preference > self-originate route > kratší AS-Path > nižší origin code (i,e,?) > nižší MED > lepší EBGP cesty než IBGP > nižší router BGP ID > nižší IP addr
ADVERTISING LOCAL NETWORKS
- BGP router si udržuje list lokálních sítí (definováno příkazem # network nebo redistribucí)
- BGP pravidelně skenuje routovací tabulku, když dojde k pádu interface zaznamená změnu, vygeneruje update a pošle ho sousedovi;
- v případě že se interface nahodí BGP zjistí že je síť nahoře, vygeneruje update a pošle ho sousedovi i s atributy
- pozor na automatickou sumarizaci cest - pokud mám např.: cesty do sítí 10.0.0.0/28, 10.0.0.4/28, 10.0.0.68/28, router propaguje 10.0.0.0
- lokálně originované routy mají v tomto případě váhu 32768 (dá se změnit, je to tak udělané aby váha přebila ostatní atributy protože sítě jsou přes něj nejlépe dostupné)
TTL SECURITY CHECK
- bezpečnostní vlastnost
- externí BGP je napřímo připojený v sítích mezi routery a má TTL 254, interní BGP nemusí být napřímo a má TTL 255, dostane se dál (??)
- říká, kolik hopů daleko může být BGP neighbour; kontroluje i TTL se kterým paket přijde, útočník typicky neútočí na přímo připojené síti ale z dálky
- security check se podívá na TTL příchozího paketu a podle toho akceptuje/zahazuje
MULTIHOMED CUSTOMER PROBLEM
- zákazník má 2 ISP, primární a sekundární
- pokud primární sumarizuje routu k zákazníkovi, může nastat problém - v internetu se směruje podle více specifického záznamu (delšího prefixu)
- toto řešíme tím že k auto summary posíláme i záznam o podsíti (?? nějak to jde udělat, to jsem moc nepochopil)
STARTUP PROBLEMS
- BGP neighbor není aktivní // # show ip bgp neighbours - zobrazí stav; soused pravděpodobně není přímo připojený
- BGP session se nesestaví // # debug ip tcp transactions - neighbour not reachable, zobrazí třeba že na TCP SYN paket není zareagováno SYN ACK paketem
// soused nemusí být nakonfigurován, na SYN odpovídá RST - zkontrolovat správnou konfiguraci obou
- BGP session kmitá mezi idle/active // # debug ip tcp transactions; může být např AS number mismatch (peer in wrong AS)
TRANSIT AS TASKS
- má za úkol propagovat a forwardovat data mezi různými AS (v tranzitním AS nevzniká žádný provoz)
- pokud přenáším z jednoho konce na druhý konec v AS, nemůžu použít na redistribuci BGP interní směrovací porokol - došlo by ke ztrátě atributů
- používám IBGP - přenese atributy, zachová AS-path; IBGP musí být v tranzitním AS spuštěné na všech routrech které se podílejí na forwardování; musím mít full mesh pro funkci IBGP (jen logicky, ne fyzicky)
- interakce IBGP a EBGP
- při vstupu do AS s IBGP se zaznamená jen číslo AS ze kterého to přišlo; IBGP nemodifikuje AS-path, až při výstupu z tranitního AS toto číslo přidává
- v rámci IBGP se v defaultu nemění atributy (zásahem administrátora to lze udělat)
- multipath load sharing - defaultně je load balancing vypnutý, ale lze zapnout
- když mám třeba více cest se stejnou metrikou, můžu je použít (ale musí mít stejnou váhu, local pref, AS-path, origin, MED, interní metriku IGP, rozdílná next-hop adresa)
- split horizon - obecně je split horizon to, že pokud dostanu cestu od souseda, tomu sousedovi neposílám tuto cestu zpět
- u BGP - routu kterou dostanu přes IBGP nepošlu zpátky přes IBGP (prevence smyčky uvnitř jednoho AS)
- pro správnou funkci musím mít full mesh (logickou TPC spojení, ne fyzickou)
- na routerech vytvářím loopbacky a na ně navazuji logický full mesh sousedských vztahů; loopbacky jsou vždy up a interní směrovací protokol se stará o směrování loopbacků uvnitř mojí sítě
- next hop processing - ne odchozích rozhraních je dobré nastavit passive - jen distribuuje a nic nepřijímá
- na routrech IGP - next-hop-self; essential in iBGP, in scenarios where internal routers cannot directly reach the next hop learned from an external BGP neighbor
- každá cesta mezi routery a jeho rozhraními má svojí IP adresu
- pod IBGP musí vždy ještě běžet nějaký interní směrovací protokol
EBGP x IBGP - shrnutí
- přes IBGP se nemění žádné atributy
- IBGP je split horizon, routy naučené přes IBGP souseda nejsou propagovány ostatním IBGP peerům
- local preference je propagována jen přes IBGP
- EBGP peers jsou directly connected, IBGP jsou většinou vzdálené
- route selection preferuje EBGP cesty
- nevýhody - tím že musíme udělat full mesh v IBGP, vzniká velké množství TCP relací (u větších providerů)
- duplikovaný provoz routingu
- řešení - route reflectory - mění pravidlo split horizon, route reflector je schopný poslat IBGP routu přes IBGP sousedovi
- nastavíme pár routerů jako route reflectory které vytvoří "cluster" (identifikovaný pomocí cluster ID), ostatní se na ně navážou
- route reflector client (ostatní routery) mají TCP spojení jen k těmto routerům, route reflectory přeposílají updaty všem - daleko menší provoz
- 2 nové atributy - originator ID (odkud update přichází směrem do clusteru), cluster ID (ID clusteru route reflectorů)
// důležité rozlišovat control plane a data plane, vlastní forwarding dat může pak probíhat úplně jinudy, proto route reflectory můžou být ne tak výkonné routery
// tyto routery můžou třeba jen routovat a ne forwardovat
- konfederace
- router pozná zda se jedná o IBGP/EBGP v konfiguraci, pokud má stejný AS jako jeho soused je jasné že se jedná o IBGP
FORWARDING PACKETS IN A TRANSIT AS
- všechny routery musí znát všechny externí cesty, musíme použít IBGP // # show ip route <IP> - vypíše "known via bgp", napíše i next hop ale ne interface
// # show ip route <next-hop IP> - vypíše přes jaký protokol zná tuto adresu (třeba OSPF), vypíše už i interface
- router se nejprve podívá do BGP tabulky na next hop, pak se podívá přes který interface je tato adresa dostupná, pak se podívá do ARP cache
- odchozí interface není nikdy asociován s BGP tabulkou, z tohoto důvodu musí pod IBGP běžet ještě interní směrovací protokol (IS-IS, OSPF, ...)
- BGP se stará o přenos externích cest, IGP se stará o routování uvnitř sítě
- CEF (cisco express forwarding) - předpočítává na základě routovací tabulky switchovací cache, lookup se dělá už dřív než přijde paket
INTERAKCE BGP A IGP
- ideálně žádná, jediný link by měl být přes rekurzivní lookup
- IBGP přenáší externí routy, v případě výpadku interní cesty by neměl být problém a IBGP se to nedotkne
- v případě výpadnu externí routy se to IGP nedotkne
- lze propagovat nějakou interní síť do BGP (máme třeba nějakou DMZ kde máme server se službou, chci propagovat pouze toto)
- běžně musíme zajistit aby naše interní routy nebyly propagovány do BGP
- default EBGP administrative distance 20, default IGP administrative distance 90-170, default IBGP administrative distance 200
- pokud dojde k naučení IBGP routes přes EBGP, dojde k jejich preferenci - špatný network design/útok; je dobré na vstupu zabezpečit access listem, route mapou etc.
COMMON IBGP PROBLEMS
- session nechce nastartovat, nemáme established stav potřebný k vyměňování route
- IBGP session běží mezi loopbacky, ale není nakonfigurován update-source (jako souseda použijeme jeho loopback adresu, zapomeneme dát update-source)
- # debug ip tcp transactions - podíváme se na IP adresy, musí být shodné loopbacky a ne loopback a IP rozhraní
- loopback interface není dostupný, typicky se to stane protože loopback není propagován do routovací tabulky
- loopback musí být v interním směrovacím protokolu - musíme se umět pingnout mezi loopbacky
- packet filtery brání navázání BGP sessiony
- je potřeba zkontrolovat jestli po cestě není nějaký access list, firewall atd
- # debug ip tcp transactions; # debug ip icmp - zobrazíme jestli TCP SYN pakety nejsou zahazovány
- IBGP routy jsou v BGP tabulce, ale nejsou vybrány jako best routy
- BGP next hop není dostupný
- # show ip bgp <prefix> - zkusíme najít next-hop
- # show ip route - zkontrolujeme next-hop
- typicky spojovačky nejsou zahrnuté v rámci IGP; většinou problém spíše v IGP
- IBGP routy jsou vybrány, ale nejsou vložené do routovací tabulky
- BGP synchronizace není vypnutá
- je potřeba ji vypnout, vymazat BGP sessions a znovu se podívat na routovací tabulku (a BGP tabulku)
// synchronizace - legacy problém, od verze IOS je defaultně vypnutá; dříve se dělala redistribuce externích cest do IGP (když byl internet malý), synchronizace řešila předávání informací mezi IGP a IBGP
MULTIHOMED BGP
- náročnější zákazníci co potřebují pořád poskytovat služby a mít dobře ošetřenou redundancy
- dualhomed připojení - ke dvěma různým ISP
- potřeba dvojité linky ke každému ISP, na straně každého ISP také ošetřena redundance
- je potřeba veřejné číslo AS
- je nutné nemít provider-dependent adresy (mít veřejné)
- implementace routing policies
- jeden ISP je primární, druhý backup
// na routeru nastavím lepší váhu cesty naprimárního; pokud máme více egress routerů použijeme local-preference
- load balancing - když třeba do mezinárodních sítí cheme přes jednoho ISP, do ostatních přes druhého atd
// ovlivňujeme pomocí AS-Path - chci se do sítí záložního ISP (co má AS třeba 10) dostávat přímo přes něj - routuji podle AS-Path (??)
- je nutnost ovlivňovat výběr cesty
- nastává problém abych se já sám nestal tranzitním AS - musím si dát pozor abych nepropagoval routy ISP1 do ISP2 a naopak
- dá se udělat tak, že posílám pouze lokálně originované routy (posílám jen ty, které mají prázdné AS-path); toto by mělo být ošetřeno i na straně ISP
BGP FILTERS
- inbound
- route map
- filter list, AS-path access list, or IP policy
- IP prefix list
- distribute list
- outbound - stejné ale opačné pořadí
AS PATH FILTERS
- BGP se nejčastěji používá se spojení s nějakou routovací politikou;
- AS Path access-listy používají regulární výrazy // # ip as-path access-list <number> permit <string>
- AS-path je konvergovaná do stringu (ne čísla); pokud se můj substring (třeba 31) shoduje s čímkoliv ve stringu (2 7 31 59 317), aplikuje se pravidlo
- v regulárních výrazech se zde dá použít i or (4|8); [1234] nebo [1-4]; [1-2].[7-8] - tečka je zde jako "cokoliv"; ^ - matches beginning of string; $ - matches end of string; _ - matches any delimiter
- match na konkrétní AS tedy udělám regulárním výrazem "_31_"; match posloupnosti - ("213|218")_31 to bude (213 nebo 218) a 31
- konfederace bude v AS path označena zárovkami ^\(213_
- repeating operators * - zero or more atoms; ? - zero or one atom; + - one or more atoms
- _100_ - někde v AS-Path je 100
- ^100$ - directly connected to AS 100
- _100$ - originated in AS 100
- ^100_. - networks behind AS 100;
- ^[0-9]+$ - AS paths one AS long
- ([0-9]+)(\1)*$ - prepending perforemd in the eighboring originating AS
- ^$ - networks that originate in the local AS (říká že AS path je prázdná)
- .* - matches everything
PREFIX LISTS VS IP ACCESS LISTS
- tradiční prefix filtery byly implementovány s IP access listy konfigurovány přes příkaz distribute-list
- IP access listy používané jako route filtry mají mnoho nevýhod
- lepší je používat prefix listy - podobně jako access listy mají řádky které jdou přidávat/odebírat
- slouží jako match a následuje akce (permit/deny)
- # ip prefix-list <name> {permit|deny} <network/len> [ge valute] [le value]
- prefix listy mají jména a sequence numbers
- ge - great or equal; le - less or equal; bez těchto parametrů musí být exact match;
// kdybych měl # ip prefix-list MyList permit 192.168.0.0/16 le 20, matchne mi to i sítě s maskami do /20
- často se používají "zástupné prefix listy" na specifikování obecných pravidel;
- ip prefix list D permit 0.0.0.0/0// defaultní cesta
- ip prefix list A permit 0.0.0.0/0 ge 32//
- ip prefix list C permit 0.0.0.0/0 le 32// je jedno co tam je a jak je to dlouhé, v podstatě všechno
- ip prefix list B permit 128.0.0.0/2 ge 17// nějaký subnet z Bčkové třídy
- order of operation - nejprve filter-list a potom prefix-list na vstupu, opačně na výstupu (vrstvy jako cibule); tolik na tom nezáleží (filtry dělají logický AND)
ROUTE MAPS
- komplexní access listy
- access listy mají záznamy, route mapy mají statementy
- access listy používají adresy a masky, route mapy přiřazují podmínky
- každá route mapa má jméno a sequence number, podle kterého postupně jsou routemapy aplikovány
# route-map <name> {permit|deny} [sequence]
match <condition>
match <condition>
set <parameter>
- defaultní stav je permit, routa která nebude matchnutá žádným statementem bude dropnnutá
- "permit all" uděláme tak že specifikujeme "permit" bez "match" pdomínky
- podmínky jsou spojeny logickým AND
- matchovat můžu - síť, toho kdo mi to poslal, next-hop adresu, BGP origin, tag, AS-path, komunitu, IGP route type
- použití v BGP je jedno z mnoha use cases route map, v IOSu lze použít na dalších spoustu věcí
- byly přidány i policy listy, kde si můžu udělat seznam podmínek a pak ho použít, abych to nemusel pořád psát dokola
- # continue [seq_number] - tímto můžu po konci routemapy určit kterou routemapou budu pokračovat
INFLUENCING ROUTE SELECTION
- měníme parametry, třeba weight (missnul jsem lab kvůli hádání se s Editou takže netuším vůbec nic)
- local preference
- pozn.: při konfiguraci local preference s route mapami dávat pozor že to funguje jako prefix listy (?), na konci je deny all když nedojde k matchnutí, musíme tam dát permit
- AS path prepending - rozšířím AS path o několik stejných čísel (mého AS), tím bude cesta delší a bude preferována jiná; kdybych tam dal AS protějšího routeru tak loop prevention zabrání jakýkoliv provoz
- jelikož v historii jeden ISP shodil půlku internetu tím, že nastavil AS path větší než 256 čísel a to shodilo spoustu routerů, je toto už ošetřeno a nedoporučuje se víc než 15-20
- obvykle stačí přidat třeba 3, pak se vždycky podívám jestli ještě teče nějaký traffic a podle toho postupuji dál
- MED (multiexit discriminator) - čím méně diskriminujeme, tím spíše se linka pro návratový provoz použije; by default se na cesty které přijdou z ostatních AS ignoruje
- defaultně je 0; pokud mám dvě linky tak je dobré nastavit hodnoty na obou; čím větší číslo tím více cestu diskriminujeme
- MED se šíří jen do sousedního AS, nikdy ne až dál - určuje kudy do našeho AS půjde provoz
- můžu ho nastavit napřímo, lepší je použít route-mapu
BGP COMMUNITIES
- optional transitive atribut, když mu router nerozumí tak to označí a pošle dál
- je to v podstatě "nálepka", kterou si k routě přidám (v MPLS L3 VPN se toto používá hodně)
- 3 typy - 32 bit (standardní), 64 bit (extended), 12 byte (large); důsledek toho že začaly docházet IPv4 adresy ale i čísla AS
- můžeme použít jakékoliv číslo (32bit), některá čísla jsou vyhrazena pro specifické komunity a už něco znamenají
- no-advertise- když dostanu routu co má tuto komunitu, neposílám jí dál
- no-export- když dostanu routu co má tuto komunitu, neřeknu ji reálnému sousedovi
- local-as- když mám jen jedno AS tak to neřeknu těm ostatním
- internet- této komunitě vyhoví každá routa
- v kódu BGP jsou tyto komunity určené a všichni jim rozumí (kdyby se náhodou našel někdo kdo tomu nerozumí, stejně posílá dál protože je tento atribut transitive)
BGP KONVERGENCE
- čas konvergence roste s rostoucí tabulkou
- internet v současné době obsahuje více než 300k prefixů
- konvergence sítě má rozsah 10 min - 1h
- BGP procesy:
- BGP open - dělá peer establishment
- BGP I/O- zabezpečuje queuing a processing BGP paketů (updaty a keepalive)
- BGP scanner- prochází BGP tabulku a potvrzuje dosažitelnost next-hopů; agregace se dělá na základě scanneru
- BGP router- vypočítává best path, obsluhuje route changes a peery
// router a scanner procesy zodpovídají za hodně kalkulací a mohou být příčinou vysokého vytížení CPU
// kdybych vyčítal vytížení CPU, díky BGP scanneru může být každou minutu CPU spike až na 100%
- pro lepší konvergenci:
- queue to TCP peers - # hold-queue <length> in// default je 75 packetů; best practice je nastavit třeba na 1000; tím předejdu dropu TCP ACK paketů
- BGP peer groups
- povolit path MTU - automaticky zvolí největší možné MTU kdy ještě nedochází k fragmentaci paketů
- BFD - sníží konvergenci tím, že velmi rychle odhalí selhání peera; musíme nakonfigurovat BFD session a "přivázat ho" k BGP
- BGP PIC - sníží konvergenci tím že drží metadata ve FIB a RIB (?)
- BGP route dampening - na základě "flapování" (chování) cesty jí do budoucna můžu nějak ovlivňovat - snížím množství updates v budoucnu
- pokud cesta v předchozím časovém intervalu často padala, přidávám jí tím nějaké body a když je přesáhne tak ji třeba na nějakou dobu úplně zakážu - tím zmenším počet updates
############################################################################################################################################################################################################
########################################################################################## PŘÍKAZY #########################################################################################################
############################################################################################################################################################################################################
MONITORING
# show ip bgp summary // vypíše stav BGP na routeru (a neighbours);
// State/PfxRcd - pokud není ve stavu Idle tak běží, prefix recieved označuje kolik route jsem od souseda obdržel
// TblVer - verze tabulky; InQ a OutQ - vstupní a výstupní queue (pakety na zpracování)
# show ip bgp neighbors // zobrazí info o sousedech
# show ip bgp neighbors <IP> // zobrazí info o sousedovi; je zde i informace zda je soused IBGP (internal link) nebo EBGP (external link)
# show ip bgp neighbors <IP> advertised-routes // zobrazí info o advertised cestách konkrétnímu sousedovi
# show ip bgp // zobrazí BGP tabulku:
// * - platná BGP route, > - best; jen tu vybranou jako "best" router propaguje dál
// - network, next hop, metric (MED),
// local preference (bez hodnoty - defaultní (100) se nezobrazuje),
// weight (cisco proprietary, neposílá se ani nepřijímá, je lokální (defaultně 0),
// AS-Path (+origin codes (i,e,?))
# show ip bgp <route_IP> // vypíše routu a zároveň všechny BGP atributy
# show ip route // zobrazí routovací tabulku
# show ip protocols // zobrazí info o nakonfigurovaných protokolech
# debug ip routing // nebo # debug ip bgp updates; pro sledování
# debug ip tcp transactions // monitoring sestavení BGP session
# debug ip bgp
# debug ip bgp events // stavy BGP
# debug ip bgp updates // monitorujeme co BGP obdrží/posílá; nevidíme ale všechny atributy; na tento příkaz pozor, na internetovém routeru kde je záznamů kolem 1mil nám tím shoří router
// používat třeba s access listem nebo specifikovat adresy/sousedy kteří nás zajímají
# debug ip bgp keepalives // monitoring keepalives
KONFIGURACE
# router BGP <AS_number> // spustí instanci BGP s daným číslem AS (číslo AS získáváme od ISP, nebo si zažádáme od RIPE)
// čísla jsou od 1 do 4 294 967 294; dříve byly 1 - 64 512
// je povolen pouze 1 BGP proces na 1 router
// BGP process si automaticky vezme z loopbacku router ID a IP adresu
# neighbor <IP-address> remote-as <AS> // přidám IP adresu souseda a jeho AS
# neighbor <IP-address> description <description> // přidám popisek
# remote-as <neighbor-AS> // toto musíme udělat na obou stranách
# neighbor <IP-address> shutdown // administrativně shodím souseda abych mohl konfigurovat další atributy
# auto-summary // zapne nebo vypne sumarizaci před zapsáním cesty do BGP routing table
# network <major-network-number> route-map <route-map-name> // přidám routu + route mapu, pomocí které můžu nastavit atributy cesty a tímto je k tomu přiřadím
// při redistribuci je vhodné (nutné) použít filtr, aby se nepropagovalo úplně všechno ven
KONFIGURACE BGP NETWORK
# router BGP <AS-number> // vstup do konfigurace BGP
# neighbor <IP-addr> remote-as <AS-number> // přes # show ip interface brief se podívám na jakých IP mi běží interfaces, u souseda to vždycky nastavím jako IP souseda s číslem AS
# timers bgp <keepalive> <holdtime> // (defaultně - keepalive 60s (TCP session), holdtime 180s (držení routy v tabulce))
# neighbor <IP-addr> timers bgp <keepalive> <holdtime> // změní timery pro specifického souseda
# neighbor <IP-addr> password <password> // povolení MD5 autentizace, musí být na sousedních routrech stejný password
# clear ip bgp * // clear všech BGP sessions a načtení znovu
# access-list 1 permit <IP> <wildcard> // vytvoření access listu, abych mohl kontrolovat jaké routy budu distribuovat dál
# router bgp 1
# distribute-list 1 out connected // připojím svůj access list k odchozím redistribucím BGP
# router bgp 1
# neighbor <IP-addr> ttl-security hops <number> // TTL security check; při např.: number 10 - router will start sending BGP packets with TTL 255 and will accept BGP packets with 245 or more
// check přes # show ip bgp neighbor <IP-addr> | include TTL
# router bgp <AS>
# network <IP sítě> mask <mask> // bude propagovat tuto síť; pak zadám negihbor vztahy a oni si to automaticky začnou propagovat
# aggregate-address 10.1.0.0 255.255.0.0 summary-only // pokud mám na routeru podsítě 10.1.x.x, budou agregovány a propagovány jako tato adresa; summary-only znamená že router bude propagovat pouze sumarizovanou route, ne subnety
IBGP
# neighbor <ip> remote-as <AS>
# neighbor <ip> update-source <Loopback 1> // volba update source (na obou koncích musí být na loopback, viz poznámky IBGP)
# neighbor <ip> next-hop-self // nastavuju na routeru pro IP IBGP neigbours, aby věděli že přeze mě se přistupuje do EBGP sítě
# route-map toISP1 permit 10 // vytvoření routemapy "toISP"
# match interface Ethernet 0/0 // přiřazení routemapy na interface
# exit
# router ospf 1
# redistribute connected subnets route-map toISP1 //redistribuce do OSPF (IGP)
ADMINISTRATIVE DITANCE
# show ip protocols // zobrazí běžící protokoly
# distance bgp 100 190 200 // pořadí external, internal, local
// pro zapsání změny musím refreshnout - # clear ip bgp *; pak chvíli počkat než si znovu načte cesty
// kontrola # show ip route
MED
# default-metric <number> // jeden způsob jak nastavit MED
# route-map <name> permit <sequence> // druhý způsob nastavení MED přes vytvoření route-mapy
# match <condition>
# set metric <value> // nastavení MED
KOMUNITY
# ip bgp-community new-format // pokud nezapnu, čísla komunit vypadají 43131235; po zapnutí 100:35 třeba
AS PATH FILTRY
# show ip as-path-access-list <filter-list> // zobrazí nakonfigurované access listy
show ip bgp regexp <regexp> // zobrazí routy v BGP tabluce shodné s regulárním výrazem v jednom nebo ve všech filter listech (nejen AS-Path filtru)
show ip bgp filter-list <access list nuber> // zobrazí všechny routy v BGP tabulce který specifikovaný AS path access list povoluje
# ip as-path access-list <number> {permit|deny} <regexp> // # ip as-path access-list permit ^$ - abych se nestal tranzitním AS - mají nastaveno téměř všichni zákazníci
# neighbor <IP> filter-list <cislo_ACL> {in | out}
PREFIX LISTY a ROUTE MAPY
# ip prefix-list <name> {permit|deny} <network/len> [ge valute] [le value]
- pak přiřadím k sousedovi (??)
# show ip prefix-list [detail|summary] <name> // zobrazí daný prefix list
# show ip bgp prefix-list <name> //
# show route-map // zobrazí nakonfigurované route mapy
# continue [seq_number]
- dotazy - co když agregaci dělá tedy více routerů a agreguje takhle subnety že z toho vyjde výsledně stejná propagace