Problemas de enrutamiento con IPv6 sobre OpenVPN

1

Estoy tratando de configurar un servidor OpenVPN para permitir que los clientes usen su subred IPv6. El servidor ejecuta Debian Wheezy y el cliente es OS X 10.9.5. Aquí está la configuración del servidor:

port 1194
proto udp
dev tun
tun-ipv6
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
server 10.100.100.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
tls-auth ta.key 0
cipher DES-EDE3-CBC
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
server-ipv6 MY:PUBLIC:IPV6:SUBNET::/64
push "route-ipv6 0::/0"

Y aquí está la configuración del cliente:

client
dev tun
tun-ipv6
proto udp
remote server.address 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
comp-lzo
verb 3
tls-auth ta.key 1
cipher DES-EDE3-CBC

La conectividad IPv4 funciona a la perfección, pero hay algunos problemas extraños con IPv6. El cliente obtiene una dirección IPv6 cuando se conecta, pero lo único que responde a los pings (o acepta cualquier paquete IPv6) es el servidor en sí. Parece que los paquetes que se supone que van a Internet global no se enrutan a través de la interfaz adecuada en el servidor, que es eth0 en mi caso. La dirección IPv6 se asigna a eth0 estáticamente desde la subred proporcionada por mi proveedor de alojamiento y todo funciona desde el servidor; por ejemplo, puedo hacer ping a ipv6.google.com desde allí. Las opciones net.ipv6.conf.default.forwardingy net.ipv6.conf.all.forwardingsysctl también están habilitadas.

Grishka
fuente

Respuestas:

0

He estado luchando con el mismo problema y casualmente en Debian Wheezy también.

Hay dos opciones que puede haber perdido en este momento (en el servidor VPN):

  1. No hay ip6tablesreglas de reenvío
  2. No hay ruta IPv6 predeterminada

1) ip6tables

Al igual que con IPv4, necesita reglas de reenvío de firewall explícitas, esto funcionó para mí:

# ip6tables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# ip6tables -A FORWARD -i tun0 -o eth0 -j ACCEPT

(ajuste las interfaces en consecuencia, es posible que desee agregar -s VPN-IPv6-RANGE/SUBNETa la segunda regla para un reenvío más explícito).

2. ruta predeterminada

Este fue el problema de mi lado; Me llevó unos dos días antes de que alguien me hiciera repensar mi configuración y descubrí que me perdí un efecto secundario esencial de forwarding = 1sysctl.

Cuando configura net.ipv6.conf.all.forwarding = 1, se ignora la configuración automática de direcciones de los anuncios de enrutador. En otras palabras, cuando su defaultruta se configura a través de la configuración automática, esta ruta se cae bastante rápido y pierde la conectividad IPv6 a su servidor. Cuando su ruta predeterminada ahora es algo así default via fe80::..., este es probablemente el caso.

La solución para esto es agregar una ruta predeterminada explícita /etc/network/interfaces, como:

iface eth0 inet6 static
    address 2001:db8::2
    netmask 64
    gateway 2001:db8::1

Puede verificar si su configuración de VPN funciona (temporalmente) mirando la tabla de enrutamiento IPv6 en su servidor: ip -6 route show defaulty, cuando esté vacía, agregue la ruta predeterminada con ip -6 route add default via 2001:db8::1(ajústela en su rango local en consecuencia). Luego verifique si su cliente VPN puede hacer ping a alguna dirección IPv6 externa.

Configuración de OpenVPN

Una pequeña diferencia de configuración de mi lado es:

  • push "route-ipv6 2000::/3"( 2000::hasta 3fff:ffff...)

en vez de

  • push "route-ipv6 0::/0"

pero esas rutas son equivalentes en este momento.

mrngm
fuente
Gracias, probé las reglas de ip6tables pero eso no ayudó. De hecho, probé mi configuración usando netcat y resulta que los paquetes solo van en una dirección, desde mi cliente a Internet. Entonces puedo enviar pero no puedo recibir. El problema podría ser que el enrutador al que está conectado el servidor no permite que los paquetes VPN entrantes pasen al servidor.
Grishka
0

Entonces, descubrí que el enrutador ascendente no solo reenviará incondicionalmente los paquetes de toda mi subred asignada a mi servidor. Para que sepa reenviarlos, debe informarlo explícitamente a través del protocolo NDP. Esto debe hacerse cuando un cliente se conecta y se le asigna una dirección IPv6. Entonces, para resumir, así es como lo arreglé. Agregue esto a la configuración de OpenVPN en el servidor:

script-security 3
client-connect /etc/openvpn/client-connect.sh

Cree un script llamado /etc/openvpn/client-connect.sh con el siguiente contenido:

#!/bin/sh
ip -6 neigh add proxy $ifconfig_pool_remote_ip6 dev eth0

Reinicie OpenVPN. Conéctese al servidor y disfrute de su propia pieza del futuro de Internet.

Grishka
fuente