Admin Libre - Administración de sistemas y redes

Conectividad IPv6 desde IPv4 con un VPS y NAT66
Por Francisco Gaitán el 4 de Abril de 2022

Voy a usar un proveedor que tan sólo me facilita una dirección IPv6. Si tienes un rango mayor que /64 enrutado hacia tu servidor es mejor usar el método que explico en el artículo Conectividad IPv6 con una subred /56 y un túnel WireGuard.

Parto de la configuración VPN WireGuard con OpenBSD.

Dirección única local (ULA)

Usaré una dirección única local (RFC 4193) y NAT66. Para ello usaré este generador de direcciones únicas locales a partir de la MAC de un equipo de mi propiedad, obteniendo estos datos:

  • Red fdae:0d06:c54d::/48
  • Subredes /64 desde fdae:0d06:c54d:0::/64 hasta fdae:0d06:c54d:ffff::/64

Usaré estas direcciones:

  • Servidor remoto: fdb9:a1d2:585c:0::1/64
  • Máquina local: fdb9:a1d2:585c:0::100/64

Configuración de IPv6 en WireGuard

/etc/hostname.wg0 del servidor:

wgkey `cat /etc/wireguard/$(hostname).key` wgport 51820
wgpeer <clave-publica-cliente> wgaip fdb9:a1d2:585c:0::100/64 wgaip 10.0.0.0/8 wgpsk <clave-psk-compartida> 
inet 10.0.0.1/8 
inet6 fdb9:a1d2:585c:0::1/64
up

/etc/hostname.wg0 del cliente:

wgkey `cat /etc/wireguard/$(hostname).key`
wgpeer <clave-publica-servidor> wgendpoint 203.0.113.1 51820 wgaip ::/0 wgaip 0.0.0.0/0 wgpka 25 wgpsk <clave-psk-compartida> 
inet 10.0.0.3/8
inet6 fdb9:a1d2:585c:0::100/64
wgrtable 1
up
!route add -net default 10.0.0.1
!route add -inet6 default fdb9:a1d2:585c::1

Nada más con esto y una vez reiniciadas las interfaces wg0 en cada extremo ya se debería poder hacer ping6 entre cliente y servidor.

Configuración de IPv6 en el servidor

Esto depende de cada proveedor. Normalmente basta con añadir esto a /etc/hostname.vio0:

inet6 autoconf -soii -temporary

Para que funcione hay que permitir algunos tipos de ICMP6 (ver RFC 4890):

# RFC 4890 Section 4.3
#pass inet6 proto icmp6 all icmp6-type { 1 2 3 4 128 129 133 134 135 136 137 144 145 146 147 }
pass inet6 proto icmp6 all icmp6-type { 1 2 3 4 128 129 133 134 135 136 137 }

Activar el reenvío de IPv6

vpn# sysctl net.inet6.ip6.forwarding=1 
net.inet6.ip6.forwarding: 0 -> 1
vpn# echo "net.inet6.ip6.forwarding=1" >> /etc/sysctl.conf

A partir de aquí, una vez cargadas las nuevas reglas del firewall y levantando de nuevo las interfaces wg0 ya debe de haber conectividad IPv6, la cual se puede probar usando la herramienta ping6 sobre un host que soporte IPv6.

Configuración de NAT66

Copio aquí la línea clave de Packet Filter tanto para NAT como para NAT66, que va debajo de la directiva set skip:

pass out quick on egress from wg0:network to any nat-to (egress)

Configuración de DNS en el cliente

Para tener conectividad completa necesitas añadir los DNS IPv6 al archivo /etc/resolv.conf o como corresponda en tu sistema.

Prueba de conexión

Destacado

Contacto

Si has encontrado algún error o quieres comentarme algo mándame un correo a webmaster@adminlibre.org