This is an old revision of the document!
De citit înainte de laborator:
Lectura video
Lectura optionala
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.
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.
Î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:
Î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.
Î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.
Găsiți un exemplu de captură de mesaje BGP în urmatoarea captură de pe Cloudshark. Studiați cu atenție aceste mesaje.
În implementarea protocolului, pentru a fi mai ușor de configurat, avem două mari extensii:
Î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
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.
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.
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
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
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
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.
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.
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.
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.