Laboratorul 09 - BGP

Lectură laborator

Rutare interdomain

Internetul din ziua de azi este compus din peste 45,000 de rețele diferite numite domenii (domains). Un domeniu este reprezentat de un set de rutere ce aparțin aceleași organizații (e.g. RDS, sau chiar al unei țări). Exemple mari de domenii sunt google, facebook, sprint. Chiar și RoEduNet este un domeniu. Aici găsiți o hartă interactivă cu domeniile prezente în momentul de față in internet.

Domenile pot fi împărțite în două clase, domenii de tranzit și stub. Un domeniu stub primește/trimite pachete în care sursa sau destinația sunt hosts din acest domeniu (e.g. RDS va primi/trimite pachete în care sursa sau destinația în header-ul IP este un IP pe care RDS îl deține). În schimb, un domeniu de tranzit este un domeniu care oferă servicii de rutare altor domenii, mai exact într-un domeniu de tranzit sunt pachete a căror sursă și destinație nu aparțin domeniului. Astăzi, peste 85% dintre domenii sunt de tip stub. În imaginea de mai jos, domenile T1, T2 și T3 sunt de tranzit, iar S1, S2, S3, S4 sunt stub.

De exemplu, un domeniu local precum RoEduNet este un domeniu stub, pe cand un domeniu precum google este de tranzit.

Internet eXchange Points (IXP)

O soluție folosită astăzi pentru a permite unui număr mare de domenii să se interconecteze este Internet eXchange Points (IXP). În general, un IXP reprezintă mai multe routere dintr-un datacenter care fac parte din domenii diferite. Practic, pentru fiecare domeniu care vrea să participe la interconectare, va exista un router în acest datacenter care e legat la domeniul din care acesta face parte și la un switch din datacenter (vor fi în același LAN și vor putea trimite informații între ele) la care sunt legate și alte routere din domenii care vor să se interconecteze. Vedem în imaginea de mai jos un astfel de exemplu. IXP este popular în Europa.

Factorul economic

În primele zile ale internetului, domenilor schimbau între ele toate rutele știute. Totuși, internetul din ziua de azi are la baza factorul economic. Între domenii există mai multe tipuri de relații economice:

  • customer→provider
  • shared-cost peering

În imaginea de mai sus, AS7 plătește AS4 pentru a îl folosi ca un AȘ de tranzit. Legăturile cu $ sunt de tip customer → provider. În schimb legăturile mov sunt de tip shared-cost peering. De exemplu, AS3 și AS4 ambele plătesc AS1 pentru a îl folosi ca AS de tranzit. Astfel, entitățile care dețin AS3 și AS4 pot alege să facă peering între ele și să plătească doar un link cu AS1.

BGP protocol

În ziua de astăzi este folosit un singur protocol pentru rutare interdomain, Border Gateway Protocol (BGP). BGP rulează peste TCP și este un protocol de tip path vector (vectorul distanțelor, similar cu RIP). Vom folosi termenul de Autonomous System (AS) pentru a ne referi la domeniile din internet. Fiecare AS este reprezentat de un ID (integer) unic. În cazul anunțurilor de rute, BGP anunță un prefix, cât și drumul până la acesta. Acest drum reprezintă o listă de AS-uri, astfel este evitată problema numărării la infinit.

BGP este un protocol care se bazează pe încredere. De exemplu, în 2004, tot traficul din lume a fost redirectat prin Turcia, deoarece aceștia au anunțat un prefix greșit.

Tipuri de mesaje
  • OPEN: mesajul de OPEN este trimis imediat ce conexiunea TCP dintre două routere este realizată. Acest mesaj inițializează sesiunea BGP și facilitează negocierea mai multor opțiuni pentru protocol.
  • NOTIFICATION: mesajul NOTIFICATION este folosit pentru a închide sesiuni BGP. În general, acest mesaj este trimis atunci când apar erori.
  • UPDATE: mesajul este folosit pentru a anunța noi rute sau modificări la rutele existente. Spre deosebire de alți algoritmi de tip vector distance, BGP trimite doar update-uri cu schimbări, nu întreaga tabelă de rutare la fiecare update.
  • KEEPALIVE: mesajul este trimis regulat și este folosit pentru a confirma că routerul peer este conectat. În cazul în care pentru o perioadă de 90 de secunde nu primim un mesaj de tip KEEPALIVE de la un peer, înseamnă că sesiunea este down și trebuie să anunțăm retragerea tuturor rutelor prin acest peer.

Găsiți un exemplu de captură de mesaje BGP în urmatoarea captură de pe Cloudshark. Studiați cu atenție aceste mesaje.

Extensii BGP

