Free Web Hosting Provider - Web Hosting - E-commerce - High Speed Internet - Free Web Page
Search the Web


Aplicatii de rutare pe masini Linux: Zebra ; Quagga

Referat la: 
Sisteme moderne comunicatii de date
Student: Voinicaru Cristian                             

Cuprins

Teorie
Introducere
Notiuni de rutare
Activarea transmisiei pachetelor
Tablelul de rutare
Definirea rutelor statice
Comanda route
Definirea rutei prestabilite
Utilizarea rutarii dinamics
Protocoale de rutare
    Border Gateway Protocol (BGP)
    Routing Information Protocol (RIP)
    RIP versiunea2 (RIPv2)
    Protocol Open Shortest Path First (OSPF)
Rutare cu programul Zebra
Rularea programului ospfd

Lucrare practica
Scopul lucrarii
Modul de realizare
Configurare router R1
Configurare router R2
Configurare router R3
Teste
Test final
Aplicatii practice ale programului QUAGGA
                           

Introducere

<top>
            Un calculator poate comunica în mod direct numai cu alte calculatoare de care este legat prin intermediul unei conexiuni fizice. In aceste conditii, calculatorul de pe biroul dumneavoastra ar trebui sa poata comunica numai cu sistemele conectate electric la cablul de relea de care este legat sistemul dumneavoastra. Deci, cum se realizeaza comunicarea cu un calculator situat în cealalta parte a planetei? Exista doua procedee elementare: comutare de circuite si comutare de pachete.
            Comutarea de circuite este procedeul folosit în cadrul retelei de telefonie pentru comunicatii prin voce. Când ridicati receptorul telefonului, se aude un ton. In acest moment, s-a stabilit o conexiune electrica între postul dumneavoastra si o centrala telefonica, situata la sediul central al companiei de telefonie locale. In timp ce formati numarul de telefon, furnizati centralei informatiile necesare pentru stabilirea de conexiuni suplimentare. Folosind aceste informatii, centrala conecteaza portul dumneavoastra de receptie cu un port de emisie. Daca numarul pe care îl apelati este deservit de catre centrala locala, aceasta stabileste o conexiune între portul la care este atasat telefonul dumneavoastra si portul conectat la postul apelat. Daca numarul pe care îl apelati este situat la distanta, centrala locala stabileste o conexiune cu urmatoarea centrala de pe linie. Fiecare centrala se conecteaza cu urmatoarea centrala de pe linie pâna când se ajunge la centrala care deserveste postul situat la distanta. Astfel se creeaza un circuit între telefonul dumneavoastra si cel situat la distanta, indiferent unde s-ar gasi acesta, circuit dedicat utilizarii de catre dumneavoastra pâna în momentul în care puneti receptorul în furca. Când calculatorul dumneavoastra comunica prin intermediul unui modem, acesta foloseste sistemul telefonic pentru a crea un circuit între sine însusi si sistemul situat la distanta, care deseori este un server aflat la sediul unui furnizor de servicii Internet (ISP - Internet Service Provider) care conecteaza sistemul dumneavoastra la Internetul cu comutare de pachete.
            Comutarea de pachete reprezinta procedeul folosit de majoritatea retelelor de date. Fiecare pachet din retea contine o adresa care precizeaza comutatorului unde trebuie sa ajunga pachetul. Când pachetul ajunge la un comutator, acesta din urma citeste adresa si determina modul în care trebuie transmis pachetul. În situalia în care comutatorul are o conexiune fizica la nodul destinatie, va livra el însusi pachetul. In caz contrar, transmite pachetul urmatorului comutator din cale, spre nodul destinatie. Fiecare pachet este manipulat separat. Nu se stabileste nici o conexiune de tip „cap la cap".
            În modelul care foloseste comutarea de circuite, conexiunea se realizeaza între telefonul dumneavoastra si telefonul situat la celalalt capat al firului. In sistemul care utilizeaza comutarea de pachete, conexiunea se stabileste între gazda dumneavoastra si ruterul local.

Notiunea de rutare
<top>
            Rutarea transforma retelele TCP/IP într-un internet si reprezinta o functie esentiala a protocolului IP (Internet Protocol).             Asemeni oricarui sistem care foloseste stiva de protocoale TCP/IP, sistemul linux ia deciziile de rutare în stratul IP. Când stratul IP primeste un pachet, evalueaza adresa de destinatie din antetul pachetului, dupa cum urmeaza:
    • Daca adresa de destinatie este adresa calculatorului local, IP evalueaza numarul protocolului si trimite pachetul mai sus, spre protocolul de transport corespunzator.
    •Daca adresa de destinatie se gaseste într-o retea conectata direct, IP livreaza pachetul spre sistemul gazda situat la destinatie.
    • Daca destinatia se gaseste într-o retea situata la distanta, IP transmite datagrama unui ruter local. Ruterul caruia îi este trimis pachetul trebuie sa partajeze cu sistemul local aceeasi retea fizica. Este responsabilitatea ruterului respectiv sa transmita apoi pachetul catre ruterul urmator si asa mai departe, hop dupa hop, pâna când pachetul ajunge la destinatie.
            Bazându-se pe aceasta lista de posibile decizii, IP fie va livra pachetul direct, fie îl va transmite unui ruter în vederea efectuarii unor prelucrari suplimentare. Pentru a livra un pachet unui alt sistem gazda situat într-o retea conectata direct, IP trebuie sa foloseasca adresa stratului fizic al retelei respective prin conversia adresei IP într-o adresa de strat fizic.

Activarea transmisiei pachetelor IP
<top>
            Când un calculator transmite un pachet pe care 1-a primit din retea catre un sistem aflat la distanta, acest procedeu se numeste transmisie IP (IP forwarding). Toate sistemele Linux pot fi configurate pentru transmisia pachetelor IP. În general, sistemele gazda nu transmit datagrame, dar ruterele trebuie sa execute aceasta operatie.
            Pentru a folosi un sistem Linux ca ruter, activati transmisia IP prin stabilirea valorii corecte în fisierul /proc/sys/net/ipv4/ip_forward. Daca fisierul contine valoarea 0, transmisia este dezactivata. În situatia în care fisierul contine valoarea 1, transmisia IP este activata. O comanda cat aplicata fisierului ip_forward indica valoarea curenta din sistemul dumneavoastra:
           
            $ cat /proc/sys/net/ipv4/ip_forward 0

Scrieti valoarea 1 în fisier pentru a activa transmisia:
            [root]# echo "1" > /proc/sys/net/ipv4/ip_forward
            [root]# cat /proc/sys/net/ipv4/ip_forward 1

            Daca intentionati sa va folositi sistemul Linux ca ruter, inserati aceasta comanda în fisierul rc.local pentru a activa transmisia la fiecare încarcare a sistemului de operare.
            Pina la rh7.1 inclusiv ca sa activezi forwarding-ul trebuie pus in /etc/sysconfig/network urmatorul lucru: IPV4_FORWARD=true
            În Red Hat Linux 7.2, puteti edita fisierul /etc/sysctl.conf si modifica valoarea
net. ipv4. ip_forward = 0 în net. ipv4. ip_forward = 1. Alte distributii pot folosi fisiere de
configurare diferite în acelasi scop. Scrierea unei valori direct în fisierul /proc/sys/ net/ipv4/ip_forward este posibila în toate distributiile curente.
            Indiferent de caracterul de ruter sau de sistem gazda al unui calculator, acesta poate executa livrarea finala numai daca se gaseste în aceeasi retea cu sistemul gazda de destinatie. În toate celelalte situatii, sistemul trebuie sa trimita pachetul unui ruter.
            Tabelul de rutare indica sistemului local ruterul caruia trebuie sa i se remita pachetul.

Tabelul de rutare Linux
<top>
            Structura unei adrese IP este compusa dintr-o portiune de retea si o portiune de gazda. Rutarea este orientata spre retele; IP ia decizia cu privire la livrarea directa a pachetului sau transmisia acestuia spre un ruter în functie de portiunea de retea a adresei.
            Când se ia decizia de transmisie a pachetului catre un ruter, IP examineaza tabelul de rutare pentru a determina ruterul care trebuie sa manipuleze pachetul.
            Tabelul de rutare Linux este afisat prin introducerea comenzii route fâra nici un argument în linia de comanda. Deoarece eu prefer numerele de retea în locul numelor de sisteme gazda atunci când analizez un tabel de rutare, voi folosi opliunea -n, care nu permite comenzii route sa converteasca adrese IP în nume de sisteme gazda la afisarea tabelului de rutare. Listingul urmator prezinta un exemplu.

