Laboratorul 05 - Rutare. OSPF

Lectură laborator

Prezentare generala

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.

OSPPF

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:

  • RB anunta ca 132.164.1.0/24 se afla la o distanta de 2, iar 181.132.0.0/16 la o distanta de 3.
  • RC anunta ca 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:

  • Autentificare mesaje OSPF. Astfel, fiecare mesaj OSPF poate conține și un hash MD5 care poate fi verificat de către un router la primire. În header-ul OSPF se gasesesc două câmpuri: 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?):

Mesaje in OSPF

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?

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.

Vizualizare matrice conectivitate

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

FRR si IPv4

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

FRR si OSPF

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
!

Daca routerul pe care configurez are un link in reteaua 10.0.0.0/24 si vreau sa instintez celelalte routere din zona in care ma aflu, sau cu totul alta zoan voi folosi comanda de mai sus.

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

Analiza de pachete

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>

Exercitii

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.

Având un bloc de adrese /8, putem folosi, chiar dacă facem risipă, și subretele cu masca /24 sau /16 (e.g. 10.0.1.0/24, 10.0.1.1/24).

Între două rutere, vom seta adrese din același subnet. (e.g. între LOND și PARI vom seta 10.0.1.2/24 și 10.0.1.3/24 pe cele două interfețe). Atenție să nu aveți subnet-uri identice între oricare două rutere.

Pool-ul de adrese asociat rețelei va fi de forma <număr grupa>.0.0.0/8

Va recomandăm să va faceți pe o foaie topologia și să va notați subnet-uril.

De exemplu, daca suntem in grupa 5 putem asigna pe link-ul BUCH ↔ BERL 5.1.0.0/16 si 5.2.0.0/16.

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.

  • Cum sunt trimise pachetele LS Update, periodic sau la schimbari de link (e.g. schimbare cost)?
  • Cum arată actualizarile trimise de către routerul LOND înainte și după convergență?
  • Cum este reprezentat un link in protocolul OSPF?
pc/laboratoare/05.txt · Last modified: 2022/03/30 15:16 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