Bridge IPv6 con OpenVPN, segunda parte

Como hoy me encuentro inspirado, y Saúl me recordó el otro día que tenía algo pendiente, vamos a completar la historia que iniciamos el otro día.

Así que ahora nos toca configurar el cliente VPN cuya configuración es idéntica a la que usaríamos para conectarnos a un servidor OpenVPN cualquiera salvo que en lugar de usar interfaces tun los usaremos del tipo tap:

apardo@bonemachine:/etc/openvpn$ cat debaser.conf
client
dev tap
proto udp
remote vpn.theprimusproject.com 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca keys/ca.crt
cert keys/bonemachine.theprimusproject.com.crt
key keys/bonemachine.theprimusproject.com.key
tls-auth keys/ta.key 1
ns-cert-type server
comp-lzo
verb 3

Con esto ya tendríamos conectividad IPv4. Dejamos como ejercicio para el lector configurar qué interfaces levantamos según la red en la que nos encontremos. Para tal fin yo suelo usar laptop-net, disponible como paquete Debian.

Ahora necesitamos conectividad IPv6 con Internet, si nuestro proveedor no nos la ofrece deberemos buscar alguien que nos de el servicio. Lo ideal para tener tiempos de respuesta no muy elevados sería conectar con el servicio más cercano a la red que nos encontremos pero como yo conocía go6, antes Freenet6, y la conexión IPv6 con Internet no es algo que ahora me preocupe mucho, decidí crearme una cuenta en este proveedor. La creación de la cuenta es necesaría si quieres disponer de un prefijo /64 para extender el direccionamiento allá donde quieras. Para conectar a go6 en Debian disponemos del paquete tspc que implementa el protocolo usado por este servicio y facilita la creación del interfaz de red, rutas, etc. La configuración no tiene mucho misterio:

apardo@debaser:/etc/tspc$ cat tspc.conf
auth_method=any
client_v4=auto # si nuestra dirección pública es dinámica
userid=your_go6_user
passwd=very_secret_password
template=setup
server=broker.freenet6.net
retry_delay=30
tunnel_mode=v6anyv4
if_tunnel_v6v4=sit1
proxy_client=no
keepalive=yes
keepalive_interval=30
syslog_facility=DAEMON
syslog_level=INFO
host_type=router
prefixlen=48
if_prefix=br0

Ahora necesitamos asignar el direccionamiento IPv6 al servidor OpenVPN y a los clientes de la VPN o la LAN. OpenVPN permite ejecutar cualquier script al iniciarse así que vamos a aprovechar esta funcionalidad para configurar el direccionamiento IPv6. go6 me asignó la red 2001:5c0:9706/64 así que vamos a configurarla primero en el servidor y luego en los clientes:

apardo@debaser:/etc/openvpn$ grep up server.conf
up ./server.up.sh
apardo@bonemachine:/etc/openvpn$ cat server.up.sh
#!/bin/sh
ip -6 addr add 2001:5c0:9706::1/64 dev br0
apardo@bonemachine:/etc/openvpn$ grep up debaser.conf
up ./debaser.up.sh
apardo@bonemachine:/etc/openvpn$ cat debaser.up.sh
#!/bin/sh
ip -6 addr add 2001:5c0:9706::2/64 dev $1
ip -6 route add 2000::/3 via 2001:5c0:9706::1 dev $1

Como el bridge de la VPN ademas es nuestro router IPv6 es aconsejable configurar algunos parámetros de su kernel.

apardo@debaser:~$ cat /etc/sysctl.conf
# See sysctl.conf (5) for information.
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.router_solicitations = 0
apardo@debaser:~$

Encontrar información en la Red sobre el significado de estos parámetros es fácil. Bueno, ya tenemos gran parte de la historia configurada. Solo nos queda aplicar algunas reglas de filtrado con ip6tables, configurar la resolución inversa DNS que go6 nos delega para la red que nos asignó, añadir algunos registros AAAA y ver configurar básicamente algunos servicios como SMTP, IMAP o HTTP. Lo veremos en la próxima entrega.

PD: Me da la impresión de que esto ya lo escribí hace 6 años :)

2 Responses to “Bridge IPv6 con OpenVPN, segunda parte”

  1. Saúl Ibarra Says:

    Muy bueno el documento! Quizá un día que me sienta más friki de lo habitual migre la red de mi casa a ipv6 :)

  2. Antonio Pardo Says:

    Si quieres migrar por completo necesitaras que tu router a Internet traduzca de IPv6 a IPv4 y viceversa :)

Leave a Reply