$ route -n
Kernel IP routing table
Destination       Gateway            Genmask            Flags Metric Ref   Use     Iface
172.16.55.0     0.0.0.0               255.255.255.0  U       0            0    0        eth0
172.16.50.0     172.16.55.36     255.255.255.0  UG    0            0    0        eth0
127.0.0.0         0.0.0.0               255.0.0.0          U       0            0    0        10
0.0.0.0             172.16.55.254   0.0.0.0              UG    1            0    0        eth0

            Tabelul de rutare de mai sus contine urmatoarele câmpuri:
            Destination     Reteaua (sau sistemul gazda) de destinatie. In mod normal destinatia este o retea, dar, asa cum veti vedea în discutia despre câmpul Flags, este posibila existenta unei rute specifice unui sistem gazda. Pentru ruta prestabilita, acest câmp contine numai zerouri (0.0.0.0).
            Gateway     Poarta de acces corespunzatoare destinatiei specificate. Daca acest câmp contine numai zerouri (0.0.0.0) sau un asterisc (*), înseamna ca reteaua de destinatie este direct conectata la calculator si ca „poarta" spre reteaua respectiva o constituie interfala de retea a acestui calculator.
            Genmask     Masca de biti aplicata adreselor pentru a se vedea daca acestea corespund adresei de destinatie.
            Flags         Indicatoarele descriu anumite caracteristici ale acestei rute. Valorile posibile ale indicatoarelor sunt urmatoarele:
                    U     Aceasta ruta este activa si operationala.
                    H     Aceasta este o ruta spre un anumit sistem gazda. Nici unele dintre rutele din exemplu nu sunt rute specifice unui sistem gazda, care sunt folosite numai în situatii speciale.
                    G     Aceasta ruta foloseste o poarta externa. Interfelele de retea ale sistemului furnizeaza rute spre retele direct conectate. Toate celelalte rute folosesc porti externe. Relelele conectate direct nu au activat indicatorul G, dar acesta este activat în toate celelalte rute.
                    D     Aceasta ruta a fost adaugata în mod dinamic de catre un protocol de rutare sau de un mesaj de ICMP Redirect. Când un sistem afla despre o ruta prin intermediul unui mesaj ICMP Redirect, adauga ruta la tabelul sau de rutare astfel încât pachetele suplimentare care trebuie sa ajunga la destinatia respectiva sa nu necesite o redirectionare.
                    R     Aceasta ruta a fost reactivata dupa actualizarea de catre un protocol de rutare dinamica. Rutele pot fi configurate ca rute pasive sau statice, chiar si atunci când se foloseste un protocol de rutare dinamica.
                    M     Aceasta ruta a fost modificata de catre un protocol de rutare dinamica.
                    A     Aceasta ruta a fost adaugata în timpul configurarii adresei. Când este definita o adresa pentru o interfata locala folosind comanda ifconfig, o ruta pentru interfata respectiva este adaugata la tabelul de rutare. În practica, indicatorul A nu apare în tabelul de rutare prestabilit.
                    C     Aceasta ruta se gaseste în cache-ul de rutare. Rutele sunt memorate temporar în cache atunci când sunt folosite pentru crearea unei conexiuni. Memoria cache poate fi examinata direct prin rularea comenzii route cu opliunea -c (de exemplu, route -Cn). În practica, indicatorul c nu apare în tabelul de rutare.
                    !     Aceasta ruta a fost marcata ca necorespunzatoare.

            Metric     Acesta este costul de rutare pentru interfata respectiva. În mod normal, acest câmp are valoarea zero pentru rutele spre retelele direct conectate. Rutele spre portile externe prezinta deseori o metrica egala cu 1, desi aceasta nu se întâmpla întotdeauna. Metrica este o valoare arbitrara stabilita de utilizator. Cu cât valoarea metricii este mai ridicata, cu atât ruta este mai ,costisitoare" Si deci mai putin preferata.
            Ref     Indica numarul de referiri la ruta pentru stabilirea unei conexiuni.
            Use     Indica de câte ori ruta respectiva a fost cautata în cache. Aceasta optiune este utila numai la examinarea zonei cache; în modul principal de afisare a tabelului de rutare, prezentat în listingul de mai sus, acest câmp nu este utilizat.
            Iface     Numele interfetei de retea folosite de aceasta ruta. Pentru interfetele de retea Ethernet, numele vor fi etho, ethl, eth2 etc. Pentru interfelele de retea PPP, numele vor fi ppp0, pppl, ppp2 etc.
Cunoscând aceste notiuni privind modul de afisare a tabelului de rutare, sa examinam fiecare linie din tabelul prezentat ca exemplu:
•    Prima linie defineste conexiunea acestui sistem gazda la reteaua Ethernet locala. Pe baza acestei intrari se poate observa ca sistemul gazda este conectat la subreteaua 172.16.55.0 si ca se conecteaza direct la subreteaua respectiva prin interfata eth0.
•    A doua linie reprezinta o ruta statica adaugata de catre administratorul de retea si indica faptul ca sistemul 172.16.55.36 este poarta spre subreteaua 172.16.50.0/24.
•    A treia linie defineste reteaua de auto-identificare si indica faptul ca poarta spre reteaua de auto-identificare este interfata l0.
•     Ultima linie defineste ruta prestabilita, care identifica poarta prestabilita. Daca destinatia unui pachet nu corespunde unei anumite rute din tabelul de rutare, pachetul este trimis portii prestabilite. În sistemul prezentat de noi ca exemplu, exista rute specifice pentru retelele 172.16.55.0, 172.16.50.0 Si 127.0.0.0. Pachetele pentru toate celelalte destinatii sunt trimise ruterului prestabilit.
        Observati ca ambele porti externe sunt conectate la reteaua Ethernet locala 172.15.55.0/24. Daca nu ar fi fost, sistemul local nu ar fi putut sa comunice cu ele si, implicit, nici cu lumea exterioara.
        Rutele sunt introduse într-un tabel într-unul din doua moduri: fie administratorul de sistem le introduce ca rute statice, fie sunt adaugate la tabel de catre un protocol de rutare, ca rute dinamice.
        Un alta tema de studiu o reprezinta si iproute2.
        De exemplu o ruta statica acolo este de forma:

ip route add 172.16.50.0/25 via 172.16.55.36, eventual dev eth0.
ip route show
ip address add 172.16.55.1/24 brd 172.16.55.255 dev eth0
ip address add 172.16.55.2/24 brd 172.16.55.255 dev eth0 label eth0:0
ip address add 172.16.55.3/24 brd 172.16.55.255 dev eth0 label eth0:siinca

label "eth0:siiinca" nu e o greseala. Label-urile pot avea pina la 8 caractere.
ip route add default via 172.16.50.254
Iproute2 e mult mai intuitiv plus ca dispune de o multime de lucruri noi care
se pot face cu acesta (policy routing, tunele, etc).

Definirea rutelor statice
<top>
            Rutele statice sunt definite în fiecare sistem Linux care se conecteaza la o retea TCP/IP. Un tabel de rutare minimal contine o ruta pentru adresa de auto-identificare si o ruta pentru interfata de retea. Fiecare sistem Linux dintr-o relea TCP/IP dispune cel putin de aceste doua rute statice. Cele doua rute din tabelul de rutare prezentat ca exemplu în listingul precedent sunt urmatoarele:

172.16.55.0     0.0.0.0        255.255.255.0     U     0    0     0     eth0
127.0.0.0         0.0.0.0        255.0.0.0             U     0    0     0     10

            Sub nucleul Linux 2.4, aceste rute sunt create prin intermediul comenzilor ifconfig care configureaza interfelele de relea.             Sistemele care folosesc nuclee mai vechi creeaza aceste rute cu ajutorul unor comenzi route specifice. De exemplu:

route add -net 172.16.55.0 netmask 255.255.255.0 dev eth0
route add -net 127.0.0.0     netmask 255.0.0.0         dev 10

            Chiar si în sistemele vechi, nu trebuie sa introduceti personal aceste comenzi. Comenzile respective sunt stocate într-unul din scripturile de pornire incluse în sistem.

Comanda route
<top>
            Rutele statice suplimentare sunt definite de catre comanda route si permit oricui sa afiseze tabelul de rutare; de asemenea, permit utilizatorului radacina sa adauge, respectiv sa elimine rute din tabel. Administratorul de sistem a adaugat aceasta ruta statica la tabelul de rutare prezentat ca exemplu în listingul precedent:

172.16.50.0 172.16.55.36    255.255.255.0 UG    0 0 8 eth0

          Instructiunea route care creeaza aceasta ruta este urmatoarea:

route add -net 172.16.50.0 netmask 255.255.255.0 gw 172.16.55.36

            Prin examinarea comenzii anterioare puteti afla aproape toate informatiile de care aveti nevoie privind sintaxa comenzii route. Toate comenzile route încep cu o optiune care defineste ,actiunea" comenzii, care este add (adaugare) sau delete (stergere). Toate comenzile prezentate ca exemplu adauga rute la tabelul de rutare. Pentru a modifica o ruta, mai întâi stergeti-o si apoi adaugati-o din nou, cu modificarile necesare.
            Opliunea -net precizeaza comenzii route ca se doreste adaugarea unei rute de relea. Alternativa este -host pentru o ruta specifica unui sistem gazda, dar aceasta optiune este rareori folosita, deoarece majoritatea rutelor sunt rute de retea.
            Optiunea -net este urmata de adresa de destinatie si de masca de retea folosita pentru determinarea portiunii de retea, respectiv a portiunii de gazda a adresei. Masca de retea trebuie precedata de cuvântul cheie netmask.
            Toate comenzile route prezentate ca exemplu se încheie cu o poarta externa sau cu un nume de dispozitiv local. La utilizarea unei porti externe, aceasta este definita prin intermediul optiunii gw si al adresei IP a portii respective. Când se foloseste numele dispozitivului de interfata, acesta este de obicei precedat de cuvântul cheie dev, desi acest lucru nu este obligatoriu. Numele interfetei de retea este inclus într-o instructiune route care defineste conexiunea dispozitivului cu reteaua locala. In alte instructiuni route, numele interfelei este optional. Folositi numele dispozitivului în toate instrucliunile route atunci când aveti mai multe interfele, pentru a va asigura ca ruta foloseste interfala scontata.