În implementarea protocolului, pentru a fi mai ușor de configurat, avem două mari extensii:

  • External Border Gateway Protocol (EBGP) - Extensie a protocolului BGP folosit pentru comunicarea în exteriorul unui AS.
  • Interior Border Gateway Protocol (IBGP) - Extensie a protocolului BGP folosit pentru comunicarea în interiorul unui AS. Practic, rutele care sunt aflate folosind EBGP vor fi sumarizate în AS folosind IBGP.

Informatii utilizare infrastructura laborator - FFRouting

În cadrul acestui laborator veți lucra folosind suita FRRouting. FRRouting combină mai multe daemonuri de rutare într-o interfață similară cu a Cisco iOS (sistem de operare de pe routere CISCO). FRRouting

Fiecare echipa va administra propria rețea virtuală. La începutul laboratorului veți primi un număr de grupa și parolă de ssh pentru acces la rețeaua voastră. Pool-ul de adrese asociat rețelei va fi sub formă <număr grupa>.0.0.0/8

Pentru a va conecta la rețea puteți folosi comanda:

ssh -J <user_moodle>@fep.grid.pub.ro -p 200<numar grupa> root@10.9.4.102

fep.grid.pub.ro este server-ul la care ne putem conecta pentru a accesa infrastructură facultății. (e.g. cluster, conectare la calculatoare din rețeaua facultății, etc.) fep.grid.pub.ro rulează Linux, și fiecare student are un user făcut, cel de pe moodle. Comanda ssh de mai sus, se conecteaza prin SSH la fep.grid.pub.ro, dupa care mai face o conexiune SSH catre server-ul 10.9.4.102 care ruleaza infrastructura laboratorului.

De exemplu, studentul John Smith din grupa 5 se va conecta folosind:

ssh -J john.smith@fep.grid.pub.ro -p2005 root@10.9.4.102

O dată conectați va veți află pe container-ul “ssh”, de aici puteți apela scriptul ./goto.sh pentru a va conecta la routere și hosti De ex pentru a va conecta la routerul LOND veți apela:

./goto.sh LOND container

O dată conectați la unul din routerele rețelei, veți fi prezentați cu un shell bash. Aici puteți rula comenzi standard Linux. Pentru a accesa linia de comanda a routerului intoduceti comanda:

vtysh

pentru a accesa modul principal al vtysh. De aici puteți rula comenzi cum ar fi ping și traceroute. De asemenea puteți vizualiza configurația curentă, precum și varii informații de sistem. Însă din acest mod nu puteți configura routerul.

Pentru a configura routerul din modul principal trebuie introdusă comanda configure terminal. Din acest moment, orice linie de comandă introdusă va fi aplicată în configurația routerului. Pentru a ieși din modul de configurare, puteți inroduce comandă exit sau puteți tasta CTRL-D.

Configurarea BGP

Pentru a configura BGP pe un router, din terminalul de configurare a routerului vom rula urmatoarea comanda:

router bgp <ASN>

ASN reprezinta identificatorul AS-ului nostru. Astazi fiecare grupa va lucra cu un AS.

Avem comenzi precum `show ip bgp` care afiseaza informatii despre procesul de rutare BGP.

EBGP

Vom studia acuma cum putem configura EBGP pe routerele IOS Cisco. De exemplu, daca am vrea sa configuram pe AS1, am rula urmatoarele comenzi.

Din modul configure rulați:

router bgp <AS-number>
 ! in general trebuie sa setam si id-ul ruterului pentru pachetele BGP ce vor fi trimise
 ! putem folosi IP-ul cu care suntem conectat la IXP
 ! aflați adresa ip rulând "do show int br"
 bgp router-id <IP-către-IXP>
 ! nu folosim politici de export, exportam toate rutele
 no bgp ebgp-requires-policy
 ! nu folosim politici de import, importam toate rutele
 no bgp network import-check
 
 ! Specificam vecinul, in cazul de fata vecinul cu id-ul remote_as are IP-ul 180.21.0.21
 ! si face parte din AS-ul 21
 neighbor 180.21.0.21 remote-as 21
 
 ! urmatoarele configuratii vor fi pentru IPV4
 address-family ipv4 unicast
  ! activam BGP cu vecinul
  neighbor 180.21.0.21 activate
  ! Pastreaza log-uri cu mesajele primite. In cazul in care pica router-ul isi da
  ! reboot, pastreaza un log pentru a evita restartarea intregului proces de rutare
  neighbor 180.21.0.21 soft-reconfiguration inbound
 
  ! Redistribuim urmatoarele rute catre vecin
  network <AS-number>.0.1.0/24
  network <AS-number>.0.2.0/24
  network <AS-number>.0.3.0/24
  network <AS-number>.0.4.0/24
 
 exit-address-family
