ipv6

En este post veremos cómo configurar:

  • Habilitar IPv6 en router Cisco.
  • Configurar una dirección unicast global.
  • Configurar una ruta estática.

Para este lab, se utilizará la siguiente topología:

ipv62

Primero que todo, se explicará el concepto de EUI-64, que se aplicará para la configuración de la interfaz Fa0/0 en R2.

Existen varias formas de configurar la id de interfaz en IPv6, y una de ellas es EUI-64. Extended Unique Identifier es un mecanismo que permite que una interfaz autoconfigure los 64 bits de la porción de host (interface ID), sabiendo con anterioridad el prefijo de red.

Para esta autoconfiguración, lo que utiliza el equipo es su dirección MAC para autocompletar el prefijo establecido, pero como todos sabemos, las direcciones MAC solo poseen 48 bits, por lo que es necesario agregar otros 16 bits.

Para estos 16 bits, se han reservados los valores FFFE, los cuales son insertados en medio de la dirección MAC (entre el OUI y la dirección de la NIC), quedando como se muestra a continuación.

eui64-1

Una vez insertado los dígitos FFFE en nuestra dirección para su utilización, es necesario modificar el séptimo bit de izquierda a derecha de la dirección (Universal/Local bit [U/L]), con el objetivo de especificar si el id de interfaz es administrado de forma universal, o de forma local. Esta especificación se encuentra en la RFC 4291.

eui64-2

Pero cuando tenemos una conexión serial ¿se puede configurar una dirección usando este mecanismo?, la respuesta es sí. Aunque las interfaces seriales no posean direcciones MAC, los routers Cisco utilizan la dirección MAC más baja para configurar estas direcciones, por lo tanto, para comprobar esto, podemos revisar la dirección link-local que se genera en las interfaces, debido que utilizan el método eui-64 para su autoconfiguración.

R3#sh int f0/0 | in Hardware
 Hardware is Gt96k FE, address is c201.377e.0000 (bia c201.377e.0000)
R3#sh int f0/1 | in Hardware
 Hardware is Gt96k FE, address is c201.377e.0001 (bia c201.377e.0001)
R3#sh int s0/0 | in Hardware
 Hardware is GT96K Serial
R3#sh ipv6 int s0/0
Serial0/0 is up, line protocol is up
 IPv6 is enabled, link-local address is FE80::C001:37FF:FE7E:0 
 No Virtual link-local address(es):
 Global unicast address(es):
 2000::C001:37FF:FE7E:0, subnet is 2000::/64 [EUI]
 Joined group address(es):
 FF02::1
 FF02::1:FF7E:0
 MTU is 1500 bytes
 ICMP error messages limited to one every 100 milliseconds
 ICMP redirects are enabled
 ICMP unreachables are sent
 ND DAD is enabled, number of DAD attempts: 1
 ND reachable time is 30000 milliseconds
R3#sh ipv6 int f0/0
FastEthernet0/0 is up, line protocol is up
 IPv6 is enabled, link-local address is FE80::C001:37FF:FE7E:0 
 No Virtual link-local address(es):
 No global unicast address is configured
 Joined group address(es):
 FF02::1
 FF02::1:FF7E:0
 MTU is 1500 bytes
 ICMP error messages limited to one every 100 milliseconds
 ICMP redirects are enabled
 ICMP unreachables are sent
 ND DAD is enabled, number of DAD attempts: 1
 ND reachable time is 30000 milliseconds

Como se puede ver en la dirección global configurada, se cambia el bit especificado: 2000::C001:37FF:FE7E:0 > C201:377E:0000.

Ya aclarado que es EUI-64, y si es posible configurarla en una interfaz serial, pasamos a la configuración inicial de nuestros routers.

Por defecto IPv6 viene deshabilitado en las interfaces de los equipos.

R2#sh ipv6 int

R2#sh ipv6 int br
FastEthernet0/0            [administratively down/down]
FastEthernet0/1            [administratively down/down]

