Prečo internet potrebuje iný protokol než vnútorné siete

Protokoly ako OSPF alebo RIP sú IGP (Interior Gateway Protocol) — navrhnuté na routing vo vnútri jednej organizácie, kde všetky routery dôverujú jednej spoločnej správe. Internet je ale sieť desiatok tisíc nezávislých organizácií — internetových poskytovateľov, firiem, univerzít — z ktorých každá spravuje vlastnú sieť a nikto z nich a priori nedôveruje ostatným. Na prepojenie takýchto vzájomne nedôverujúcich sietí slúži odlišná kategória protokolov, EGP (Exterior Gateway Protocol), a jediným prakticky používaným zástupcom tejto kategórie dnes je BGP (Border Gateway Protocol, aktuálne vo verzii BGP-4, definovanej v RFC 4271).

Autonómne systémy: základná jednotka internetu

Každá sieť, ktorá sa nezávisle rozhoduje o vlastnej routing policy, dostáva jedinečné číslo — ASN (Autonomous System Number) — a nazýva sa autonómny systém (AS). Môže ísť o veľkého internetového poskytovateľa, cloudového giganta, univerzitu alebo firmu s vlastným pripojením na viacero poskytovateľov. BGP je protokol, ktorým tieto autonómne systémy medzi sebou oznamujú, ktoré siete (prefixy) vlastnia a cez ktoré iné AS sa k nim dá dostať.

Path-vector: tretí spôsob routingu

BGP nepatrí ani medzi distance-vector protokoly (ako RIP), ani medzi link-state protokoly (ako OSPF) — používa tretí prístup, path-vector. Namiesto vzdialenosti v skokoch alebo ceny linky si BGP pri každom prefixe pamätá celú postupnosť autonómnych systémov, cez ktoré treba prejsť, aby sa k nemu dosiahlo — atribút zvaný AS_PATH.

Táto na prvý pohľad drobná odlišnosť má zásadný dôsledok: keďže router vidí celú cestu AS čísel, dokáže triviálne odhaliť a odmietnuť slučku — stačí skontrolovať, či sa vlastné AS číslo už v ceste nenachádza. Zabránenie routovacím slučkám medzi nezávislými, vzájomne si nedôverujúcimi sieťami by bolo bez tejto vlastnosti oveľa zložitejšie.

eBGP vs iBGP

BGP rozlišuje dva typy susedstiev (peeringov):

  • eBGP (external BGP) — medzi routermi v odlišných autonómnych systémoch, typicky priamo fyzicky prepojenými. Trasy prijaté cez eBGP sa automaticky preposielajú ďalej všetkým ostatným susedom.
  • iBGP (internal BGP) — medzi routermi v rovnakom autonómnom systéme, ktoré môžu byť aj viacero routerov ďaleko od seba. Aby sa predišlo slučkám v rámci jedného AS (kde AS_PATH kontrola nepomôže, lebo AS číslo sa nemení), trasa prijatá cez iBGP sa nesmie automaticky preposielať ďalšiemu iBGP susedovi — z toho vyplýva požiadavka na plnú vzájomnú prepojenosť (full mesh) medzi všetkými iBGP routermi v AS, čo sa vo veľkých sieťach v praxi rieši prostredníctvom route reflectorov alebo confederations, ktoré túto požiadavku obchádzajú bez straty korektnosti.

BGP správy a nadviazanie relácie

BGP susedia komunikujú cez spoľahlivé TCP spojenie na porte 179 — na rozdiel od OSPF alebo RIP teda BGP nemusí riešiť vlastnú spoľahlivosť doručenia, spolieha sa na TCP. Používajú sa štyri typy správ:

  • OPEN — prvá správa pri nadväzovaní relácie, obsahuje ASN, BGP verziu a ďalšie parametre.
  • UPDATE — jadro protokolu; oznamuje nové dosiahnuteľné prefixy (s ich atribútmi) alebo naopak sťahuje predtým oznámené prefixy.
  • KEEPALIVE — pravidelne posielaná správa udržujúca reláciu nažive (BGP nemá vlastný Hello mechanizmus ako OSPF, namiesto toho sa spolieha na tieto periodické správy).
  • NOTIFICATION — oznamuje chybu a ukončuje reláciu.

BGP atribúty: čím sa trasy odlišujú

Ku každej ceste sa okrem AS_PATH prikladá aj rad ďalších atribútov, ktoré ovplyvňujú, ktorá cesta sa nakoniec zvolí ako najlepšia:

AtribútPopis
AS_PATHPostupnosť AS čísel na ceste k prefixu; kratšia cesta je spravidla preferovaná
NEXT_HOPIP adresa, na ktorú má byť prevádzka k danému prefixu odoslaná
LOCAL_PREFLokálna preferencia nastavená v rámci vlastného AS; vyššia hodnota vyhráva; nezdieľa sa mimo AS
MED (Multi-Exit Discriminator)Odporúčanie susednému AS, ktorý z viacerých vstupných bodov uprednostniť; nižšia hodnota vyhráva
ORIGINAko bol prefix pôvodne zavedený do BGP (IGP, EGP, alebo neisto/incomplete)
COMMUNITYVoliteľná "značka" na prefixe umožňujúca skupinovo aplikovať politiky (napr. "neposielaj ďalej zákazníkom")
WEIGHTRozšírenie špecifické pre konkrétneho výrobcu, čisto lokálne pre daný router, s najvyššou prioritou v rozhodovacom procese

