miércoles, 9 de mayo de 2018

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 IPv4 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::/32 -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" #inyecta esta 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
  https://www.youtube.com/watch?v=XcsQdtsCS1U
  http://blog.acostasite.com/2014/07/nat66-en-linux.html





No hay comentarios:

Publicar un comentario

¿Algo adicional que quieras mencionar? ¿Algun consejo?, ¿truco? Gracias!

Una mejora práctica en el Transporte DNS sobre UDP en IPv6

Por Hugo Salgado y Alejandro Acosta Introducción y planteamiento del problema En el presente documento queremos discutir sobre un draft (bor...