Para poder habilitar el protocolo, se utiliza el comando de interfaz ipv6 enable. Al usar este comando, el router genera una dirección link-local en la interfaz.

R2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#int f0/0
R2(config-if)#ipv6 enable 
R2(config-if)#do sh ipv6 int br 
FastEthernet0/0 [administratively down/down]
 FE80::C002:24FF:FE74:0
FastEthernet0/1 [administratively down/down]
R2(config-if)#do sh ipv6 int f0/0
FastEthernet0/0 is administratively down, line protocol is down
 IPv6 is enabled, link-local address is FE80::C002:24FF:FE74:0 [TEN]
 No Virtual link-local address(es):
 No global unicast address is configured
 Joined group address(es):
 FF02::1
 MTU is 1500 bytes
 ICMP error messages limited to one every 100 milliseconds
 ICMP redirects are enabled
 ICMP unreachables are sent
 ND DAD is enabled, number of DAD attempts: 1
 ND reachable time is 30000 milliseconds

Pero no solo con ese comando se puede habilitar IPv6 en una interfaz, al momento de configurar una dirección en la interfaz con el comando ipv6 address, también se habilita el protocolo.

R1:

R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#int f0/0
R1(config-if)#no sh
R1(config-if)#
*Mar 1 01:22:41.719: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
*Mar 1 01:22:42.719: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
R1(config-if)#ipv6 address 2001::1/64
R1(config-if)#do sh ipv6 int br
FastEthernet0/0 [up/up]
 FE80::C001:25FF:FE33:0
 2001::1
FastEthernet0/1 [administratively down/down]
R1(config-if)#do sh ipv6 int f0/0
FastEthernet0/0 is up, line protocol is up
 IPv6 is enabled, link-local address is FE80::C001:25FF:FE33:0 
 No Virtual link-local address(es):
 Global unicast address(es):
 2001::1, subnet is 2001::/64 
 Joined group address(es):
 FF02::1
 FF02::1:FF00:1
 FF02::1:FF33:0
 MTU is 1500 bytes
 ICMP error messages limited to one every 100 milliseconds
 ICMP redirects are enabled
 ICMP unreachables are sent
 ND DAD is enabled, number of DAD attempts: 1
 ND reachable time is 30000 milliseconds

R2:

R2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#int f0/0
R2(config-if)#no sh
R2(config-if)#
*Mar 1 01:17:26.579: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
*Mar 1 01:17:27.579: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
R2(config-if)#ipv6 address 2001::/64 eui-64
R2(config-if)#int lo0
R2(config-if)#
*Mar 1 01:17:54.103: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up
R2(config-if)#ipv6 address 2001:a::1/64
R2(config-if)#do sh ipv6 int br
FastEthernet0/0 [up/up]
 FE80::C002:24FF:FE74:0
 2001::C002:24FF:FE74:0
FastEthernet0/1 [administratively down/down]
Loopback0 [up/up]
 FE80::C002:24FF:FE74:0
 2001:A::1
R2(config-if)#do sh ipv6 int f0/0
FastEthernet0/0 is up, line protocol is up
 IPv6 is enabled, link-local address is FE80::C002:24FF:FE74:0 
 No Virtual link-local address(es):
 Global unicast address(es):
 2001::C002:24FF:FE74:0, subnet is 2001::/64 [EUI]
 Joined group address(es):
 FF02::1
 FF02::1:FF74:0
 MTU is 1500 bytes
 ICMP error messages limited to one every 100 milliseconds
 ICMP redirects are enabled
 ICMP unreachables are sent
 ND DAD is enabled, number of DAD attempts: 1
 ND reachable time is 30000 milliseconds
