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.

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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.