Lo que intento hacer es enrutar el tráfico IPv6 a través de un túnel vpn. De esa manera, debería poder usar IPv6 en una red que no sea compatible con IPv6.
Tengo un VPS que tiene un bloque IPv6 asignado. Parte de este bloque que quiero usar para clientes openvpn. El rango que tenía en mente era 2001:db8::111:800:0/112
(el prefijo es anónimo), porque openvpn solo admite / 64 y / 112 como subredes.
IPv6 a través del túnel ya está funcionando, desde el cliente, puedo hacer ping al servidor ( 2001:db8::111:800:1
), y también a las interfaces en el servidor ( 2001:db8::111:100:100
y 2001:db8:216:3dfa:f1d4:81c0
).
Sin embargo, cuando intento hacer ping a google.com desde el cliente, no obtengo respuesta (tiempo de espera de ping). Para depurar este problema, he usado tcpdump para capturar el tráfico en el servidor, y puedo ver los paquetes de ping saliendo, pero no hay respuestas que vuelvan. Agregar reglas de registro a ip6tables muestra lo mismo, paquetes saliendo, pero nada entrando.
Utilicé una herramienta de trazado de ruta en línea que obtiene un tiempo de espera de mi servidor. También intenté configurar la ip directamente en la interfaz, lo que hace que se 2001:db8::111:800:1001
pueda acceder a la ip ( ), así que creo que este es un problema de enrutamiento.
He habilitado el reenvío para ipv6 a través /proc/sys/net/ipv6/conf/all/forwarding
. ip6tables tiene políticas permitidas para todas las cadenas.
Mi pregunta es, ¿qué se necesita exactamente para que Linux acepte ese paquete para una IP que no está asignada a una interfaz y lo enruta más? Solo una ruta que existe no parece suficiente.
Aquí está la configuración para mi cliente y servidor. Hágale saber si se necesita más información.
Cliente
# ip -6 addresses
10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
inet6 2001:db8::111:800:1001/112 scope global
valid_lft forever preferred_lft forever
# ip -6 routes
2001:db8::111:800:0/112 dev tun0 proto kernel metric 256
2000::/3 dev tun0 metric 1024
Servidor
# ip -6 address
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2001:db8:216:3dfa:f1d4:81c0/64 scope global dynamic
valid_lft 86254sec preferred_lft 14254sec
inet6 2001:db8::111:100:100/128 scope global
valid_lft forever preferred_lft forever
12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
inet6 2001:db8::111:800:1/112 scope global
valid_lft forever preferred_lft forever
# ip -6 route
2001:db8::111:100:100 dev eth0 proto kernel metric 256
2001:db8::111:800:0/112 dev tun0 proto kernel metric 256
2001:db8::/64 dev eth0 proto kernel metric 256 expires 86194sec
default via fe80::230:48ff:fe94:d6c5 dev eth0 proto ra metric 1024 expires 1594sec
POSTROUTING ... MASQUERADE
en lanat
mesa. Pero no estoy seguro de entender por completo. ¿Estás tratando de tunelizar el tráfico IPv6? Si es así, ¿tiene las respectivas instalaciones establecidas? ¿Están-p ipv6
permitidos los paquetes en las reglas IPv4 (!)?TRACE
objetivo de tabla sin formato de iptables (tal vez no tanto aquí)ip neighbour
, yip route get
. Además, especifique quién está haciendo pinggoogle.ca
.Respuestas:
Debe indicarle a su enrutador que use su servidor para esta subred VPN: la solución correcta a su problema es agregar una ruta en el enrutador para la subred OpenVPN.
Si no puede hacer esto porque no puede tocar el enrutador, otra solución es configurar un proxy NDP para los clientes en el
eth0
enlace.Como está utilizando un VPS, probablemente no pueda agregar rutas al enrutador: probablemente tenga que usar la segunda solución.
Agregar una ruta para la subred
La solución correcta a su problema es decirle al enrutador que la subred VPN debe enrutarse a través del servidor OpenVPN (esto es para Linux):
Debe habilitar el reenvío de IPv6 en el servidor:
Proxy NDP
Parece que el enrutador está configurado para enviar todo su rango de IPv6 en el
eth0
enlace: puede configurar un proxy NDP.Debería ver las solicitudes NDP en la
eth0
interfaz del servidor para su subred OpenVPN cuando intente acceder al resto de Internet desde el cliente.También debe habilitar el reenvío IPv6 en el servidor y el proxy NDP:
sysctl -w net.ipv6.conf.all.proxy_ndp = 1
subred NDP proxy
El kernel de Linux no permite agregar un proxy NDP para una subred, sino solo para IP individuales. Puede usar un demonio (como ndppd para configurar un proxy NDP para una subred completa (nunca lo usó).
Por proxy IP NDP
Otra solución es agregar un proxy NDP para cada IPv6 de la subred VPN:
Esto debería funcionar ya que tiene una cantidad relativamente pequeña de IP en la subred OpenVPN.
Proxy NDP dinámico con ganchos OpenVPN
Debería poder usar enlaces de OpenVPN para agregar dinámicamente el proxy NDP.
Agregar gancho en el servidor OpenVPN conf:
Con el siguiente
learn-address
script:Ver este hilo .
Respuesta corta
fuente