Cómo montar tu propio túnel IPv6 con OpenVPN

1 Mar

Siguiendo un poco con el post anterior sobre Proxmox, quizá necesitéis para vuestros proyectos de voz ip direccionamiento IPv6 pero vuestro operador no os lo ofrece, tampoco os fiáis de usar un tunnelbroker como sixxs.net o el de Hurricane Electric por aquello de que no sabéis por donde pasa vuestro tráfico y preferís tener vuestro propio túnel. Entonces este tutorial os servirá porque es lo que estáis buscando 🙂

En mi caso lo hice, primero por  aprender ;), por lo de fiarme o no de por donde viaje mi tráfico IPV6 (al usar un túnel lo enviáis a una dirección IPv4 de alguien que os lo transporta a IPv6) , tampoco era una preocupación, pero bien , siempre es mejor controlar por donde enviáis información, y cuantos menos saltos tengáis, mejor latencia en IPV6 tendréis.

Al usar tunnelbrokers la latencia se verá aumentada en la latencia que tengáis desde vuestra conexión al POP que os da la traslación a IPv6. Es decir si tenéis 50 ms a vuestro POP o servidor OpenVPN en nuestro caso, la latencia a chico.rediris.es por ejemplo, será de 50 ms+ la latencia de vuestro servidor al host destino, en el caso de online.net que es el que aquí ilustro, unos 29 ms más. Es decir estaremos entorno a los 80-90 ms al espacio de direcciones IPv6.

Si elegís un servidor o VPS con mejor latencia, esto os redundará en mejor latencia a direcciones IPv6 , en las que la navegación o aplicaciones sensibles a la latencia/Jitter como es la Voz sobre IP, se verán mejoradas.

Activaremos posibilidad de forwarding ipv6 en la máquina modificando /etc/sysctl.conf como sigue:

net.ipv6.conf.default.forwarding = 1

net.ipv6.conf.all.forwarding = 1

net.ipv6.conf.default.proxy_ndp = 1

net.ipv6.conf.all.proxy_ndp = 1

Lo primero es instalar una versión 2.3 de OpenVPN. En el caso de debían instala una 2.2 con parche para IPv6, pero os recomiendo usar 2.3 que tiene soporte ya nativo a IPv6 sin necesidad de parches adicionales.

Descargaremos los fuentes de openvpn.org, elegiremos la versión opensource entrando en Community y descargaremos la versión 2.3.2 en tar.gz por ejemplo.

Descomprimimos en nuestro servidor como suele ser habitual:

tar xvzf openvpn-2.3.2.tar.gz

y instalaremos dependencias que nos pueden ser necesarias si no las tenemos ya instaladas como son:

apt-get install build-essential

apt-get install openssl-dev

apt-get install libssl-dev

apt-get install liblzo2-dev

apt-get install libpam0g-dev

preparamos la compilación con ./configure y posteriormente make && make install

Una vez instalado simplemente tendremos que configurar como os muestro a continuación. Considero que tenéis ya direccionamiento IPv6 funcionando en vuestro servidor y asignado una  /48 por ejemplo. Este es el caso de los servidores de Online.net donde lo he probado.

Previo a esto es recomendable generar los certificados de los clientes que se conectarán al servidor OpenVPN. Podéis seguir este tutorial

Si tenemos Proxmox en la máquina deberemos asignarla en vmbr0.

vmbr0     Link encap:Ethernet  HWaddr e8:xx:xx:xx:xx:xx

inet addr:xxx.xxx.xxx.xxx  Bcast:xxx.xxx.xxx.xxx  Mask:255.255.255.0

inet6 addr: 2001:xxx:xxx:beaf::1/64 Scope:Global

inet6 addr: fe80::xxxx:xxxx:xxxx:826e/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:112471 errors:0 dropped:0 overruns:0 frame:0

TX packets:126542 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:38968923 (37.1 MiB)  TX bytes:145826711 (139.0 MiB)

En este caso tenemos una /48 para nosotros solos, que no son nada más y nada menos que 1208925819614629174706176 direcciones IPv6.

Las dividiremos en dos /64 una la dedicaremos a nuestro Proxmox remoto que obtendrá direccionamiento IPv6 mediante OpenVPN.

Por ejemplo 2001:xxx:xxx:deaf::1/64 será la que usemos, asignaremos al servidor OpenVPN 2001:xxx:xxx:deaf::1/64 y al extremo remoto por ejemplo 2001:xxx:xxx:deaf::2/64 , por tanto configuraremos OpenVPN como servidor como sigue:

 port 1194  # recomendable modificarlo

