IPv4 e IPv6 en una sola VPN utilizando OpenVPN
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
Alejandro Acosta