Definirea rutei prestabilite
<top>
            Pâna acum, am discutat despre toate rutele din tabelul de rutare prezentat ca exemplu, cu exceptia rutei prestabilite. Tabelul prezentat contine o ruta prestabilita care specifica sistemul 172.16.55.254 ca fiind ruterul prestabilit:

0.0.0.0    172.16.55.254 0.0.0.0 UG 1    0    17    eth0

Pentru definirea acestei rute, introduceti urmatoarea comanda:

route add default gw 172.16.55.254

            Aceasta comanda este asemanatoare cu instructiunea route prezentata anterior, cu exceptia faptului ca, în locul relelei de destinatie, este folosit cuvântul cheie default.
            Prezenta acestui cuvânt cheie defineste ruta prestabilita.
            Majoritatea sistemelor Linux conectate la un internet TCP/IP dispun de o ruta statica prestabilita. Deoarece aceasta ruta este atât de comuna, este putin probabil ca va trebui sa introduceti o comanda route pentru a o defini. Toate variantele de Linux cu care am lucrat solicita adresa ruterului prestabilit în faza initiala de instalare. Furnizati-o la momentul respectiv. Sistemul stocheaza valoarea si apoi o foloseste pentru a defini adresa portii prestabilite în timpul încarcarii. De exemplu, Red Hat stocheaza adresa portii prestabilite în fisierul /etc/sysconfig/network.
            Pentru majoritatea serverelor Linux, tot ce aveti de fâcut este sa definiti ruta prestabilita, întrucât cele mai multe servere sunt sisteme gazda care depind de un singur ruter extern pentru serviciul de rutare. Ocazional, însa, un server Linux poate fi utilizat ca ruter pentru o retea de mici dimensiuni. In acest caz, este necesara rularea unui protocol de rutare, asa cum vom vedea în continuare.

Utilizarea rutarii dinamice
<top>
             Tabelele de rutare statica au eficienta maxima atunci când numarul ruterelor este limitat. Daca reteaua dispune de un singur ruter, configuratia corecta se obtine prin utilizarea unei rute statice prestabilite. Protocoalele de rutare dinamica se folosesc atunci când mediul de rutare al unei retele este variabil sau de o natura mai complexa (de exemplu, atunci când exista mai multe rutere care pot transmite la aceeasi destinatie).

Protocoale de rutare
<top>
            Rutarea si protocoalele de rutare nu reprezinta notiuni identice. Toate sistemele Linux pot lua decizii de rutare, dar foarte putine ruleaza protocoale de rutare. Aceste protocoale executata doua operatii: selecteaza ruta optima spre o destinatie si apoi comunica ruta activa celorlalte rutere din retea. Astfel, un protocol de rutare reprezinta un procedeu de definire si diseminare a rutelor.
            Exista numeroase protocoale de rutare diferite, iar daca tinem cont de faptul ca sistemele Linux nu sunt folosite în mod normal ca rutere, numarul unor asemenea protocoale disponibile pentru sistemele Linux este surprinzator de mare. Protocoalele se realizeaza prin metrica folosita pentru determinarea rutei optime si prin procedura
utilizata la distribuirea informatiilor de rutare.
            Protocoalele de rutare se clasifica în protocoale interioare si protocoale exterioare.
            Protocoalele interioare sunt utilizate în interiorul unui domeniu de rutare, iar
protocoalele exeterioare se utilizeaza pentru schimbul de informatii de rutare între domeniile de rutare. In cadrul unei retele de întreprindere, se foloseste un protocol de rutare interior. Este posibil sa se utilizeze un protocol de rutare exterior între reteaua dumneavoastra si furnizorul de servicii Internet, dar chiar si aceasta situatie este improbabila. Majoritatea retelelor de firma sunt localizate în interiorul domeniului de rutare al furnizorului de servicii Internet, si ca atare se folosesc un protocol de rutare interior pentru comunicatiile cu acesta. In continuare vom prezenta trei protocoale interioare, în speta Routing Information Protocol (RIP), Routing Information Protocol versiunea 2 (RIPv2) si Open Shortest Path First (OSPF), repectiv un protocol exterior, Border Gateway Protocol (BGP).

Border Gateway Protocol (BGP)
<top>
            BGP este singurul protocol de rutare exterior utilizat pe scara larga. BGP implenteaza rutarea controlata de politici, care permite definirea unor ratiuni de natura organizationala sau politica pentru selectarea unei rute. Metricile de rutare folosite în cadrul unor domenii de rutare diferite nu pot fi comparate în mod direct, deoarece nu se poate cunoaste exactitate modul de determinare a metricilor în interiorul unui domeniu de rutare. Este posibil sa nu se cunoasca nici macar protocoalele de rutare interioare folosite.
            In loc de a acorda încredere procesului tehnic folosit la selectarea rutelor, se acorda încredere procesului tehnic la selectarea rutelor, se acorda increderere organizatiei  care face cunoscute rutele respective. Se poate proceda astfel daca reputatia institutiei respective este indiscutabila sau daca exista un acord de lucru care prevede acordarea de credibilitate rutelor sale. Aceasta reprezinta esenta rutarii controlate de politici.
            BGP este un protocol cu vector de cale (path-vector protocol). Vectorul de cale furnizeaza o lista de tip „cap la cap" a fiecarui domeniu de rutare situat de-a lungul rutei, ceea ce permite ea unei decizii privind credibilitatea anunturilor provenite din domeniile respective. Probabil ca nu veti folosi BGP decât daca furnizorul de servicii Internet va solicita aceasta. Protocoalele exterioare sunt folosite cu precadere extern, iar pentru o utilizare performanta a acestora este necesar un acord al ambelor parti cu privire la folosirea protocolului. Daca funizorul de servicii va solicita sa utilizati BGP, puteti fi sigur ca acesta cunoaste modul de configurare a protocolului respectiv. Protocoalele pe care le folositi în cadrul  propriei dumneavoastra retele sunt protocoalele de rutare interioare.

Routing Information Protocol (RIP)
<top>
            RIP este un protocol de rutare interior frecvent utilizat. Este inclus ca parte componenta a sistemului de operare în numeroase sisteme Unix si Linux, precum si în pachetul RRAS din Windows NT/2000. RIP este instalat în numeroase sisteme si este usor de configurat si utilizat.
            RIP defineste ruta optima ca fiind ruta cu cost minim, în spela ruta cu metrica de rutare minima. Metrica de rutare este un numar arbitrar, cuprins între 1 si 15, care reprezinta numarul portilor prin care trebuie sa treaca traficul pentru a ajunge la destinalie. RIP denumeste fiecare ruter hop, iar metrica este numarul de hopuri. Ruta optima spre o destinatie este ruta care trece prin cele mai putine rutere. Acest procedeu pentru determinarea celei mai bune rute se numeste algoritm cu vector de distanta (distance-vector algorithm).
            La lansarea în executie a protocolului RIP, acesta difuzeaza o cerere de informatii de rutare. Un ruter care ruleaza RIP raspunde la cerere prin trimiterea unui pachet de actualizare care contine adresele de destinatie si metricile asociate, preluate din tabelul de rutare propriu. In afara de raspunsurile la cereri, ruterele care utilizeaza RIP lanseaza pachete de actualizare la fiecare 30 de secunde. Daca un ruter înceteaza sa mai emita actualizari timp de 180 de secunde, celelalte rutere din retea vor presupune ca acesta este inactiv si vor sterge toate rutele care trec prin ruterul respectiv.
RIP prelucreaza un pachet de actualizare în modul urmator:
• Daca pachetul contine rute noi, care nu se gasesc în tabelul de rutare, acestea vor fi adaugate.
• Daca pachetul contine rute de un cost mai mic decât al unor rute similare din tabelul de rutare existent, rutele vechi vor fi sterse si se vor folosi noile rute. Costul unei rute noi este determinat prin adaugarea costului necesar ajungerii la ruterul care a trimis actualizarea la metrica inclusa în pachetul de actualizare.
• Daca pachetul contine rute cu un cost egal cu 15, rutele respective vor fi sterse din tabelul de rutare daca actualizarea provine de la poarta folosita pentru acele rute. De exemplu, daca tabelul de rutare contine o ruta spre subreteaua 172.16.50.0 prin poarta 172.16.55.36 si primeste o actualizare RIP de la 172.16.55.36 cu un cost egal cu 15 pentru ruta spre 172.16.50.0, sistemul dumneavoastra va sterge ruta respectiva.
            RIP este utilizat de mult timp si îsi arata vârsta. Retelele de dimensiuni foarte mari nu pot folosi RIP, deoarece ruta cea mai lunga pe care o permite numara 15 hopuri.
            Poate ca acest numar este suficient pentru reteaua dumneavoastra, dar este total insuficient pentru retele nationale de mari dimensiuni. De asemenea, poate fi necesar un interval de timp destul de mare pentru reflectarea starii curente a retelei în tabelul de rutare, deoarece RIP asteapta 180 de secunde înainte de stergerea rutelor provenite de la un ruter inactiv. Aceasta situatie poate fi înrautatita de problema ,,numaratorii la infinit" .