R2(config-if)#do sh ipv6 int lo0 
Loopback0 is up, line protocol is up
 IPv6 is enabled, link-local address is FE80::C002:24FF:FE74:0 
 No Virtual link-local address(es):
 Global unicast address(es):
 2001:A::1, subnet is 2001:A::/64 
 Joined group address(es):
 FF02::1
 FF02::1:FF00:1
 FF02::1:FF74:0
 MTU is 1514 bytes
 ICMP error messages limited to one every 100 milliseconds
 ICMP redirects are enabled
 ICMP unreachables are sent
 ND DAD is not supported
 ND reachable time is 30000 milliseconds

Cuando queremos hacer una comprobación de conectividad, se puede usar el comando ping, donde se puede usar el subcomando ipv6 para especificar el tipo de protocolo que se quiere usar, pero no es necesario para comprobar conectividad.

R2#ping ?
  WORD       Ping destination address or hostname
  appletalk  Appletalk echo
  clns       CLNS echo
  decnet     DECnet echo
  ip         IP echo
  ipv6       IPv6 echo
  ipx        Novell/IPX echo
  mpls       MPLS echo
  srb        srb echo
  tag        Tag encapsulated IP echo
  

R2#ping 2001::1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001::1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/12/16 ms
R2#ping ipv6 2001::1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001::1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/20/24 ms

Ahora que tenemos conectividad, configuramos la ruta estática hacia loopback0 de R2.

La configuración de una ruta estática es idéntica que en IPv4, solo que, como se ha visto hasta ahora, debe llevar el keyword ipv6.

Esta ruta puede ser configurada especificando el next-hop, que puede ser la dirección unicast configurada (global unicast o unique-local), o la dirección link-local, y/o especificar la interfaz de salida del paquete (si este se configura por sí solo, se recomienda hacerlo cuando se tiene interfaces seriales, en interfaces ethernet puede dar problemas con NDP).

Para nuestro caso se configurará con ambas opciones.

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ipv6 route 2001:a::/64 f0/0 2001::C002:24FF:FE74:0

Para poder validar las rutas de IPv6 que se conocen, se usa el comando show ipv6 route.

R1#sh ipv6 route
IPv6 Routing Table - 4 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
C   2001::/64 [0/0]
     via ::, FastEthernet0/0
L   2001::1/128 [0/0]
     via ::, FastEthernet0/0
S   2001:A::/64 [1/0]
     via 2001::C002:24FF:FE74:0, FastEthernet0/0
L   FF00::/8 [0/0]
     via ::, Null0

Como se puede ver, no solo aparece la ruta estática configurada, si no que, también podemos ver rutas conectadas y locales. Para las rutas conectadas, se toma el prefijo de las redes configuradas de las interfaces que están up/up, y para las redes locales, se toma la dirección configurada en las interfaces up, apuntando específicamente a esa dirección (con el prefijo /128).

NOTA: como se puede ver esta salida de la tabla de rutas de R1, no se crean rutas para las direcciones link-local.

Como configuración final, para que el router trabaje como tal en IPv6, se usa el comando de configuración global ipv6 unicast-routing, habilitando el routing en IPv6 del equipo.

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ipv6 unicast-routing

Y para la comprobación final de la conectividad, realizamos un ping hacia la loopback.

R1#ping 2001:A::1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:A::1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/167/620 ms

Comandos adicionales de comprobación de las rutas se muestran a continuación para hacer un mejor troubleshooting.

R1#show run | include ipv6 route
ipv6 route 2001:A::/64 FastEthernet0/0 2001::C002:24FF:FE74:0
R1#show ipv6 route static 
IPv6 Routing Table - 4 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
S   2001:A::/64 [1/0]
     via 2001::C002:24FF:FE74:0, FastEthernet0/0

R1#show ipv6 route 2001:A::
Routing entry for 2001:A::/64
 Known via "static", distance 1, metric 0
 Route count is 1/1, share count 0
 Routing paths:
 2001::C002:24FF:FE74:0, FastEthernet0/0
 Last updated 00:00:21 ago

Para finalizar, se deja una captura de un echo request y un echo reply del ping realizado hacia la dirección de la loopback0.

Echo Request:

echo-request

Echo Reply:

echo-reply