marți, 30 aprilie 2013

MPLS - roots bloody roots

Multiprotocol Label Switching este o functionalitate foarte intalnita in routerele ISP, prin care acestea nu mai verifica propria tabela de rutare pt a gasi calea catre destinatia unui mesaj, ci utilizeaza o noua tabela, care contine corespondente intre etichete (un numar pe 20 de biti) si interfete de iesire. Avantajele sunt multiple si le voi puncta pe parcursul fiecarui post ce va urma acestuia.

Acest post are mai mult valoare teoretica decat practica, totusi trebuie sa raminem cu ideea ca pt. configurarea acestei noi metode de comutare a pachetelor avem nevoie de routere, protocoale de rutare IGP, de BGP (in urmatorul post) si de ceva in plus pe care incerc sa il evidentiez aici.

Ideea consta in asocierea unei etichete MPLS, de exemplu,  cu o adr IP si anuntarea acestei etichete printr-un prot. de rutare destinat acestei sarcini, LDP (Label Distribuition Protocol).
Totodata si adr. IP este anuntata printr-un prot. de rutare IGP. Corespondenta intre eticheta MPLS si adresa IP este importanta doar la intrarea pachetului IP in routerele PE, apoi conteaza numai corespondenta intre etichete.
Presupunem ca un pachet IP are sursa 192.168.2.x si destinatia 192.168.1.x (cele doua retele, in acest caz, sunt direct conectate de router PE2 si respectiv PE1). Routerul PE2 incapsuleaza pachetul IP intr-un frame MPLS (prin adaugarea unui header MPLS) si apoi intr-un frame corespunzator prot. Layer 2 OSI de pe interfata de iesire  (in cazul meu HDLC). In figura de mai jos observa ca intre headerul HDLC si cel IP se gaseste headerul MPLS, in care valoarea etichetei este 18 si TTL=255.
Tabela LFIB a routerului PE2 din imaginea de mai jos confirma ca eticheta corespunzatoare subnetului destinatie 192.168.10.0/24 este 18 (outgoing tag). Acest router a primit aceasta eticheta, prin prot. de rutare LDP, de la routerul P2.
Acum mesajul a ajuns in routerul P2 si are eticheta 18. Acest router nu se mai uita in tabela si de rutare, ci numai in LFIB. Se observa ca eticheta 18 (local tag) trebuie inlocuita cu 17 (outgoing tag) si frame-ul MPLS trebuie trimis pe interfara Se 1/1. In plus, TTL se decrementeaza cu 1.
Astfel, din router P2 pleaca mesajul in forma de mai jos (vezi eticheta si TTL).
Acum mesajul a ajuns in routerul P1 si are eticheta 17. Nici acest router nu se uita in tabela de rutare, ci numai in LFIB. De aceasta data etichetei 17 (local tag) ii corespunde o eticheta speciala (valoarea numerica 3) care inseamna 'imposition-null' si care determina routerul P1 sa elimine headerul MPLS (pop tag) si sa trimita spre PE1 pachetul IP asa cum l-a primit initial routerul PE2, cu exceptia TTL (acum 253).
Mesajul trimis de catre P1 nu mai contine headerul MPLS, iar TTL este 253.
Dupa ce mesajul a ajuns in PE1, doar acest router se mai uita in tabela de rutare proprie pt a determina intf. de iesire a pachetului.

Ca sa se intample toate acestea, trebuie sa configuram interfetele de leg. dintre routere cu comanda mpls ip si un prot de rutare IGP (OSPF, ISIS, EIGRP) cu timp de convergenta mic. Trebuie sa analizati daca este necesar sa mariti si MTU, un header MPLS are exact 20+3+1+8=32 biti (eticheta MPLS + Experimental_bits + Stack_bit + MPLS_TTL).
Experimental_bits -3 biti care se folosesc pt marcarea frame-urilor in vederea implementarii QoS.
Stack bit - bitul care indica daca acest header este ultimul din stiva (S=1) sau mai urmeaza si alte headere MPLS (S=0).
TTL_MPLS - campul de 8 biti care previne intrarea in bucla a unui frame MPLS.

Etichetele MPLS ajung de la un router la altul prin prot de rutare special, standard, denumit LDP - Label Distribution Protocol, care se activeaza automat dupa ce se configureaza routerele cum am precizat anterior.
Se formeaza in mod automat adiacente LDP intre routere; mesajele LDP sunt incapsulate in TCP/646.