RIP versiunea 2 (RIPv2)
<top>
            RIPv2 îmbunatateste pachetul RIP original prin adaugarea unui câmp masca de retea si a unui câmp care contine adresa hopului urmator. Masca de retea este o masca de biti folosita la determinarea retelei de destinatie. Trimiterea mastii cu adresa de destinatie în pachetul de actualizare a rutarii reprezinta o componenta esentiala a adreselor IP fara clase.
            Pentru a face disponibile mastile de retea la nivel global, acestea trebuie distribuite altor sisteme. Pentru aceasta se foloseste protocolul de rutare, iar RIPv2 adauga functionalitatea respectiva la RIP.
            Câmpul „adresa hopului urmator" furnizeaza adresa portii. În RIP, sunt furnizate numai adresa de destinatie si metrica. Poarta este întotdeauna considerata ca fiind ruterul care trimite pachetul de actualizare. Câmpul cu adresa hopului urmator furnizeaza adresa portii, ceea ce permite ca sistemul care trimite pachetul de actualizare sa fie diferit de poarta care va manipula ruta. Astfel, sistemele compatibile RIPv2 pot furniza actualizari pentru ruterele care nu utilizeaza acest protocol. Daca adresa hopului urmator este 0.0.0.0, ruterul care trimite actualizarea este considerat ca fiind poarta rutei respective.

Protocolul Open Shortest Path First (OSPF)
<top>
            OSPF este foarte diferit de RIP. Un ruter care foloseste RIP trimite vecinilor sai informatii despre întreaga retea. Un ruter care utilizeaza OSPF inunda reteaua cu informatii despre vecinii sai. Prin inundare se întelege faptul ca ruterul trimite actualizarea de la fiecare port de retea si ca fiecare ruter care primeste actualizarea o trimite mai departe la fiecare port, cu exceptia portului de unde a primit-o. Inundarea asigura o diseminare rapida a a informatiilor de rutare în întreaga retea.
            OSPF se numeste protocol cu starea legaturii (link-state protocol) întrucât creeaza un grafi al starii tuturor legaturilor din relea. Fiecare ruter OSPF îsi creeaza graful folosind informatiile despre toate ruterele si vecinii acestora, informatii distribuite în întreaga retea prin intermediul procesului de inundare. Fiecare graf este unic, deoarece fiecare ruter creeaza graful folosindu-se pe sine ca radacina a arborelui. Graful este construit utilizându-se algoritmul Dijkstra Shortest Path First, de unde si numele protocolului. Algoritmul foloseste urmatorul proces de constructie a grafului:
1.Sistemul începe prin a se auto-instala ca radacina a grafului, cu un cost egal cu 0.
2.Apoi se instaleaza vecinii sistemului care tocmai a fost adaugat la graf. Costul necesar ajungerii la vecinii respectivi este calculat ca fiind costul ajungerii la sistemul recent instalat, la care se adauga costul anunlat de sistem pentru ajungerea la vecini.
3. Sistemul selecteaza calea de cost minim pentru fiecare destinatie. Apoi repeta etapele 2 si 3 pentru fiecare sistem despre care detine informatii.
            Este clar ca procesul de constructie a unui graf cu starea legaturilor la fiecare modificare a unei rute creeaza o suprasarcina pentru ruter. Din acest motiv, OSPF împarte domeniul de rutare în componente mai mici, mai usor de controlat.                 Domeniul de rutare în totalitatea sa se numeste sistem autonom, iar componentele se numesc suprafete.
            O suprafala speciala, numita suprafata coloanei vertebrale, este definita pentru a interconecta toate suprafetele din sistemul autonom. Ruterele din interiorul unei suprafete dispun numai de cunostinte referitoare la suprafala respectiva si, ca atare, pot crea un graf al sistemelor din suprafata în cauza.
            OSPF reprezinta un sistem cu mult mai complex decât RIP, dar este mai adecvat pentru relele de mari dimensiuni.                     Totusi, OSPF nu este întotdeauna necesar pentru o retea de întreprindere si este posibil sa nu fie util într-o retea mica, unde pe post de rutere sunt folosite servere Linux.

Rutare cu programul Zebra
<top>
            Zebra este un pachet software de rutare care pune la dispozitie suport pentru RIP, RIPv2, OSPF si BGP. De asemenea, Zebra asigura suport pentru rutarea IPv6 atât cu protocolul RIPng, cât si cu protocolul OSPFv6.
            Programele de rutare prezinta atât aspecte interioare, cât si exterioare. Din punct de vedere exterior, programele de rutare ruleaza un protocol pentru schimbul informaliilor de rutare cu ruterele externe. Ca aspect interior, programele de rutare prelucreaza informatiile preluate de la protocol, selecteaza rutele optime si actualizeaza tabelul de rutare al nucleului.                             Complexitatea acestui proces intern creste daca se utilizeaza mai. multe protocoale, deoarece este posibil ca un ruter sa primeasca rute spre aceeasi destinatie de la protocoale de rutare diferite. Fiecare protocol foloseste propria sa metrica pentru selectarea rutei optime. Daca fiecare protocol ar actualiza independent tabelul de rutare, s-ar instaura haosul. Pentru a accepta utilizarea de protocoale multiple (mai ales a protocoalelor de rutare exterioare), Zebra ofera o modalitate de comparatie între metricile incompatibile si de selectare a rutei optime. Pentru aceasta foloseste o valoare pe care o numeste distanta, care 1 reprezinta un numar arbitrar, cuprins între 0 si 255. Cu cât valoarea distantei aferente protocolului care furnizeaza ruta este mai ridicata, cu atât ruta este mai putin preferata.
            Fiecarui protocol i se repartizeaza o distanta prestabilita, valoare care poate fi redefinita la configurare.
Zebra foloseste o arhitectura modulara, cu programe separate care executa diferite operatii de rutare. In momentul scrierii acestor rânduri, suita Zebra include urmatoarele programe cheie:

zebra     zebra este utilitarul de gestiune a rutarii. Acesta actualizeaza tabelul de rutare al nucleului cu rutele primite de la diversele protocoale de rutare. Toate protocoalele actualizeaza tabelul prin intermediul programului zebra de gestiune a rutarii.
ripd       ripd furnizeaza protocoalele de rutare RIP si RIPv2.
ospfd    ospfd furnizeaza protocolul de rutare OSPF.
bgpd     bgpd furnizeaza protocolul de rutare BGP.
vtysh    deoarece fiecare protocol de rutare si programul de gestiune zebra sunt configurate în fisiere separate, procesul de configurare se poate dovedi complex. vtysh este o interfata de terminal virtual, proiectata pentru întretinerea configuratiei ruterului.
ripngd   ripngd furnizeaza protocolul RIPng în vederea utilizarii în relelele IPv6.
ospf6d  ospf6d furnizeaza protocolul de rutare OSPFv6 în vederea utilizarii în retelele IPv6.

            Aceasta arhitectura modulara este extensibila prin însasi natura sa. Se poate adauga un nou protocol de rutare prin crearea unui nou daemon pentru protocol si proiectarea acestui daemon astfel încât sa interactioneze cu programul zebra de gestiune a rutarii. De asemenea, implementarea daemonului de protocol este simplificata, deoarece zebra manipuleaza functiile interne pentru noul daemon. Noul program va trebui sa se ocupe numai de functiile externe ale protocolului.

Fisierul zebra.conf
<top>
            Utilitarul de gestiune a rutarii zebra este obligatoriu daca doriti sa folositi oricare dintre programele daemon de rutare Zebra. zebra administreaza tabelul de rutare al nucleului, întretine lista cu interfetele de retea, defineste rutele statice si gestioneaza partajarea informatiilor între diferitele protocoale de rutare.
            Programul zebra este configurat prin intermediul fisierului zebra.conf. Listingul de mai jos prezinta un exemplu de fisier zebra.conf pentru un sistem Linux care foloseste doua interfele Ethernet:

Un exemplu de fisier zebra.conf

! The hostname of this router
hostname subnet60gw
! The password required for vtysh access password Wats?Watt?
! The password required for privileged vtysh commands
enable password CHLL1ns
! interfata eth0
interface eth0
  ip address 172.16.60.1/24
