viernes, 6 de marzo de 2015

Configuración de MPLS parte 1, las etiquetas

Los routers Cisco tienen varias tablas que intervienen en la manera de reenviar un paquete, básicamente los procesos de ruteo se encargan de establecer opciones, seleccionar las mejores rutas e instalarlas en la tabla de ruteo global (RIB routing information base) y así tener opciones para ir a distintas redes.
Cuando las métricas son iguales (o similares si así nos interesa) se puede balancear el tráfico entre distintas rutas posibles.
Un inconveniente de la tabla de ruteo es que revisar la dirección de destino de un paquete contra la tabla es un proceso secuencial que ocupa mucha memoria, por lo que a través de CEF se construye una tabla de reenvío (FIB forwarding information base); este proceso es más rápido porque construye una tabla en la que se registran las direcciones de destino y las interfaces que nos llevan ahí, haciendo un proceso de conmutación o IP switching que es más eficiente para reenviar un paquete.
Lo siguiente es MPLS, que construye una tabla de etiquetas relacionando las redes que conocemos por distintos medios con números asignados localmente y remotamente, construyendo una tabla LIB (label information base) que reenvía el tráfico de manera más eficiente; ésto es porque el router recibe un paquete con un encabezado adicional que incluye las etiquetas de MPLS y que le indican por medio de la etiqueta el destino al que se dirige el paquete, se lee la etiqueta, se consulta la LIB, se quita la etiqueta de entrada, se coloca una etiqueta de salida (o se quitan todas si ha llegado a su destino) y se reenvía el paquete, todo sin consultar la tabla de ruteo o RIB.
El proceso de ruteo se encarga de mantener la LIB actualizada en cuanto a las distintas rutas disponibles, haciendo más eficiente el proceso de intercambiar rutas, y así mismo, el de transmitir tráfico.
Haremos un pequeño ejercicio de como configurar una MPLS con 5 routers contiguos, todos corriendo el proceso de OSPF 1 y todos con una loopback interface con máscara de 32 bits:


Descarga aquí las configuraciones completas de este laboratorio.


Primero activamos MPLS en todos con el comando:
(config)# mpls ip
y limitamos el rango de etiquetas que asignaremos localmente diferente en cada router (para identificarlas más fácilmente)
(config)# mpls label range 1100 1199
y asignamos la interface al proceso de MPLS:
(config)# int e0/0
(config-if)#mpls ip

Una vez configurado en todos los routers, podremos ver la tabla de asociaciones de etiquetas y rutas:

router_1#show mpls ldp bindings
  lib entry: 1.1.1.1/32, rev 2
        local binding:  label: imp-null
        remote binding: lsr: 2.2.2.2:0, label: 1200
  lib entry: 2.2.2.2/32, rev 6
        local binding:  label: 1100
        remote binding: lsr: 2.2.2.2:0, label: imp-null
  lib entry: 3.3.3.3/32, rev 11
        local binding:  label: 1102
        remote binding: lsr: 2.2.2.2:0, label: 1201
  lib entry: 4.4.4.4/32, rev 14
        local binding:  label: 1104
        remote binding: lsr: 2.2.2.2:0, label: 1203
  lib entry: 5.5.5.5/32, rev 18
        local binding:  label: 1106
        remote binding: lsr: 2.2.2.2:0, label: 1205
  lib entry: 10.0.12.0/29, rev 4
        local binding:  label: imp-null
        remote binding: lsr: 2.2.2.2:0, label: imp-null
  lib entry: 10.0.23.0/29, rev 8
        local binding:  label: 1101
        remote binding: lsr: 2.2.2.2:0, label: imp-null
  lib entry: 10.0.34.0/29, rev 12
        local binding:  label: 1103
        remote binding: lsr: 2.2.2.2:0, label: 1202
  lib entry: 10.0.45.0/29, rev 16
        local binding:  label: 1105
        remote binding: lsr: 2.2.2.2:0, label: 1204


router_3#show mpls ldp bindings 3.3.3.3 32
  lib entry: 3.3.3.3/32, rev 2
        local binding:  label: imp-null
        remote binding: lsr: 2.2.2.2:0, label: 1201
        remote binding: lsr: 4.4.4.4:0, label: 1402

Como podemos ver, cada prefijo aprendido tiene una etiqueta local y una asignada por el vecino, en el caso de R1 podemos ver el prefijo 1.1.1.1/32, que tiene una etiqueta local imp-null, lo que significa que no colocamos una etiqueta local, pero en el router 2 con ID 2.2.2.2, la etiqueta utilizada es 1200.
Similar con el prefijo 3.3.3.3/32, que en el router 1 tiene una etiqueta 1102, en el router 2 es la 1201 y podemos ver que en el router 3, al ser un prefijo local, no tiene etiqueta, pero el router 3 sabe que router 2 le coloca una etiqueta 1201 y router 4 le coloca una etiqueta 1402.

