Introducción

Recientemente conversando con un amigo (@TarantinDigital) me indicaba que le gustaría tener una VPN que soportara IPv4 e IPv6, que le parece una solución muy interesante para IoT.   Igualmente entre otras cosas ofrece la comodidad de tener direccionamiento IPv6 persistente (siempre el mismo bloque IPv6)

Importante

No voy a indicar los pasos para instalar o configurar OpenVPN.   Asumo tienes un servidor OpenVPN corriendo y en el servidor tienes direccionamiento IPv4 e IPv6   Nos enfocaremos en algunas entonaciones en el servidor y en el archivo server.conf   Este excelente video (en Ingles) ofrece paso a paso como instalar y configurar OpenVPN: https://www.youtube.com/watch?v=XcsQdtsCS1U

Pasos para agregar IPv6 a un servidor OpenVPN que actualmente ofrece solo IPv4

  1) Tu interfaz tun (o TAP) tiene que tener direccionamiento IPv6, OpenVPN tiene algunas restricciones en cuando a la longitud de prefijo (*máscara*) que puede utilizar en IPv6, para este ejemplo estaré utilizando un /64

ifconfig tun0 add 2001:db8::1/64

  2) Es necesario (para nuestro ejemplo, si utilizas un /64 global de IPv6 o direccionamiento IPv4 público no sería necesario) realizar NAT44 y NAT66:

NAT44

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT –to xx.xx.xx.xx

 NAT66

ip6tables -t nat -A POSTROUTING -o eth0 -s 2001:db8::/64 -j MASQUERADE #noten que en eth0 hay un IPv6 global

  3) Hay que agregar algunas directivas de IPv6 en el archivo /etc/openvpn/server.conf. Las mismas son las siguientes:

 proto udp6 #hará que el server maneje sockets v4 y v6

 server-ipv6 2001:db8::1/64 #dirección IP colocada a la interfaz tun en el server openvpn

tun-ipv6 #tipo de interfaz tunnel con IPv6

push tun-ipv6 #se le pide al cliente crear interfaces tun para el tunel (la VPN)

ifconfig-ipv6 2001:db8::1 2001:db8::2

push “route-ipv6 2000::/3” #Inyectamos la ruta en el cliente

4) Finalmente es necesario convertir el servidor VPN en un router IPv6. Para ellos editamos el archivo /etc/sysctl.conf y la linea net.ipv6.conf.all.forwarding=1 le quitamos el #

Del lado del cliente veras una interfaz similar a:

utun1: flags=8051 mtu 1500

inet 10.8.0.6 –> 10.8.0.5 netmask 0xffffffff

inet6 fe80::aebc:32ff:fe96:822b%utun1 prefixlen 64 scopeid 0xd

inet6 2001:db8::1001 prefixlen 64

Note que recibió una dirección IPv6 del mismo /64 de la interfaz tun del servidor.

Espero sea de tu utilidad

Referencias

OpenVPN video en youtube Hak5

NAT66 en Linux

Alejandro Acosta

@ITandNetworking @LACNICLabs