De exemplu configuratia routerului P1 este:
interface Loopback1
 ip address 1.1.1.1 255.255.255.255
!
interface Serial1/0
 description link_2_PE1
 ip address 172.16.1.1 255.255.255.252
 ip router isis IGP
 mpls ip
 !
interface Serial1/1
 description link_2_P2
 ip address 172.16.0.1 255.255.255.252
 ip router isis IGP
 mpls ip
!
router isis IGP
 net 49.0001.0010.0100.1001.00
 is-type level-2-only
 log-adjacency-changes
 redistribute connected

Adiacentele LDP pe care le formeaza cu routerele PE1 si P2:
P1#sh mpls ldp neighbor
    Peer LDP Ident: 2.2.2.2:0; Local LDP Ident 1.1.1.1:0
        TCP connection: 2.2.2.2.34835 - 1.1.1.1.646
        State: Oper; Msgs sent/rcvd: 13/11; Downstream
        Up time: 00:00:52
        LDP discovery sources:
          Serial1/1, Src IP addr: 172.16.0.2
        Addresses bound to peer LDP Ident:
          2.2.2.2         172.16.0.2
    Peer LDP Ident: 192.168.10.1:0; Local LDP Ident 1.1.1.1:0
        TCP connection: 192.168.10.1.31261 - 1.1.1.1.646
        State: Oper; Msgs sent/rcvd: 10/9; Downstream
        Up time: 00:00:41
        LDP discovery sources:
          Serial1/0, Src IP addr: 172.16.1.2
        Addresses bound to peer LDP Ident:
          172.16.1.2      10.0.0.1        192.168.10.1

Tabela de rutare:
P1#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback1
     2.0.0.0/32 is subnetted, 1 subnets
i L2    2.2.2.2 [115/10] via 172.16.0.2, Serial1/1
i L2 192.168.10.0/24 [115/10] via 172.16.1.2, Serial1/0
     172.16.0.0/30 is subnetted, 3 subnets
i L2    172.16.20.0 [115/20] via 172.16.0.2, Serial1/1
C       172.16.0.0 is directly connected, Serial1/1
C       172.16.1.0 is directly connected, Serial1/0
i L2 192.168.20.0/24 [115/20] via 172.16.0.2, Serial1/1
     10.0.0.0/32 is subnetted, 2 subnets
i L2    10.0.0.2 [115/20] via 172.16.0.2, Serial1/1
i L2    10.0.0.1 [115/10] via 172.16.1.2, Serial1/0

Tabela LFIB:
P1#sh mpls forwarding-table
Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop
tag    tag or VC   or Tunnel Id      switched   interface
16     Pop tag     2.2.2.2/32                         0          Se1/1      point2point
17     Pop tag     172.16.20.0/30               0          Se1/1      point2point
18     Pop tag     10.0.0.1/32                      0          Se1/0      point2point
19     Pop tag     192.168.10.0/24             0          Se1/0      point2point
20     20          10.0.0.2/32                           0          Se1/1      point2point
21     21          192.168.20.0/24                 0          Se1/1      point2point

Urmatorul post va fi despre VPN MPLS Layer 3, practic vom vedea frame-uri MPLS cu doua headere MPLS si un singur header IP, adrese VPNv4, VRF-uri si cum putem configura intraneturile a doi clienti care au acelasi plan de adresare privat, fara ca routerele sa fie deranjate ca pe doua interfete au aceeasi adresa IP.

2 comentarii:

  1. buna seara,

    merge ... am folosit LDP si EIGRP, seriale HDLC (in GNS3) ... de ce adiacenta LDP se formeaza numai daca in protocolul IGP se anunta si interfata de loopback?

    multumesc
    Cristian Ion

    RăspundețiȘtergere
    Răspunsuri
    1. Buna ziua,

      In primul rand felicitari ca ati avut rabdarea sa cititi tot articolul.

      Cand routerul trimite mesaje multicast Hello pt a descoperi eventuale routere cu care poate forma adiacente LDP, isi alege ca ID tocmai adresa IP (cea mai mare) de pe o intf Loopback.

      Avantaje:
      - o singura adiacenta LDP chiar daca intre routere exista mai multe legaturi fizice
      - ID nu se modifica in functie de starea interfetelor fizice

      Se poate si altfel, dar dispar din avantaje.
      Oricum, se poate controla alegerea ID cu comanda "mpls ldp router-id ..."

      Numai bine,
      Marius Moise

      Ștergere