exit
IBGP
router bgp <group number>
 ! nu folosim politici de export, exportam toate rutele
 no bgp ebgp-requires-policy
 ! nu folosim politici de import, importam toate rutele
 no bgp network import-check

 ! avem nevoie de peer groups pentru ca BGP face reject la peers daca folosesc un alt 
 ! IP decat a fost configurat. Cum un router are doua IP-uri (2 link-uri), vrem sa
 ! adaugam ambele IP-uri ca router-ul sa apara ca un singur peer chiar daca are mai
 ! multe IP-uri
 neighbor LOND peer-group
 neighbor <AS-number>.0.1.1 peer-group LOND
 neighbor <AS-number>.0.2.2 peer-group LOND

 neighbor BUCH peer-group
 neighbor <AS-number>.0.3.2 peer-group BUCH
 neighbor <AS-number>.0.4.1 peer-group BUCH

 neighbor BERL peer-group
 neighbor <AS-number>.0.4.2 peer-group BERL
 neighbor <AS-number>.0.2.1 peer-group BERL

 neighbor PARI peer-group
 neighbor <AS-number>.0.3.1 peer-group PARI
 neighbor <AS-number>.0.1.2 peer-group PARI


 ! configuram vecinul cu AS-ul nostru in full mesh (toate routerele)
 neighbor LOND remote-as <AS-number>
 neighbor BUCH remote-as <AS-number>
 neighbor BERL remote-as <AS-number>
 neighbor PARI remote-as <AS-number>

exit
Route-map & ACL
access-list ixp permit any 

route-map IXP_EXPORT permit 10
  set community 21:1
exit

route-map IXP_IMPORT permit 10
  match ip address any
exit

Exerciții

În cadrul laboratorului veți lucra la un mic internet. Celelalte grupe vor fi și ei participanți în acest internet cu propriul lor AS.

Pentru acest laborator veți lucra în echipe de câte 2-3 persoane. În cadrul laboratorului vom simula că suntem administratorii unui datacenter al firmei Aperture DC cu locații în Paris, Londra, Berlin și București, având următoarea topologie:

Vom configura iBGP pe routerele BERL, PARI si BUCH, pe când pe LOND vom configura eBGP. IXP este AS 21. OSPF rulează deja pe toate ruterele.

Routerele rulează deja OSPF și sunt configurate cu IP-uri din blocul <group number>.0.0.0/8. Putem folosi `show interface brief` pentru a vedea IP-urile asignate pe o interfață. IP-urile de pe interfețe sunt următoarele:

LOND: <group number>.0.1.1 si <group number>.0.2.2

BUCH: <group number>.0.3.2 si <group number>.0.4.1

BERL: <group number>.0.4.2 si <group number>.0.2.1

PARI: <group number>.0.3.1 si <group number>.0.1.2

1. Configurați BGP peering cu IXP. În acest exercițiu vom configura eBGP pentru a participa la internet, practic vom face cunoscut IXP-ului rutele noastre. Această operație va fi realizată pe router-ul conectat la IXP, mai exact LOND.

1.1 Configurați regulile de import pentru IXP

1.2 Configurați regulile de export pentru IXP.

Puteti verifica ca totul merge bine folosind comanda `show ip bgp` si `show ip route`. Comenzile vor afisa rutele invatate prin BGP.

Pentru peering la IXP vom folosi 180.21.0.<numar_as>/24. Mai jos aveți un exemplu de cum este configurat IP-ul pe interfață legată la IXP din LOND.

! For AS 2, we set the following IP on the link to the IXP.
interface ixp_21
 ip address 180.21.0.2/24

2. Configurați iBGP în full mesh pentru a redistribui intern rutele aflate folosind BGP. Găsiți aici un mic exemplu.

Veți ajunge în situația în care puteți de pe routerul LOND să dați ping routerelor LOND din AS-urile colegilor; ping către alte routere din AS-uri străine, sau ping de pe un alt router din AS-ul vostru către un AS străin nu va merge. Motivul este pentru că, deși routerele învață prin BGP cum să ajungă în alte AS-uri, nu știu cum să ajungă la următorul hop (interfața către IXP a routerului de la granița AS-ului respectiv). Corectați configurația OSPF astfel încât routerul LOND să propage informații despre această rețea:

router ospf
  redistribute connected

3. Testați dacă aveți conexiune la AS-urile colegilor folosind ping. Puteți verifică prefixele primite de la IXP folosind comandă `show ip bgp`.

4. Citiți articolul What is BGP, and what role did it play in Facebook’s massive outage și explicația ce a cauzat întreruperea serviciilor Facebook pentru aproape o zi de acum 6 luni.

5. Bonus. Filtrați după un prefix dat folosind ACL-uri. Găsiți aici o prezentare rapidă a funcționalității de filtering.

O posibila solutie a laboratorului o gasiti aici

pc/laboratoare/09_bgp.txt · Last modified: 2022/05/23 01:12 by vlad_andrei.badoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0