! interfata eth1
interface eth1
  ip address 172.16.1.9/24

            Comentariile din diferitele fisiere de configurare Zebra încep cu un semn al exclamarii (!). Comentariile din listingul de mai sus constituie explicatii pentru comenzile imediat urmatoare.
            Fisierul prezentat ca exemplu în listingul 7.5 este mai mare Si mai complex decât majoritatea fisierelor de acest tip.                     Fisierul respectiv a fost astfel conceput încât sa furnizeze o gama completa de exemple, dar merita sa retineti ca, probabil, fisierul dumneavoastra zebra.conf va fi de dimensiuni mai reduse.
            Comanda hostname defineste numele sistemului gazda al ruterului. Acesta este numele care va fi utilizat în schimburile dintre protocoalele de rutare în care se folosesc numele ruterelor. Deseori, fisierele zebra.conf încep cu aceasta comanda.
            Apoi au fost inserate doua comenzi care definesc parolele. Comanda password este necesara daca doriti sa folositi interfala vtysh. Daca aceasta parola nu este definita, interfala vtysh este dezactivata pentru zebra. A doua parola furnizeaza interfetei vtysh un control mai strict asupra configurarii. in absenta parolei definite prin intermediul comenzii enable password, interfata vtysh se poate utiliza numai pentru obtinerea de informatii de la programul zebra prin intermediul interogarilor. Cu aceasta a doua parola, configuratia programului zebra poate fi controlata de la interfala.
            Prima comanda interface defineste configuralia dispozitivului eth0. Comanda contine doua clauze: ip address, care defineste adresa interfelei, respectiv multicast, care activeaza indicatorul de difuzare pe grupuri pentru interfata. Indicatorul de difuzare pe grupuri poate fi utilizat daca v-ati propus sa folositi un protocol de difuzare pe grupuri, precum RIPv2, pe aceasta interfata. A doua comanda interface este foarte asemanatoare cu prima, cu deosebirea ca nu activeaza indicatorul de difuzare pe grupuri.
            Comanda log file defineste fisierul în care programul zebra îsi va scrie informatiile de jurnal. In listingul de mai sus, jurnalul este scris în fisierul lvar/log/zebra.log. Alternativele la consemnarea într-un fisier specific rezida în utilizarea comenzii log stdout pentru consemnarea la dispozitivul de iesire standard, respectiv a comenzii log syslog pentru consemnarea prin intermediul programului syslogd.
            Ultima comanda din listing  defineste o ruta statica. Desi rutele statice pot fi distribuite de protocoalele configurate în alte fisiere, precum ripd.conf, acestea pot fi definite si în fisierul zebra. conf. Cuvintele cheie ip route sunt urmate de destinatia rutei si de ruterul folosit pentru ajungerea la destinatia respectiva. In listingul de mai sus, destinatia este reteaua cu numarul 172.16.50.0.             Se foloseste o masca de adrese pe 24 de biti pentru a compara adresele cu destinatia. Poarta rutei este 172.16.1.50.                 Evident, acesta nu este decât un exemplu. Probabil ca nu veti utiliza rute statice la rularea protocoalelor de rutare.
            Doua linii din fisierul zebra. conf prezentat în listingul precedent definesc parolele pentru interfata vtysh. Ca atare, acest fisier trebuie sa fie accesibil numai administratorilor. Inainte de a trece la configurarea protocoalelor individuale, sa examinam modul de utilizare a acestor parole pentru interfala vtysh.

Rularea programului ospfd
<top>
            In aceasta sectiune, un ruter este configurat sa trimita pachete RIPv2 într-o subretea si anunturi OSPF cu starea legaturii într-o alta subretea, pe care o partajeaza cu alte rutere. In aceasta configuratie, am creat un fisier zebra.conf în vederea configurarii utilitarului de gestiune a rutarii, un fisier ripd.conf pentru a configura daemonul protocolului RIPv2 si un fisier ospfd.conf pentru configurarea daemonului protocolului OSPF.

Listingul A Un fisier zebra.conf pentru un ruter RIP/OSPF
hostname subnet60gw
password Wats?Watt?
enable password CHLL1ns
log file /var/log/zebra.log
!
interface eth0
ip address 172.16.60.1/24
multicast
!
interface ethl
ip address 172.16.1.9/24
!

Fisierul ripd.conf folosit pentru aceasta configuralie este prezentat în listingul B.

Listingul B Un fisier ripd.conf pentru un ruter RIP/OSPF
! Enable RIPV2
! Advertise routes learned from OSPF with a cost of 5
! Use simple authentication for updates
password RIPItup
enable password RaceitUP
!
interface eth0
ip rip authentication string EZdozIt
!
router rip
redistribute ospf metric 5
network eth0
!
            Mai întâi, am plasat parole în acest fisier, pentru a permite intretinerea configuratiei ruterului RIP prin intermediul interfelei vtysh.
            In al doilea rând, ca ruter, acesta trimite pachete de actualizare a rutarii. Ca atare, folosim o clauza network sub instructiunea router rip pentru a specifica reteaua în care vor fi distribuite pachetele de actualizare a rutarii. Asa cum s-a aratat anterior, reteaua poate fi definita printr-un nume de interfata sau printr-o adresa IP. In listingul B, reteaua este definita printr-un nume de interfala.
            Cea de-a treia diferenta consta în faptul ca aceasta configuratie conline o clauza redist ribute, care defineste rutele aflate de la OSPF care vor fi comunicate vecinilor RIP si costul RIP care va fi atribuit acestor rute. Rutele aflate de la OSPF nu au un cost RIP valid. Metrica definita în clauza redistribute este folosita ca metrica prestabilita când rutele OSPF sunt comunicate vecinilor RIP. Clauza redistribute din listingul B indica protocolului RIP sa comunice rutele aflate de la OSPF cu un cost egal cu 5. Evident, pentru ca RIP sa afle rute de la OSPF, este necesar ca programul ospfd sa fie configurat în mod adecvat.
Listingul C prezinta un posibil fisier de configurare ospfd.conf pentru acest ruter.

Listingul C Un exemplu de fisier ospfd.conf
! Enable OSPF; connect to the backbone area
! Use simple authentication
password Mutt-N-Jeff
enable password SURtest
!
interface ethl
ip ospf authentication-key UTrustME
ip ospf priority 5
!
router ospf
ospf router-id 172.16.1.9
network 172.16.1.0/24 area 0
!
            Instructiunea interface stabileste doi parametri OSPF. Clauza ip ospf authentication-key defineste sirul în format text simplu pentru identificarea anunturilor OSPF valide. Asemanator sirului de text simplu folosit pentru autentificarea RIPv2, acest sir este destinat prevenirii unor actualizari accidentale provenite de la sisteme cu erori de configurare, nefiind conceput ca masura de securitate. Pentru o autentificare mai puternica, OSPF recunoaste MD5.
            Clauza ip ospf priority defineste numarul de prioritate pe care îl foloseste acest sistem când suprafala alege un ruter desemnat. In listingul C, numarul de prioritate este 5; valorile posibile sunt cuprinse între 0 si 255. Cu cât acest numar este mai mare, cu atât este mai pulin probabil ca ruterul respectiv sa fie ales ca ruter desemnat. Atribuiti ruterului dumneavoastra cel mai puternic numarul de prioritate cel mai redus.
            Un ruter desemnat este folosit pentru reducerea dimensiunii bazei de date cu starea legaturilor si implicit a complexitalii calculului grafului Dijkstra al suprafetei.
             Ruterul desemnat trateaza toate celelalte rutere din suprafala ca vecini, dar toate celelalte rutere vor trata numai ruterul desemnat ca vecin.
            Pentru a înlelege cum contribuie procedeul respectiv la reducerea dimensiunii bazei de date cu starile legaturilor, gânditi-va la o retea compusa din cinci rutere. În absenta unui ruter desemnat, toate cele cinci rutere emit anunturi catre patru vecini, deci în total vor exista 20 de vecini în baza de date. Cu un ruter desemnat, numai ruterul respectiv este cel care emite anunturi spre patru vecini. Celelalte patru rutere emit anunturi spre un singur vecin, deci în baza de date vor exista în total opt vecini. Cu cât reteaua este mai mare, cu atât este mai important sa utilizali un ruter desemnat.
            Instructiunea router ospf activeaza protocolul OSPF. În listingul C, instructiunea router ospf contine doua clauze.
            Clauza ospf router-id defineste identificatorul de ruter folosit pentru anunturile OSPF. În mod normal, acesta reprezinta adresa primara a uneia dintre interfetele folosite pentru OSPF. In ruterul prezentat ca exemplu, pentru OSPF se foloseste o singura interfata de retea, deci adresa interfetei respective este utilizata ca identificator de ruter.
            Clauza network identifica reteaua prin intermediul careia vor avea loc schimburile de rute OSPF. In fisierul ospfdf.conf, reteaua din clauza network este întotdeauna definita de o pereche adresa IP-masca de retea. De asemenea, clauza network identifica suprafata din care face parte reteaua. Amintiti-va ca OSPF împarte sistemul autonom în suprafete, iar fiecare ruter OSPF trebuie sa se conecteze la o suprafata. Asa cum s-a mentionat anterior, suprafata care interconecteaza toate celelalte suprafete din interiorul domeniului de rutare se numeste suprafata coloana vertebrala. Numarul atribuit suprafetei coloana vertebrala este 0. Ca atare, clauza network din listingul 7.13 specifica faptul ca acest ruter este conectat la suprafala coloana vertebrala.
            O configuralie OSPF simpla, cum este cea prezentata în listingul C, este adecvata pentru orice sistem Linux care trebuie sa ruleze OSPF. Multe din informatiile de configurare vor proveni de la proiectantul retelei, care defineste ierarhia de rutare.
            Suprafala la care va conectati, tipul de autentificare folosit, parola de autentificare si numarul de prioritate al sistemului dumneavoastra reprezinta decizii de proiectare care vor fi luate înainte ca sistemul dumneavoastra sa înceapa macar sa ruleze OSPF.