proto udp  # usamos UDP podéis hacerlo con TCP también 

dev tun

tun-ipv6  # activamos ipv6 en tun

push tun-ipv6

ca ca.crt

cert server.crt

key server.key  # This file should be kept secret

dh dh1024.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt # guardamos las direcciones asignadas para que se resignen 

iroute-ipv6 2001:xxx:xxxx:deaf::/64 # importante si no obtendremos errores de packet drop

ifconfig-ipv6 2001:xxx:xxxx:deaf::1 2001:xxx:xxxx:deaf::2 

ifconfig-ipv6-pool 2001:xxx:xxxx:deaf::2/64

push “dhcp-option DNS 8.8.8.8”

push “route-ipv6 2000::/3”

client-to-client  # activamos que entre los clientes puedan verse

comp-lzo

max-clients 10  # 10 clientes openvpn máximo

persist-key

persist-tun

status openvpn-status.log

verb 4

log         /var/log/openvpn-server.log

log-append  /var/log/openvpn.log

ping 15

ping-restart 45

ping-timer-rem

Con esto el cliente configurado como mostraremos ahora, obtendrá direcciones apartir de 2001:xxx:xxxx:deaf::2/64.

El cliente , recomendable que sera 2.3.2 como el servidor usaría la siguiente configuración. En este caso podría ser la máquina proxmox remota:

client

dev tun

tun-ipv6

proto udp

remote ip_publica_ipv4 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert usuario.crt

key usuario.key

comp-lzo

verb 10

resolv-retry 20

ping 15

ping-restart 45

ping 15

ping-timer-rem

Ejecutaremos el servidor en ambos lados mediante el script /etc/init.d/openvpn start y comprobaremos si todo funciona bien. Si hay algún error en el lado servidor es recomendable ver el fichero /var/log/openvpn-server.log donde nos puede dar idea de que estamos haciendo mal o si hay algún error en el fichero de configuración.

Si todo ha ido bien en el lado cliente tendremos nuestra flamante dirección IPv6 asignada:

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

inet addr:10.8.0.1  P-t-P:10.8.0.1  Mask:255.255.255.0

inet6 addr: 2001:xxx:xxxx:deaf::2/64 Scope:Global

UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1

RX packets:7304 errors:0 dropped:0 overruns:0 frame:0

TX packets:6268 errors:0 dropped:100 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:7757213 (7.3 MiB)  TX bytes:871478 (851.0 KiB)

Ahora empezaremos a asignar a nuestras máquinas Proxmox, direccionamiento IPv6. En este caso lo he hecho de forma estática, pero podríais usar radvd para asignarlas automáticamente o bien montar DHCPv6.

Recordar configurar forwarding como veíamos antes también en la máquina Proxmox remota para poder tener IPv6 funcional en los host KVM o OPENVZ que configuréis.

Para asignar a una máquina OPENVZ una dirección IPv6 hay que hacerlo desde la consola con el comando vzctl como sigue:

vzctl set 100 –save –ipadd 2001:xxx:xxxx:deaf::100/64 donde 100 es el ID de la máquina OPENVZ

Comprobamos entrando en el interfaz web de Proxmox:

Captura de pantalla 2014-03-01 a la(s) 14.57.11

 

Y si todo ha ido bien simplemente con hacer un ping6 desde el host veremos que todo funciona correctamente 🙂

root@asterisk:~# ping6 2001:720:418:caf1::3

PING 2001:720:418:caf1::3(2001:720:418:caf1::3) 56 data bytes

64 bytes from 2001:720:418:caf1::3: icmp_seq=1 ttl=52 time=87.2 ms

64 bytes from 2001:720:418:caf1::3: icmp_seq=2 ttl=52 time=87.4 ms

64 bytes from 2001:720:418:caf1::3: icmp_seq=3 ttl=52 time=87.0 ms

64 bytes from 2001:720:418:caf1::3: icmp_seq=4 ttl=52 time=87.6 ms

— 2001:720:418:caf1::3 ping statistics —

4 packets transmitted, 4 received, 0% packet loss, time 3004ms

rtt min/avg/max/mdev = 87.065/87.355/87.629/0.363 ms

root@asterisk:~#

Ni que decir tiene que en IPv6 ya no hay NAT, y un firewall iptables es OBLIGATORIO para no tener disgustos!

Espero que os sea de utilidad. Si tienéis alguna duda o consulta dejarla en comentarios.

Saludos

Leave a Reply

Your email address will not be published. Required fields are marked *