Escenario IPv6 Básico
A lo largo de esta guía, exploraremos la configuración de un escenario básico utilizando redes IPv6 tanto en sistemas Linux como en dispositivos Cisco. Además, abordaremos la configuración de un servidor Apache aprovechando las capacidades de IPv6.
Linux Autoconfiguración IPV6
Conecta dos máquinas Linux al mismo switch y comprueba que tienen conectividad con IPv6 usando la dirección de enlace local.
Comprobaremos las IPV6 que tienen los distintos pcs . El PC1 tiene –> fe80::ef7:42ff:fe92:0/64
Mientras que el PC2 tiene –> fe80::e5f:61ff:feee:0/64
Estas dos direcciones se denominan de enlace local y se asignan automáticamente a cada interfaz de red . Este tipo solo nos permitirá comunicarnos con los dispositivos de nuestra red local y tienen el prefijo –> FE80::/10
Si hacemos un ping desde uno de estos a otros con la dirección de enlace local podremos comunicarnos :
SLAAC
Añade a la misma red una tercera máquina Linux y configúrala como router de forma que dé direcciones IPv6 globales a las otras dos usando SLAAC. No olvides instalar RADVD. Comprueba que tienen conectividad.
Lo primero que haremos sera configurar la interfaz de red por ipv6 de nuestro router en este caso le asignare el prefijo 3333:db7::
Calculamos la parte fija de nuestra dirección :
R1 –> 0c:01:30:a0:00:00 –> 0c:01:30:ff:fe:a0:00:00 –> 0E:01:30:FF:FE:A0:00:00
Editamos el interfaces y aplicamos la configuración de nuestra tarjeta de red :
Reiniciamos al servicio y tendríamos una direccion global :
SLAAC(Stateless Address Autoconfiuration) es un mecanismo de configuración único para IPV6 no existe un equivalente en IPV4. El cual nos permite que los nodos de nuestra red se configuren automáticamente .
A partir de la dirección de enlace local que tienen todos los host , mediante el protocolo neighbour discovery solicita si hay algún router dentro de la red local le facilite los parámetros de configuración de la red
Lo primero que haremos para configurar SLAAC sera instalar el paquete radvd :
Si miramos el estado del demonio este nos dirá que no encuentra su fichero de configuración :
Así que le generaremos uno indicándole la interfaz que va a repartir direcciones y además le diremos el comportamiento que tendrá en nuestra red :
MinRtrAdvInterval : Indica el tiempo mínimo en segundos por el cual el router mandara un mensaje en segundos .
MaxRtrAdvInterval: Indica el tiempo máximo en segundo por el cual el router mandara un mensaje .
AdvSendAdvert: Indica si por la interfaz se mandaran avisos o no .
AdvManagedFlag: Indica si queremos que el servicio utilice DHCPv6(on) o no (off) .
Prefix: Indica el prefijo de red que usara SLAAC para asignar direcciones .
AdvValidLifetime: Indica el tiempo en segundos que una dirección IPV6 sera valida.
AdvPreferredLifetime: Indica el tiempo en segundos que una dirección generada a partir del prefijo sera preferida en lugar de otras direcciones .
Una vez hecho esto reiniciamos el servicio y el demonio comenzara a configurar a nuestros clientes :
Además deberemos de configurar el bit de forwarding para ipv6 en nuestro router , al igual que con ipv4 editamos el archivo /etc/sysctl.conf :
Mensajes de SLAAC
Podemos ver como se ha configurado el PC1 usando SLAAC :
También el PC2 se ha configurado :
Vamos a estudiar los mensajes que han intervenido en esta configuración de SLAAC , si los numeramos como en esta captura de Wireshark :
- Router solicitation (RS) (No aparece en la captura) : El PC le envía un mensaje de RS a todos los routers para indicar que necesita un RA , este mensaje se envía si no recibe ningún RA pasado un tiempo.
- Router Advertisement (RA): Una vez el router recibe el RS o periódicamente envía un RA en el cual se incluye el prefijo de la red y su longitud . El mensaje RA se envía a la dirección IPv6 de multidifusión de todos los nodos, FF02::1, con la dirección link-local del router como la dirección IPv6 de origen. (N0 6 y 12).
- Multicast Listener Report Message v2:Indica que el dispositivo x ha iniciado una sesión de escucha para trafico multicast (No 7 y 9).
- Neighbor Solicitation (NS): Se utiliza para conocer la dirección MAC de un dispositivo de tu red , es similar al protocolo ARP .(No 10,11,613).
- Neighbor Advertisement (NA) : Es el mensaje de respuesta de un NS (No 614).
Una vez que el cliente a recibido un RA , este procede a configurar su dirección IPV6 , con un prefijo de red de 64 bits pero necesita una IID(Interface Identifier) .
Hay dos maneras en las que los clientes pueden crear su propia IID única:
- EUI-64: mediante el proceso EUI-64, la PC1 crea una IID utilizando su dirección MAC de 48 bits.
- De generación aleatoria: la IID de 64 bits puede ser un número aleatorio generado por el sistema operativo cliente.
Dado que SLAAC es un proceso sin estado, para que los clientes pueda utilizar esta dirección IPv6 creada recientemente, debe verificar que sea única. El cliente enviara un NS con su propia dirección como la dirección IPv6 de destino. Si ningún otro dispositivo responde con un mensaje de anuncio de vecino, la dirección es única y puede ser utilizada por el cliente. Si este recibe un NA, la dirección no es única, y el sistema operativo debe determinar una nueva ID de interfaz para utilizar.
Este proceso forma parte de la detección de vecinos ICMPv6 y se conoce como “detección de direcciones duplicadas (DAD)”.
Esta imagen explica la configuración de una interfaz por SLAAC. Ahora vamos a comprobar que los distintos clientes tienen conectividad entre si :
PC1 –> 3333:db7::ef7:42ff:fe92:0
PC2 –> 3333:db7::e5f:61ff:feee:0
R1 –> 3333:db7::e01:30ff:fea0:0
Router 1 :
PC2:
Tenemos que tener en cuenta que estas “concesiones” de direcciones no se almacenan en ningún sitio , es decir en el servidor no almacenamos las configuraciones que ha realizado el servicio .
DHCPv6 con SLAAC
Cambia la configuración para que utilice DHCPv6 en vez de SLAAC enviando también los servidores DNS. Comprueba que las máquinas tienen conectividad.
Para ello nos instalamos el servidor DHCPv6 , el paquete es el mismo para ipv4 :
Editamos el fichero de configuración para IPV6 –> sudo nano /etc/dhcp/dhcpd6.conf:
En el fichero /etc/default/isc-dhcp-server indicaremos no solo la interfaz que queremos repartir direcciones si no también especificaremos que el servidor funcionara por IPV6 :
Reiniciamos el servicio y comprobamos que esta funcionando con los parámetros que le hemos asignado en la configuraron :
Vamos a comprobar que los clientes se configuraran usando ipv6 , para ello la configuración en el network interfaces es bastante similar a IPV4 :
Reiniciamos el servicio networking.service y obtendremos la configuración por DHCP en la tarjeta :
Además también podemos ver las concesiones el fichero de concesiones , en el servidor en la siguiente ruta /var/lib/dhcp/dhcpd6.leases :
No lo he mencionado anteriormente pero para que al producirse la configuración el cliente obtenga los parámetros que hemos configurado por DHCPv6 tendremos que poner este parámetro a ON en el fichero de configuración de SLAAC :
Como podemos ver el único parámetro que hemos especificado en el servidor DHCP a sido el DNS de google ha sido correctamente configurado en nuestro cliente :
Mensajes DHCPv6 con SLAAC
Acabamos de configurar SLAAC y DHCPv6 sin estado , esto significa que :
- Usa SLAAC para obtener una dirección IPV6 de tipo global unicast , además de la puerta de enlace .
- Usa el servidor DHCPv6 sin estado, para el resto de parámetros de configuración de nuestra red .
Es decir hemos configurado la segunda opción de la siguiente imagen :
Si observamos la captura de Wireshark y la comparamos con la configuración única de SLAAC :
Operaciones de SLAAC:
- Podemos ver que el PC1 a solicitado un RS , a todos los routers de la red (Multicast)
- R1 le responde a PC1 con un RA(Indica si necesitara comunicarse con un DHCPv6 con estado o sin estado)
- NS , para comprobar que la dirección asignada no esta duplicada
Operaciones de DHCPv6:
- Solicit a todos los servidores DHCPv6 de la red (Multicast a ff02::1:2) incluye un identificador de cliente CID.
- Advertise : Es la respuesta del servidor DHCPv6 a un solicit , este incluye las opciones de configuración oportunos , incluido una IPv6 . También incluye un CID y un XID(Id transacción).
- Request: El cliente envía este mensaje a todos los servidores DHCPv6 para indicar que desea los parámetros ofertados en el Adverstise . También incluyen CID y XID.
- Reply: El servidor DHCPv6 responde y confirma que la dirección ha sido asignada así como todos los parámetros adicionales de configuración .También incluyen CID y XID.
Aquí te dejo una imagen en la que se observa el orden de los mensajes que hemos recibido y una breve descripción del mismo , además nos indica si los mensajes son unicast o multicast :
Apache en IPV6
Para las versiones de Apache superiores a 2.X tienen soporte para IPV6 habilitado por defecto así que al instalar el servicio ya estaremos escuchando por este protocolo sin necesidad de realizar ninguna configuración adicional en el servicio .
Podemos comprobar si al instalarlo nuestro servidor esta escuchando por ese puerto :
En el caso de que creemos un virtualhost podemos especificar como queremos que trabajen si usando ambos protocolos IPV6 y IPV4 o solo uno de ellos . Vemos que ssh también utiliza ipv6 por defecto .
Acceso al servidor web desde dentro de la red
Vamos a acceder desde las maquinas de nuestra red en mi caso lo he montado en el router ya que es el único que tiene acceso a internet en este escenario .
Me conectare a el utilizando la direccion global pero podríamos usar la local sin problema ya que pertenecemos a la misma red local .
Acceso desde PC2:
Acceso al servidor web desde fuera de la red
Para esto deberemos de configurar R1 y ‘PC3’ en la misma red usando IPV6 :
PC3:
R1:
Le haremos la petición a PC1 desde PC3 que esta fuera de esa red local , como vemos no es necesario hacer NAT .
Incluso puedo hacerle ping a un host desde otra red :
Si analizamos estas peticiones con Wireshark podemos ver que en ningún momento se produce NAT:
Fuera de la red :
Dentro de la red:
Por supuesto un host de nuestra red local puede acceder al servidor web :
CISCO
Configuración de un router cisco en IPV6
Lo primero que haremos sera calcular la direccion IPV6 que le corresponden a las MACS :
F 0/0 –> CA:01:6C:FA:00:00 –> CA:01:6C:FF:FE:FA:00:00 –> C801:6CFF:FEFA:0
F 1/0 –> CA:01:6C:FA:00:1C-→ CA:01:6C:FF:FE:FA:00:1C –> C801:6CFF:FEFA:001C
Para que nuestro router se configure usando SLACC y no tengamos que hacer esto manualmente introduciremos los siguientes comandos para cada una de las interfaces que queramos que se configuren por SLAAC :
También deberemos de indicarle no shut para que se levante la interfaz .
Con el siguiente comando comprobaremos que nuestro router se ha configurado correctamente automáticamente usando SLAAC :
Ya con las direcciones de enlace local tendremos conectividad con el router :
SLAAC
Ahora vamos a hacer que el router configure a los clientes usando SLAAC .
Vamos a configurar una dirección global a nuestro router en la interfaz que da a la red que queremos darle este servicio , con el prefijo de red : 3333:db7::
Vamos a utilizar EUI-64 para configurar nuestras interfaces :
FastEthernet 0/0 –> 3333::C801:6CFF:FEFA:0/64
FastEthernet 1/0 –> 2222::C801:6CFF:FEFA:1C/64
Comprobamos las direcciones IPV6 se han “generado” correctamente :
Para que el router nos configure a los clientes deberemos de introducir el siguiente comando este , hará que nuestro router mande RA y conteste a las peticiones de RS:
Una vez hecho esto nuestros clientes se habrán configurado correctamente :
PC1:
PC2:
Los mensajes que se han producido al configurar los clientes :
Router solicitation (RS): El PC le envía un mensaje de RS a todos los routers para indicar que necesita un RA , este mensaje se envía si no recibe ningún RA pasado un tiempo.
Router Advertisement (RA): Una vez el router recibe el RS o periódicamente envía un RA en el cual se incluye el prefijo de la red y su longitud . En el caso de que el router responda a un RS este le envía un RA especifico al host que lo ha solicitado . En el caso de que sea un mensaje RA periódico se envía a la dirección IPv6 de multidifusión de todos los nodos, FF02::1, con la dirección link-local del router como la dirección IPv6 de origen.
Neighbor Solicitation (NS): Se utiliza para conocer la direccion MAC de un dispositivo de tu red , es similar al protocolo ARP .
Neighbor Advertisement (NA) : Es el mensaje de respuesta de un NS .
DHCPv6 con SLAAC
Configurar un servidor de DHCPv6 con estado es similar a configurar un servidor sin estado. La diferencia más importante es que un servidor con estado también incluye información de direccionamiento IPv6 de manera similar a un servidor DHCPv4.
Lo primero que tendremos que hacer sera para habilitar el routing IPv6. Este comando no es necesario para que el router sea un servidor de DHCPv6 con estado, pero se requiere para que el router origine los mensajes RA ICMPv6.
–> ipv6 unicast-routing
Lo tenemos configurado en el apartado anterior así que no lo volveremos a hacer . Configuraremos un pool DHCPV6 :
Con DHCPv6 con estado, todos los parámetros de direccionamiento y otros parámetros de configuración deben ser asignados por el servidor de DHCPv6. El comando address prefix se utiliza para indicar el conjunto de direcciones que debe asignar el servidor. La opción lifetime indica el tiempo de arrendamiento válido y preferido en segundos. Al igual que con DHCPv6 sin estado, el cliente utiliza la dirección IPv6 de origen del paquete que contenía el mensaje RA.
Le indicamos el prefijo de red y el tiempo de vida de cada dirección :
Ahora le indicamos los servidores DNS :
Aun podemos configurar mas parámetros como el nombre del dominio pero en mi caso solo me interesa esto , así que procederemos a indicarle en que interfaz tiene que funcionar el servicio :
Ahora comprobaremos que el servidor DHCP , esta funcionado en nuestra interfaz :
Veremos como en el cliente se ha asignado el servido DNS:
Y la concesión en el servidor DHCP :
Operaciones de SLAAC:
- Podemos ver que el PC2 a solicitado un RS , a todos los routers de la red (Multicast)
- R1 le responde a PC1 con un RA(Indica si necesitara comunicarse con un DHCPv6 con estado o sin estado)
Operaciones de DHCPv6:
- Solicit a todos los servidores DHCPv6 de la red (Multicast a ff02::1:2) incluye un identificador de cliente CID.
- Advertise : Es la respuesta del servidor DHCPv6 a un solicit , este incluye las opciones de configuración oportunos , incluido una IPv6 . También incluye un CID y un XID(Id transacción).
- Request: El cliente envía este mensaje a todos los servidores DHCPv6 para indicar que desea los parámetros ofertados en el Adverstise . También incluyen CID y XID.
- Reply: El servidor DHCPv6 responde y confirma que la dirección ha sido asignada así como todos los parámetros adicionales de configuración .También incluyen CID y XID.
Acceso al servidor web desde dentro de la red
Desde nuestra red local podremos hacer la petición al servidor web usando tanto la dirección local de enlace como la dirección global :
Acceso al servidor web desde fuera de la red
SWEB –> 3333:db7::ef7:42ff:fe92:0
Vemos que con la configuración anterior que teníamos en apache podemos acceder sin problema al servidor web desde una maquina de fuera de nuestra red :
Configuración básica de apache para IPV6
Como comentaba antes no es necesario a partir de la version 2.X en adelante de configurar nada adicionalmente en apache para que nuestro servidor funcione usando el protocolo IPV6 ya por defecto este escucha en IPV4 y IPV6 .
Sin embargo podemos configurar para que este solo escuche por IPV6 , para ello deberemos de realizar una simple configuración en el servicio . Accederemos al fichero –> /etc/apache2/ports.conf
Comentaremos la linea Listen 80 ya que hace referencia a IPV4 y le añadiremos la referente a ipv6.
Con esta configuración escucharemos todas las peticiones de cualquier dirección IPV6 , en los corchetes podemos especificar una dirección para responderle peticiones solo a esta .
Ahora accederemos a nuestro host virtual y cambiaremos la declaración de este , al igual que hemos hecho arriba modificando la etiqueta que hace referencia a todas las direcciones IPV4 y la cambiaremos por esta para hacer referencia a todas las direcciones IPV6 por el puerto 80 :
Ahora reiniciaremos el servicio apache y comprobaremos que el estado del mismo es exitoso :
Con esto ya nuestro servidor apache funcionaria solo en IPV6 :