Verificación:
Ahora hagamos un traceroute desde router 1 a la loopback de router 5; veremos que el paquete va al siguiente router con IP 10.0.12.2 usando una etiqueta 1205, de ahí pasa al R3 con la etiqueta 1305, y así sucesivamente, podemos ver las etiquetas en rojo.
Otra comprobación es el registro de CEF, que nos indica que ese prefijo se encuentra saliendo por la interface Ethernet 0/0 y utilizando una etiqueta 1205 que es la que R2 utiliza

router_1#traceroute 5.5.5.5
Type escape sequence to abort.
Tracing the route to 5.5.5.5
VRF info: (vrf in name/id, vrf out name/id)
  1 10.0.12.2 [MPLS: Label 1205 Exp 0] 1 msec 0 msec 0 msec
  2 10.0.23.3 [MPLS: Label 1305 Exp 0] 1 msec 0 msec 1 msec
  3 10.0.34.4 [MPLS: Label 1405 Exp 0] 0 msec 5 msec 4 msec
  4 10.0.45.5 5 msec 5 msec 5 msec

router_1#sh ip cef 5.5.5.5  
5.5.5.5/32

  nexthop 10.0.12.2 Ethernet0/0 label 1205

router_1#show mpls forwarding-table 5.5.5.5 32
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop    
Label      Label      or Tunnel Id     Switched      interface              
1106       1205       5.5.5.5/32       0             Et0/0      10.0.12.2  

router_1#sh mpls forwarding-table 
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop    
Label      Label      or Tunnel Id     Switched      interface              
1100       Pop Label  2.2.2.2/32       0             Et0/0      10.0.12.2   
1101       Pop Label  10.0.23.0/29     0             Et0/0      10.0.12.2   
1102       1201       3.3.3.3/32       0             Et0/0      10.0.12.2   
1103       1202       10.0.34.0/29     0             Et0/0      10.0.12.2   
1104       1203       4.4.4.4/32       0             Et0/0      10.0.12.2   
1105       1204       10.0.45.0/29     0             Et0/0      10.0.12.2   
1106       1205       5.5.5.5/32       0             Et0/0      10.0.12.2

Aquí podemos ver que el intercambio de etiquetas cn el protocolo LDP se lleva a cabo en el puerto 646:
router_1#show 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.34337 - 1.1.1.1.646
        State: Oper; Msgs sent/rcvd: 56/55; Downstream
        Up time: 00:38:58
        LDP discovery sources:
          Ethernet0/0, Src IP addr: 10.0.12.2
        Addresses bound to peer LDP Ident:
          10.0.12.2       10.0.23.2       2.2.2.2

debug ip packet
*Mar  6 04:25:50.780:     UDP src=646, dst=646
*Mar  6 04:25:50.781:     UDP src=646, dst=646
*Mar  6 04:25:54.256:     UDP src=646, dst=646

router_1#sh mpls ldp neighbor 2.2.2.2 detail
    Peer LDP Ident: 2.2.2.2:0; Local LDP Ident 1.1.1.1:0
        TCP connection: 2.2.2.2.34337 - 1.1.1.1.646
        Password: not required, none, in use
        State: Oper; Msgs sent/rcvd: 61/60; Downstream; Last TIB rev sent 18
        Up time: 00:43:27; UID: 1; Peer Id 0;
        LDP discovery sources:
          Ethernet0/0; Src IP addr: 10.0.12.2 
            holdtime: 15000 ms, hello interval: 5000 ms
        Addresses bound to peer LDP Ident:
          10.0.12.2       10.0.23.2       2.2.2.2         
        Peer holdtime: 180000 ms; KA interval: 60000 ms; Peer state: estab
        Capabilities Sent:
          [Dynamic Announcement (0x0506)]
          [mLDP Point-to-Multipoint (0x0508)]
          [mLDP Multipoint-to-Multipoint (0x0509)]
          [Typed Wildcard (0x050B)]
        Capabilities Received:
          [Dynamic Announcement (0x0506)]
          [mLDP Point-to-Multipoint (0x0508)]
          [mLDP Multipoint-to-Multipoint (0x0509)]

          [Typed Wildcard (0x050B)]

A continuación la configuración relevante en los routers; el comando mpls ip general no se muestra, pero es importante porque activa el proceso:

router_1#sh runn
Building configuration...
!
no ip domain lookup
ip cef
no ipv6 cef
!
!
[ mpls ip ]
mpls label range 1100 1199
!
!
interface Loopback1
 ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
 ip address 10.0.12.1 255.255.255.248
 mpls ip
!
router ospf 1
 network 0.0.0.0 255.255.255.255 area 0
!
!

end

router_3#sh running-config 
!
[ mpls ip ]
mpls label range 1300 1399
!
interface Loopback1
 ip address 3.3.3.3 255.255.255.255
!
interface Ethernet0/0
 ip address 10.0.34.3 255.255.255.248
 mpls ip
!
interface Ethernet0/1
 ip address 10.0.23.3 255.255.255.248
 mpls ip
!
router ospf 1
 network 0.0.0.0 255.255.255.255 area 0







No hay comentarios. :

Publicar un comentario