De citit înainte de laborator:
Lectura optionala:
Dacă la laboratorul trecut am lucrat la nivel de data plane, astăzi vom trece la control plane-ul unui router. Vom studia implementarea protocolului de routare OSPF si vom vedea o mica parte din activitatea unui network engineer.
Open Shortest Path First (OSPF) descris în RFC 2328 a fost dezvoltat ca un successor pentru RIP. La baza, OSPF implementează un algoritm de tipul link state ce folosește flooding de pachete cu informații despre link-uri și algorithmul lui Dijkstra pentru a calcula drumul minim. OSPF este un protocol cu specificația deschisă spre deosebire de CISCO EIGRP.
În OSPF, un router trimite actualizariile de link-uri către toate celelalte routere din cadrul AS-ului. Acest lucru se întâmplă atât când sunt modificări în link state (e.g. crește/scade costul unui link, cade un link) dar și periodic, cel puțîn odată la 30 de minute.
Protocolul OSPF este implementat peste protocolul IP (proto number 89), astfel mesajele OSPF vor avea următoarea strucutra:
Data Link Protocol (e.g. Ethernet) → IP → OSPF
.
Spre deosebire de implementarea standard de link state, pentru scalabilitate (în rețele mari flooding-ul are un impact mare) OSPF introduce un conceptul de ierarhizare a routerelor în zone (areas). O astfel de separare o găsim în topologia de mai jos:
Ierarhizarea va fi realizată astfel încât să existe o rută între oricare două routere dintr-o zona. Mai mult, va există o zona 0 numită și backbone la care toate celelalte zone vor fi conectate. Două zone vor fi conectate doar prin intermediul backbone-ului. (există un singur backbone) Astfel, în interiorul unei zone se va rula protocolul OSPF de link state, flood-urile cu LSP ajungând maxim până la routerele de la granița. Routerele de la granița vor avea informații sumarizate despre toate zonele. Mai exact, un vector din backbone va avea un vector distance cu ruterele către toate zonele.
Pentru a înțelege mai bine, vom lua că exemplu următoarea topologie:
Toate routerele din zona 2 vor învață rutele pentru 132.164.1.0/24
și 181.132.0.0/16
după flooding-ul de LS Updates. Ruterele de la granița, RB și RC vor creea mesaje similare cu vector distance și le vor trimite prin backbone:
132.164.1.0/24
se afla la o distanta de 2, iar 181.132.0.0/16
la o distanta de 3.132.164.1.0/24
se afla la o distanta de 3, iar 181.132.0.0/16
la o distanta de 2.
Mesajele acestea sunt distribuite prin backbone folosind flooding. În tabela de rutare a lui RA se va salva ruta prin RB pentru 132.164.1.0/24
cu cost 2 și ruta prin RC pentru 132.164.1.0/24
cu cost 2.
Pe lângă funcționalitatea de ierarhizare, protocolul OSPF are următoarele:
Auth Type
și Auth Data
, în mod implicit autentificarea nu este activată. În captura unui mesaj OSPF de mai jos, putem observă că această opțiune este implicit dezactivată (De ce?):
Vom studia acuma mesajele trimise de OSPF, folosind CloudShark, o interfata online de Wireshark folosita pentru a studia capturi de pachete in format pcap
.
1. Selectând orice mesaj OSPF veți observa că acestea au mereu un header OSPF. Acesta conține informații precum zona din care routerul face parte, checksum și alte câmpuri utilizate pentru a transmite mesajele peste IP.
2. Selectați unul din mesajele OSPF de tip Hello
. Vom observă o structura a pachetului similară cu cea de mai jos.
Putem vedea informatii precum intervalul dupa care un link va fi considerat cazut (40 sec), intervalul la care vor fi trimise pachete Hello (10 sec) sau designated router.
3. Studiați mesajele de tip LS Update
și încercați să identificați link-urile anunțate din mesaj.
3. Observăm și alte mesaje folosite precum LS Request
și LS Acknowledge
, la ce sunt folosite?
Î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.
Pe lângă interfață ssh, este disponibilă și o interfață web care expune matricea de conectivitate a rețelei. Pentru a o accesa trebuie să forwardati portul 80 la portul 8080 asociat pe stația locală:
ssh -L8080:localhost:80 -J <user_moodle>@fep.grid.pub.ro -p 200<numar grupa> root@10.9.4.102
De exemplu, studentul John Smith din grupa 5 va forwarda serviciul http folosind comanda:
ssh -L8080:localhost:80 -J john.smith@fep.grid.pub.ro -p2005 root@10.9.4.102
Din acest moment matricea de conectivitate ar trebui să fie accesibilă la adresa http://localhost:8080
Pentru a configura nivelul de retea trebuie intrat in submodul interface din module configure. Comenzile disponibile includ:
interface port_LOND ! intra in modul inteface al interfetei port_LOND ip address 1.0.0.1/24 ! asigneaza addresa 1.0.0.1 cu netmask 255.255.255.0 interfetei port_LOND ip ospf cost 1000 ! asigneaza un cost de 1000 interfetei, de obicei este masurat in Mb/s !
Din modul principal al vtysh pot fi rulate mai multe comenzi pentru depanarea routerului:
show ip route ! afiseaza tabela de rutare show interface brief ! afiseaza informatii sumarizate pentru toate interfetele din distem ping a.b.c.d ! trimite pachete ICMP catre destinatia a.b.c.d si afiseaza replicile traceroute a.b.c.d ! afiseaza drumul parcurs de pachete catre destinatia a.b.c.d
Pentru a configura daemonul de OSPF trebuie intrat in submodurile router ospf si interface din modul configure ( comanda configure terminal
). Comenzile disponibile includ:
router ospf ! intra in modul router ospf network 1.0.0.0/24 area 0 ! face cunoscuta reteaua 1.0.0.0/24 vecinilor OSPF din zona 0 !
interface port_LOND ! intra in modul inteface al interfetei port_LOND ip ospf cost 1000 ! asigneaza un cost de 1000 interfetei, de obicei este masurat in Mb/s !
In modul prinicpal de operare al vtysh sunt disponibile mai multe comenzi pentru depanarea rutarii OSPF:
show ip route ospf ! afiseaza intrarile din tabela de rutare asociate protocolului ospf show ip ospf neighbor ! afiseaza vecinii OSPF direct conectati
Pentru a captura pachete, comanda tcpdump este disponibila pe routere din interfata bash. Aceasta poate fi utilizata in urmatorul fel:
tcpdump -w <nume fisier captura> -i <interfata> -s65536 # parametrul -s65536 este necesar pentru a preveni truncarea pachetelor
Deoarece interfata grafica este absenta pe routere este necesara copierea fisierelor de captura pe statia locala folosind comanda:
echo 'cat <cale fisier captura>' | ssh -J <utilizator fep>@fep.grid.pub.ro -p<port ssh> root@10.9.4.102 ./goto.sh <nume router> container > <nume fisier captura>
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 Zurich, New York, Paris, Londra, Berlin și București, având următoarea topologie:
1. Fiind o companie cu renume mondial, Aperture a reușit să achizitoneze de la IANA (Internet Assigned Numbers Authority) foarte multre adrese IPv4, mai exact un bloc de adrese /8 și acum trebuie să le configurăm pe routerele din datacenter. Configurați adresarea statică pe routerele din rețea. Asigurați-va că fiecare interfață a fiecărui router are o adresa unică, că nu se suprapun rețele și că va încadrați în spațiul alocat. Trebuie să decideți asignarea efectivă a adreselor în funcție de aceste cerințe. La finalul acestui exercițiu toate routerele direct conectate vor răspunde la comandă ping.
1.1. Studiați matricea de conectivitate pentru a verifică corectitudinea configuratiilor. De ce nu avem conectivitate între toate routerele?
2. Având un număr colosal de routere, nu este fezabil să setăm și actualizăm manual rutele. Configurați rutarea dinamică folosind OSPF. Pentru fiecare router trebuie să faceți vizibile rețelele direct atașate protocolului OSPF pentru a fi distribuite în toată rețeaua. Setați pentru fiecare interfață costul corespunzător lățimii de bandă disponibile pe legătura acesteia.
2.1. Vom verifică în matricea de adiacentă că avem conectivitate între oricare două routere.
2.2. Cum arată tabela de routare? Descrieți pe scurt ce conține o intrare din tabela.
2.2. Ce rute avem în tabela OSPF a routerului din Bucharest? Cum diferă rutele din tabela OSPF față de rutele din tabela de rutare?
3. Aperture a descoperit că singura legătură sigură dintre București și Londra este prin Paris, celelalte fiind interceptate de autorități. Configurați costurile interfețelor astfel încât toate pachetele dinspre Londra spre București să treacă prin Paris.
4. Folosim Wireshark vom studia pachetele trimise de OSPF.