Bibliografie:    Graig Hunt-Linux Servere de retea

Lucare practica

Scopul lucrarii
<top>
        Prezenta lucrare isi propune sa prezinte, in scop didactic instalarea, configurarea si utilizarea programului de rutare quagga

Modu de realizare
<top>
        In acest scop am alcatuit o retea formata din trei calculatoare dotate fiecare cu cate doua placi de retea conectate intre ele cu ajutorul a 3 cabluri UTP de tip cross-over.
        Fiecare calculator are suplimentar configurata inca o interfata generica dummy0 spre cate o retea locala. Ne propunem folosind programul de rutare quagga sa asiguram redundata  acestor trei interfete generice.
    Dispunerea claculatoarelor este in forma de triunghi legate intre ele cu ajutorul a trei cabluri UTP de tip crossover.
 arhitectura

Configurare router R1
<top>
Denumire router: intra.net
System de operare: Fedora Core1

1)Configuare interfete
Routerul R1 dispune de doua interfete tip Ethernet (eth0, eth1) plus o interfata virtuala  dummy0

Placi retea Ethernet:
Interfata eth0: RTL-8029(AS)
Interfata eth1: RTL-8029(AS)

Fisierul /etc/sysconfig/network-scripts/ifcfg-eth0 este de forma:

# Realtek|RTL-8029(AS)
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.0.0.1
NETMASK=255.255.255.252
HWADDR=00:E0:29:48:B2:5E
USERCTL=no
PEERDNS=no
TYPE=Ethernet

Fisierul /etc/sysconfig/network-scripts/ifcfg-eth1 este de forma:

# Realtek|RTL-8029(AS)
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
#IPADDR=192.168.9.10
IPADDR=10.0.0.10
#NETMASK=255.255.255.0
NETMASK=255.255.255.252
NETWORK=10.0.0.8
TYPE=Ethernet
#GATEWAY=192.168.1.31
HWADDR=00:E0:7D:7D:20:FA
USERCTL=no
PEERDNS=no

Se creaza un fisier /etc/sysconfig/network-scripts/ifcfg-dummy0 cu drepturi identice cu celelalte doua si cu urmatorul continut:

# Realtek|RTL-8139/8139C/8139C+
DEVICE=dummy0
IPADDR=10.0.1.1
NETMASK=255.255.255.0
BROADCAST=10.0.1.255
NETWORK=10.0.1.0
ONBOOT=yes
BOOTPROTO=static

In fisierul /etc/modprobe.conf se adauga linia:
    Alias dummy0 dummy
Acesta este de forma:

include /etc/modprobe.conf.dist
alias eth0 8139too
alias dummy0 dummy

        Activam interfata dummy0:
            #ifup dummy0

        Se activeaza forwardarea prin setarea variblei net.ipv4.ip_forward din fisierul /etc/sysctl.conf pe valoarea 1
        Acesta va fi de forma urmatoare:

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

        Se tasteaza de la consola comanda:
        #sysctl –p

        In fisierul /etc/sysconfig/network se adauga linia: NOZEROCONF=yes
        Acesta va avea forma urmatoare:

NETWORKING=yes
HOSTNAME=intra.net
NOZEROCONF=yes

        Se reporneste serviciul de retea:
        #service network restart

Verificare interfete:
dummy0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00
                  inet addr:10.0.1.1  Bcast:10.0.1.255  Mask:255.255.255.0
eth0           Link encap:Ethernet  HWaddr 00:C0:26:21:56:DA
                  inet addr:10.0.0.1  Bcast:10.0.0.3  Mask:255.255.255.252
eth1           Link encap:Ethernet  HWaddr 00:E0:7D:7D:20:FA
                  inet addr:10.0.0.10  Bcast:10.0.0.11  Mask:255.255.255.252
lo               Link encap:Local Loopback
                  inet addr:127.0.0.1  Mask:255.0.0.0

2)Instalare si configurarare program quagga

      Se instaleaza pachetul quagga, pachet ce vine implicit cu kitul de Fedora (quagga-0.96.3-1).
#rpm –I quagga-0.96.3-1.rpm
     Configuram fisierul /etc/quagga/zebra.conf de forma:
hostname intra.net
password xxx

        Creem un fisier /etc/quagga/ospfd.conf  cu un continut  identic (inclusive drepturi) cu al celui precedent
        Pornim serviciul ospfd dupa care zebra (ATENTIE! Aceasta ordine este obligatorie la pornire precum si la oprire!!!)
#service ospfd start
#service zebra start

Verificam ca acestea sunt pornite:
[root@intra root]# ps ax | grep zebra
 6661 ?        S      0:00 /usr/sbin/zebra -d -A 127.0.0.1
 6665 pts/2    S      0:00 grep zebra
[root@intra root]# ps ax | grep ospf
 6559 ?        S      0:00 /usr/sbin/ospfd -d -A 127.0.0.1
 6667 pts/2    S      0:00 grep ospf
[root@intra root]# ps ax | grep ospf

Configuram ospfd_ul:
[root@intra root]# telnet localhost 2604
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is quagga (version 0.96.3).
Copyright 1996-2002 Kunihiro Ishiguro.
User Access Verification
Password:
intra.net> enable
intra.net# conf t
intra.net(config)# router ospf
intra.net(config-router)# ospf router-id 10.0.1.1
intra.net(config-router)# redistribute connected
intra.net(config-router)# network 10.0.0.0/30 area 0
intra.net(config-router)# network 10.0.0.8/30 area 0
intra.net(config-router)# (aici este combinatia de taste CTRL+Z)
intra.net# wr mem
Configuration saved to /etc/quagga/ospfd.conf
intra.net# exit
Connection closed by foreign host.
[root@intra root]#

Fisisierul /etc/quagga/ospfd.conf va fi de forma:

!
! Zebra configuration saved from vty
!   2004/11/30 17:28:18
!
hostname intra.net
password xxx
!
!
!
interface dummy0
!
interface eth0
!
interface eth1
!
interface lo
!
router ospf
 ospf router-id 10.0.1.1
 redistribute connected
 network 10.0.0.0/30 area 0.0.0.0
 network 10.0.0.8/30 area 0.0.0.0
!
line vty
!

Repornim ospf_ul si zebra (atentie la ordine!)
#service zebra stop
#service ospf stop
#service ospf start
#service zebra start

Configurare router R2
<top>
Denumire router: gw1
System de operare: Fedora Core1

1)Configuare interfete
Routerul R2 dispune de doua interfete tip Ethernet (eth0, eth1) plus o interfata virtuala  dummy0

Placi retea Ethernet:
Interfata eth0: RTL-8139/8139C/8139C+
Interfata eth1: RTL-8139/8139C/8139C+

Fisierul /etc/sysconfig/network-scripts/ifcfg-eth0 este de forma:

# Realtek|RTL-8139/8139C/8139C+
DEVICE=eth0
BOOTPROTO=none
BROADCAST=10.0.0.7
HWADDR=00:A0:D2:1C:55:03
IPADDR=10.0.0.5
NETMASK=255.255.255.252
NETWORK=10.0.0.4
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
PEERDNS=no

Fisierul /etc/sysconfig/network-scripts/ifcfg-eth1 este de forma:

# Realtek|RTL-8139/8139C/8139C+
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.0.0.2
NETMASK=255.255.255.252
HWADDR=00:00:21:E5:AF:2D
TYPE=Ethernet
USERCTL=no
PEERDNS=no

Se creaza un fisier /etc/sysconfig/network-scripts/ifcfg-dummy0 cu drepturi identice cu celelalte doua si cu urmatorul continut:

# Realtek|RTL-8139/8139C/8139C+
DEVICE=dummy0
IPADDR=10.0.2.2
NETMASK=255.255.255.0
BROADCAST=10.0.2.255
NETWORK=10.0.2.0
ONBOOT=yes
BOOTPROTO=static

In fisierul /etc/modprobe.conf se adauga linia:
    Alias dummy0 dummy

Acesta este de forma:

include /etc/modprobe.conf.dist
alias eth0 8139too
alias dummy0 dummy

        Se activeaza interfata dummy0:
#ifup dummy0
        Se activeaza forwardarea prin setarea variblei net.ipv4.ip_forward din fisierul /etc/sysctl.conf pe valoarea 1
Acesta va fi de forma urmatoare:

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

Se tasteaza de la consola comanda:
#sysctl –p

In fisierul /etc/sysconfig/network se adauga linia: NOZEROCONF=yes
Acesta va avea forma urmatoare:

NETWORKING=yes
HOSTNAME=gw1
NOZEROCONF=yes

Se reporneste serviciul de retea:
#service network restart

Verificare interfete:
masina gw1 (router_ul1)
dummy0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00
                   inet addr:10.0.2.2  Bcast:10.0.2.255  Mask:255.255.255.0
eth0           Link encap:Ethernet  HWaddr 00:C0:26:21:56:DA
                  inet addr:10.0.0.5  Bcast:10.0.0.7  Mask:255.255.255.252
eth1           Link encap:Ethernet  HWaddr 00:E0:7D:7D:20:FA
                  inet addr:10.0.0.2  Bcast:10.0.0.3  Mask:255.255.255.252