Rozhodovací proces: ako BGP vyberá "tú najlepšiu" trasu

Ak router pozná k rovnakému prefixu viacero ciest (typicky od rôznych susedov), musí vybrať práve jednu, ktorú vloží do routing table a oznámi ďalej. BGP na to používa presne definovaný, viackrokový rozhodovací proces — porovnávajú sa atribúty v pevne danom poradí, pričom sa prejde na ďalšie kritérium len vtedy, keď predchádzajúce neurčilo jednoznačného víťaza:

  1. Najvyšší Weight (ak je podporovaný a nastavený)
  2. Najvyšší Local Preference
  3. Trasa vytvorená/naimportovaná lokálne na danom routeri
  4. Najkratší AS_PATH
  5. Najnižší (najlepší) Origin kód
  6. Najnižšia hodnota MED (spravidla porovnávaná len medzi trasami od rovnakého suseda)
  7. Preferovanie eBGP ciest pred iBGP
  8. Najnižšia IGP metrika k next-hop adrese
  9. Najstaršia (najdlhšie stabilná) eBGP cesta
  10. Najnižšie Router ID ako posledné rozhodujúce kritérium

Presné poradie a dostupnosť niektorých krokov sa môže mierne líšiť podľa konkrétneho výrobcu zariadenia, princíp postupného prechádzania hierarchie kritérií je však univerzálny naprieč implementáciami.

Globálna routing table: obrovská a stále rastúca

BGP tabuľka viditeľná z pohľadu veľkého internetového poskytovateľa dnes obsahuje viac ako milión prefixov a číslo neustále rastie s tým, ako pribúdajú nové siete a ako sa väčšie bloky adries delia na menšie, presnejšie oznamované rozsahy. Táto veľkosť kladie reálne nároky na pamäť a výpočtový výkon routerov v jadre internetu a je jedným z dôvodov, prečo BGP-hovoriace zariadenia patria medzi najvýkonnejší (a najdrahší) sieťový hardvér vôbec.

BGP hijacking: keď protokol postavený na dôvere zlyhá

BGP bol navrhnutý v čase, keď sa počet pripojených sietí počítal na desiatky a vzájomná dôvera medzi prevádzkovateľmi bola samozrejmosťou. Protokol preto štandardne neoveruje, či AS, ktorý oznamuje daný prefix, je skutočne jeho oprávneným vlastníkom. Táto vlastnosť je zdrojom jedného z najzávažnejších typov útokov na internetovú infraštruktúru — BGP hijackingu.

Legitímna cesta k 203.0.113.0/24 AS100 vlastník prefixu AS300 (vy) AS_PATH: 300 200 100 · 3 AS BGP hijack: falošné, kratšie oznámenie AS666 útočník AS_PATH: 300 666 · 2 AS — kratšia, preferovaná!
Ak útočník (AS666) oznámi tú istú sieť s kratším AS_PATH, väčšina routerov ju podľa rozhodovacieho procesu uprednostní pred legitímnou, dlhšou cestou — bez ohľadu na to, že AS666 prefix v skutočnosti nevlastní.

V praxi mal BGP hijacking podobu od neúmyselných chýb v konfigurácii (operátor omylom preposlal cudzí prefix ďalej) až po cielené útoky, pri ktorých bola prevádzka k legitímnym službám dočasne presmerovaná cez sieť útočníka — s možnosťou odpočúvania, úpravy alebo len úplného výpadku dostupnosti cieľovej služby. Keďže BGP routuje prevádzku medzi sieťami na celom svete, dôsledky takéhoto incidentu môžu byť viditeľné pre milióny používateľov naraz.

Ako sa dnes BGP hijacking rieši

RPKI (Resource Public Key Infrastructure) umožňuje vlastníkovi prefixu kryptograficky podpísať záznam (ROA — Route Origin Authorization) potvrdzujúci, ktorý AS je oprávnený daný prefix oznamovať. Routery s validáciou RPKI potom dokážu takéto neplatné oznámenia automaticky odmietnuť ešte predtým, než ovplyvnia rozhodovací proces. Doplnkovo sa používa dôsledné prefix filtering na hraniciach sietí (najmä smerom k zákazníkom) a postupne sa presadzuje aj kryptografické zabezpečenie celej AS_PATH cesty (BGPsec) — no plošné nasadenie týchto ochrán naprieč celým internetom je stále prebiehajúci, dlhodobý proces.

Zhrnutie

BGP je protokol, ktorý doslova drží internet pokope — bez neho by desiatky tisíc nezávislých sietí nemali spoločný jazyk na to, aby si povedali, ako sa k sebe navzájom dostať. Jeho path-vector princíp elegantne rieši problém routovacích slučiek medzi vzájomne nedôverujúcimi sieťami pomocou explicitnej AS_PATH cesty, a bohatý systém atribútov (Local Preference, MED, Community) dáva prevádzkovateľom jemnú kontrolu nad tým, kadiaľ má ich prevádzka tiecť. Práve táto flexibilita, postavená na pôvodnej dôvere medzi sieťami, je zároveň zdrojom najväčšej slabiny protokolu — a moderné riešenia ako RPKI existujú presne preto, aby túto medzeru z 80. rokov uzavreli.