lo              Link encap:Local Loopback
                 inet addr:127.0.0.1  Mask:255.0.0.0

2)Instalare si configurarare program quagga

Se instaleaza pachetul quagga, pachet ce vine implicit cu kitul de Fedora (quagga-0.96.3-1).
#rpm –I quagga-0.96.3-1.rpm

Configuram fisierul /etc/quagga/zebra.conf de forma:

hostname gw1
password xxx

Creem un fisier /etc/quagga/ospfd.conf  cu un continut  identic (inclusive drepturi) cu al celui precedent

Pornim serviciul ospfd dupa care zebra (ATENTIE! Aceasta ordine este obligatorie la pornire precum si la oprire!!!)
#service ospfd start
#service zebra start

Verificam ca acestea sunt pornite:

[root@gw1 root]# ps ax | grep zebra
 6661 ?        S      0:00 /usr/sbin/zebra -d -A 127.0.0.1
 6665 pts/2    S      0:00 grep zebra
[root@gw1 root]# ps ax | grep ospf
 6559 ?        S      0:00 /usr/sbin/ospfd -d -A 127.0.0.1
 6667 pts/2    S      0:00 grep ospf
[root@gw1 root]# ps ax | grep ospf

Configuram ospfd_ul:

[root@ gw1 root]# telnet localhost 2604
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is quagga (version 0.96.3).
Copyright 1996-2002 Kunihiro Ishiguro.
User Access Verification
Password:
gw1> enable
gw1# conf t
gw1(config)# router ospf
gw1(config-router)# ospf router-id 10.0.2.2
gw1config-router)# redistribute connected
gw1(config-router)# network 10.0.0.4/30 area 0
gw1(config-router)# network 10.0.0.8/30 area 0
gw1(config-router)# (aici este combinatia de taste CTRL+Z)
gw1# wr mem
Configuration saved to /etc/quagga/ospfd.conf
gw1# exit
Connection closed by foreign host.
[root@intra root]#

Fisisierul /etc/quagga/ospfd.conf va fi de forma:

!
! Zebra configuration saved from vty
!   2004/11/30 17:21:12
!
hostname gw1
password xxx
!
!
!
interface dummy0
!
interface eth0
!
interface eth1
!
interface lo
!
router ospf
 ospf router-id 10.0.2.2
 redistribute connected
 network 10.0.0.4/30 area 0.0.0.0
 network 10.0.0.8/30 area 0.0.0.0
!
line vty
!

Repornim ospf_ul si zebra (atentie la ordine!)

#service zebra stop
#service ospf stop
#service ospf start
#service zebra start

Configurare router R3
<top>
Denumire router: router3
System de operare: Fedora Core1

1)Configuare interfete
Routerul R3 dispune de doua interfete tip Ethernet (eth0, eth1) plus o interfata virtuala  dummy0

Placi retea Ethernet:
Interfata eth0: 82557/8/9 [Ethernet Pro 100]
Interfata eth1: RTL-8139/8139C/8139C+

Fisierul /etc/sysconfig/network-scripts/ifcfg-eth0 este de forma:

# Intel Corp.|82557/8/9 [Ethernet Pro 100]
DEVICE=eth0
BOOTPROTO=none
BROADCAST=10.0.0.11
HWADDR=00:D0:B7:40:A5:A0
IPADDR=10.0.0.9
NETMASK=255.255.255.252
NETWORK=10.0.0.8
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
PEERDNS=no


Fisierul /etc/sysconfig/network-scripts/ifcfg-eth1 este de forma:

# Realtek|RTL-8139/8139C/8139C+
DEVICE=eth1
BOOTPROTO=none
BROADCAST=10.0.0.7
HWADDR=00:02:44:66:2A:62
IPADDR=10.0.0.6
NETMASK=255.255.255.252
NETWORK=10.0.0.4
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
PEERDNS=no


Se creaza un fisier /etc/sysconfig/network-scripts/ifcfg-dummy0 cu drepturi identice cu celelalte doua si cu urmatorul continut:

# Intel Corp.|82557/8/9 [Ethernet Pro 100]
DEVICE=dummy0
IPADDR=10.0.3.3
NETMASK=255.255.255.0
BROADCAST=10.0.3.255
NETWORK=10.0.3.0
ONBOOT=yes
BOOTPROTO=static

In fisierul /etc/modprobe.conf se adauga linia:
    Alias dummy0 dummy
Acesta este de forma:

include /etc/modprobe.conf.dist
alias eth0 e100
alias eth1 8139too
alias scsi_hostadapter aic7xxx
alias dummy0 dummy


Se activeaza interfata dummy0:
#ifup dummy0
Se activeaza forwardarea prin setarea variblei net.ipv4.ip_forward din fisierul /etc/sysctl.conf pe valoarea 1
Acesta va fi de forma urmatoare:

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
Se tasteaza de la consola comanda:
#sysctl –p

In fisierul /etc/sysconfig/network se adauga linia: NOZEROCONF=yes
Acesta va avea forma urmatoare:

NETWORKING=yes
HOSTNAME=router3

Se reporneste serviciul de retea:
#service network restart

Verificare interfete:
dummy0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:10.0.3.3  Bcast:10.0.3.255  Mask:255.255.255.0
eth0      Link encap:Ethernet  HWaddr 00:D0:B7:40:A5:A0
          inet addr:10.0.0.9  Bcast:10.0.0.11  Mask:255.255.255.252
eth1      Link encap:Ethernet  HWaddr 00:02:44:66:2A:62
          inet addr:10.0.0.6  Bcast:10.0.0.7  Mask:255.255.255.252
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0

2)Instalare si configurarare program quagga

Se instaleaza pachetul quagga, pachet ce vine implicit cu kitul de Fedora (quagga-0.96.3-1).
#rpm –I quagga-0.96.3-1.rpm

Configuram fisierul /etc/quagga/zebra.conf de forma:

hostname router3
password xxx

Creem un fisier /etc/quagga/ospfd.conf  cu un continut  identic (inclusive drepturi) cu al celui precedent

Pornim serviciul ospfd dupa care zebra (ATENTIE! Aceasta ordine este obligatorie la pornire precum si la oprire!!!)
#service ospfd start
#service zebra start

Verificam ca acestea sunt pornite:

[root@router3 root]# ps ax | grep zebra
 6661 ?        S      0:00 /usr/sbin/zebra -d -A 127.0.0.1
 6665 pts/2    S      0:00 grep zebra
[root@router3 root]# ps ax | grep ospf
 6559 ?        S      0:00 /usr/sbin/ospfd -d -A 127.0.0.1
 6667 pts/2    S      0:00 grep ospf
[root@router3 root]# ps ax | grep ospf

Configuram ospfd_ul:

[root@router3 root]# telnet localhost 2604
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is quagga (version 0.96.3).
Copyright 1996-2002 Kunihiro Ishiguro.
User Access Verification
Password:
router3> enable
router3# conf t
router3(config)# router ospf
router3(config-router)# ospf router-id 10.0.3.3
router3(config-router)# redistribute connected
router3(config-router)# network 10.0.0.4/30 area 0
router3(config-router)# network 10.0.0.8/30 area 0
router3(config-router)# (aici este combinatia de taste CTRL+Z)
router3# wr mem
Configuration saved to /etc/quagga/ospfd.conf
router3# exit
Connection closed by foreign host.
[root@router3 root]#
Fisisierul /etc/quagga/ospfd.conf va fi de forma:

!
! Zebra configuration saved from vty
!   2004/12/01 15:11:22
!
hostname router3
password xxx
!
!
!
interface dummy0
!
interface eth0
!
interface eth1
!
interface lo
!
router ospf
 ospf router-id 10.0.3.3
 redistribute connected
 network 10.0.0.4/30 area 0.0.0.0
 network 10.0.0.8/30 area 0.0.0.0
!
line vty
!


Repornim ospf_ul si zebra (atentie la ordine!)

#service zebra stop
#service ospf stop
#service ospf start
#service zebra start

Teste
<top>
1)Vizualizam rutele pe fiecare masina in parte:

Router R1
[root@intra root]# route
Kernel IP routing table
Destination     Gateway         Genmask             Flags Metric Ref    Use Iface
10.0.0.4        10.0.0.9        255.255.255.252   UG      20     0        0 eth1
10.0.0.0        *                   255.255.255.252   U         0       0        0 eth0
10.0.0.8        *                   255.255.255.252   U         0       0        0 eth1
10.0.1.0        *                   255.255.255.0       U         0       0        0 dummy0
10.0.2.0        10.0.0.9        255.255.255.0       UG      20      0        0 eth1
10.0.3.0        10.0.0.9        255.255.255.0       UG      20      0        0 eth1
127.0.0.0       *                   255.0.0.0               U        0        0        0 lo
[root@intra root]# telnet localhost 2604
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is quagga (version 0.96.3).
copyright 1996-2002 Kunihiro Ishiguro.
User Access Verification
Password:
intra.net> show ip ospf neighbor
Neighbor ID     Pri   State       Dead Time   Address     Interface           RXmtL RqstL DBsmL
10.0.3.3              1   Full/DR     00:00:35    10.0.0.9    eth1:10.0.0.10      0         0         0
intra.net> show ip ospf database
       OSPF Router with ID (10.0.1.1)
       Router Link States (Area 0.0.0.0)
Link ID         ADV Router      Age  Seq#           CkSum  Link count
10.0.1.1        10.0.1.1             755 0x80000007 0x9f41     2
10.0.2.2        10.0.2.2             476 0x80000005 0x8484    1
10.0.3.3        10.0.3.3             478 0x80000007 0x07ba    2

       Net Link States (Area 0.0.0.0)
       
Link ID         ADV Router      Age  Seq#            CkSum
10.0.0.6        10.0.3.3             478 0x80000004 0x55c6
10.0.0.10      10.0.1.1             755 0x80000004 0x24f9
       
       AS External Link States
               
Link ID         ADV Router      Age  Seq#           CkSum      Route
10.0.0.0        10.0.2.2         426 0x80000005 0x9a0b E2  10.0.0.0/30 [0x0]
10.0.1.0        10.0.1.1         702 0x80000005 0xaef4 E2   10.0.1.0/24 [0x0]
10.0.2.0        10.0.2.2         416 0x80000005 0x960a E2  10.0.2.0/24 [0x0]
10.0.3.0        10.0.3.3         372 0x80000006 0x7c20 E2  10.0.3.0/24 [0x0]


Router R2
[root@gw1 root]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.4        *               255.255.255.252     U     0          0        0 eth0
10.0.0.0        *               255.255.255.252     U     0          0        0 eth1
10.0.0.8        10.0.0.6    255.255.255.252     UG  20        0        0 eth0
10.0.1.0        10.0.0.6    255.255.255.0         UG  20        0        0 eth0
10.0.2.0        *               255.255.255.0         U     0          0        0 dummy0
10.0.3.0        10.0.0.6    255.255.255.0         UG   20       0        0 eth0
127.0.0.0       *              255.0.0.0                  U     0         0        0 lo
[root@gw1 root]# telnet localhost 2604
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is quagga (version 0.96.3).
Copyright 1996-2002 Kunihiro Ishiguro.
User Access Verification
Password:
gw1> show ip ospf neighbor
Neighbor ID     Pri   State   Dead Time   Address   Interface           RXmtL RqstL DBsmL
10.0.3.3          1   Full/DR 00:00:32    10.0.0.6  eth0:10.0.0.5       0     0     0
gw1> show ip ospf database

       OSPF Router with ID (10.0.2.2)

                Router Link States (Area 0.0.0.0)

Link ID         ADV Router      Age  Seq#             CkSum  Link count
10.0.1.1        10.0.1.1        1210     0x80000007 0x9f41     2
10.0.2.2        10.0.2.2         926      0x80000005 0x8484     1
10.0.3.3        10.0.3.3         931      0x80000007 0x07ba     2

                Net Link States (Area 0.0.0.0)

Link ID         ADV Router      Age   Seq#               CkSum
10.0.0.6        10.0.3.3         931       0x80000004   0x55c6
10.0.0.10       10.0.1.1        1210     0x80000004   0x24f9

                AS External Link States

Link ID         ADV Router      Age  Seq#       CkSum  Route
10.0.0.0        10.0.2.2         877 0x80000005 0x9a0b E2 10.0.0.0/30 [0x0]
10.0.1.0        10.0.1.1        1157 0x80000005 0xaef4 E2 10.0.1.0/24 [0x0]
10.0.2.0        10.0.2.2         867 0x80000005 0x960a E2 10.0.2.0/24 [0x0]
10.0.3.0        10.0.3.3         824 0x80000006 0x7c20 E2 10.0.3.0/24 [0x0]
 
Router R3
[root@router3 root]# route
Kernel IP routing table
Destination     Gateway           Genmask             Flags Metric Ref    Use Iface
10.0.0.4        *                       255.255.255.252 U         0      0        0     eth1
10.0.0.0        10.0.0.10          255.255.255.252 UG       20    0        0     eth0
10.0.0.8        *                       255.255.255.252 U          0      0        0     eth0
10.0.1.0        10.0.0.10          255.255.255.0     UG       20     0       0     eth0
10.0.2.0        10.0.0.5            255.255.255.0     UG       20     0       0     eth1
10.0.3.0        *                       255.255.255.0     U           0      0       0     dummy0
169.254.0.0     *                    255.255.0.0         U           0      0       0     eth1
127.0.0.0       *                      255.0.0.0              U           0      0      0     lo
[root@router3 root]# telnet localhost 2604
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is quagga (version 0.96.3).
Copyright 1996-2002 Kunihiro Ishiguro.
User Access Verification
Password:
router3> show ip ospf neighbor
Neighbor ID     Pri   State       Dead Time   Address   Interface           RXmtL RqstL DBsmL
10.0.1.1          1   Full/Backup 00:00:35    10.0.0.10 eth0:10.0.0.9       0         0        0
10.0.2.2          1   Full/Backup 00:00:35    10.0.0.5   eth1:10.0.0.6       0         0        0
router3> show ip ospf database

       OSPF Router with ID (10.0.3.3)

        Router Link States (Area 0.0.0.0)
       
Link ID         ADV Router      Age  Seq#       CkSum  Link count
10.0.1.1        10.0.1.1        1409 0x80000007 0x9f41      2
10.0.2.2        10.0.2.2        1127 0x80000005 0x8484     1
10.0.3.3        10.0.3.3        1129 0x80000007 0x07ba     2

               Net Link States (Area 0.0.0.0)
               
Link ID         ADV Router      Age  Seq#           CkSum
10.0.0.6        10.0.3.3        1129 0x80000004   0x55c6
10.0.0.10       10.0.1.1        1409 0x80000004  0x24f9
               
                AS External Link States
                       
Link ID         ADV Router      Age  Seq#       CkSum  Route
10.0.0.0        10.0.2.2        1078 0x80000005 0x9a0b E2 10.0.0.0/30 [0x0]
10.0.1.0        10.0.1.1        1356 0x80000005 0xaef4 E2 10.0.1.0/24 [0x0]
10.0.2.0        10.0.2.2        1068 0x80000005 0x960a E2 10.0.2.0/24 [0x0]
10.0.3.0        10.0.3.3        1023 0x80000006 0x7c20 E2 10.0.3.0/24 [0x0]

Test final
<top>
a)legatura intre R1 si R2 intrerupta:

[root@intra root]# ping -I 10.0.1.1 10.0.2.2
PING 10.0.2.2 (10.0.2.2) from 10.0.1.1 : 56(84) bytes of data.
ping: sendmsg: Network is unreachable
ping: sendmsg: Network is unreachable
 
b)legatura intre R1 si R2 refacuta :

[root@intra root]# ping -I 10.0.1.1 10.0.2.2
PING 10.0.2.2 (10.0.2.2) from 10.0.1.1 : 56(84) bytes of data.
 ping: sendmsg: Network is unreachable
ping: sendmsg: Network is unreachable
64 bytes from 10.0.2.2: icmp_seq=7 ttl=63 time=0.960 ms
64 bytes from 10.0.2.2: icmp_seq=8 ttl=63 time=0.545 ms
64 bytes from 10.0.2.2: icmp_seq=9 ttl=63 time=0.591 ms
64 bytes from 10.0.2.2: icmp_seq=10 ttl=63 time=0.617 ms
64 bytes from 10.0.2.2: icmp_seq=11 ttl=63 time=0.609 ms

Concluzie:
Legatura se reia dupa 30 secunde de la intrerupere!
Similar pt. celelate 2 legaturi.


Aplicatii practice ale programului quagga.
<top>
            Sa zicem ca dispunem de un sistem informatic ce dispune de o aplicatie software ce ruleaza pe doua calculatoare. Unul este un server de baze de date si altul un server web.
            Aplicatia web ruleaza pe serverul web folosind bazele de date de pe
serverul de baze de date. Ca sa avem conectivitate in permanenta trebuie sa folosim
ip-uri care sint pe interfete de genul celor de pe dummy0 (sau pe alte
interfete care NU sint implicate in conectivitatea pe upstream).
            Idea este ca in cazul in care una din rute (de exemplu cea mai eficienta
ruta) cade (este intrerupta prin inchiderea unui router) pachetele trebuie
sa gaseasca destinatia flosindu-se de exportul rutelor care se realizeaza in
mod dinamic cu ajutorul programului quagga.

Atentie!

            Sitemul Nu ofera redundanta DECIT pentru ip-urile din spate (cele de pe eth3, eth4, eth8, de genul dummy0), nu cele implicate in link-uri (/30-urile alea dintre routere).
            Daca de pe R1 dam ping in 10.0.2.2 (R2) normal atunci ping-ul va pleca cu sursa 10.0.0.1.  Daca link-ul dintre R1 si R2 pica atunci se intimpla urmatoarele:
-    10.0.2.0/24 ar trebui sa vina via R3, care e 10.0.0.10 ;
-     pachetele ICMP vor pleca spre 10.0.2.2 in continuare cu sursa 10.0.0.1 (asta daca nu intrerupem ping-ul si dam din nou);
  - vor ajunge la 10.0.2.2 cu aceasta sursa;
  - insa R2 va incerca sa raspunda la ele fix prin interfata cu
care tocmai am intrerupt link-ul pentru ca el are ruta connected pentru
10.0.0.0/30 pe acea interfata cu broken link.