
Estoy intentando configurar una VPN doméstica antes de viajar durante las vacaciones.
Tengo un servidor OpenVPN que utiliza una configuración TAP que se ejecuta correctamente y puedo conectarme a él con un cliente.
Sin embargo, tengo problemas para enrutar el tráfico del cliente a través de él.
redirect-gateway
No me funciona la opción. Por ahora, lo dejaré e intentaré configurar mis rutas manualmente.
Mi enfoque ha sido ejecutar primero un cliente DHCP (dhcpcd) en la interfaz tap y luego intentar agregar rutas manualmente.
# dhcpcd tap0
dhcpcd-9.4.1 starting
...
tap0: rebinding lease of 192.168.1.137
tap0: probing address 192.168.1.137/24
tap0: leased 192.168.1.137 for 86400 seconds
tap0: adding route to 192.168.1.0/24
forked to background, child pid 11185
Las rutas que configura el cliente DHCP funcionan bien para las IP internas. Puedo hacer ping/ssh a computadoras en mi red doméstica. Estoy probando esto desde una conexión celular conectada.
# ip route
default via 192.168.149.13 dev wlan0 proto dhcp src 192.168.149.193 metric 600
192.168.1.0/24 dev tap0 proto dhcp scope link src 192.168.1.137 metric 1052
192.168.149.0/24 dev wlan0 proto kernel scope link src 192.168.149.193 metric 600
# ping 192.168.1.136 # another IP on my network
PING 192.168.1.136 (192.168.1.136) 56(84) bytes of data.
64 bytes from 192.168.1.136: icmp_seq=1 ttl=64 time=104 ms
64 bytes from 192.168.1.136: icmp_seq=2 ttl=64 time=83.5 ms
...
Si agrego manualmente rutas IP para hosts de Internet usando la IP de puerta de enlace de mi red doméstica, puedo acceder a ellas a través de OpenVPN.
(nota: se supone que 175.55.55.55 es mi conexión celular conectada y 72.33.33.33 debe ser la IP de mi casa)
# curl -4 https://icanhazip.com
175.55.55.55
# host -t a icanhazip.com
icanhazip.com has address 104.18.115.97
icanhazip.com has address 104.18.114.97
# ip route add 104.18.115.97 via 192.168.1.1
# ip route add 104.18.114.97 via 192.168.1.1
# curl -4 https://icanhazip.com
72.33.33.33
El problema es que no sé cómo generalizar esto a todo el tráfico.
Intenté agregar rutas generales para pasar el tráfico a través de la VPN:
# ip route add 0.0.0.0/1 via 192.168.1.1 dev tap0
# ip route add 128.0.0.0/1 via 192.168.1.1 dev tap0
Cuando intento acceder a icanhazip.com nuevamente, se agota el tiempo de espera y los registros del cliente OpenVPN dicen:
2022-12-15 15:27:38 us=127602 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445
2022-12-15 15:27:38 us=122602 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445
2022-12-15 15:27:38 us=147702 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445
Puedo proporcionar el registro o las configuraciones del cliente (o del servidor) si eso fuera de ayuda, pero creo que probablemente se trate más de un problema de enrutamiento.
Respuesta1
Ah, claro.
@TomYan me ayudó a resolverlo.
El cliente OpenVPN se estaba comunicando con el servidor OpenVPN a través del wlan0
dispositivo.
Cuando anulé la wlan0
ruta como predeterminada (o efectivamente predeterminada, usando direcciones 0.0.0.0/1
y 128.0.0.0/1
) e intenté enviar todo el tráfico a través del tap0
dispositivo vpn, eso también incluyó el tráfico OpenVPN.
El mensaje de "enrutamiento recursivo" era correcto.
Si hubiera estado usando TCP, probablemente habría notado el problema antes, ya que la conexión se habría agotado tan pronto como puse esas rutas allí.
La solución es agregar explícitamente una ruta de dirección única que permita al cliente OpenVPN llegar al servidor.
Inmediatamente después de DHCP las rutas tienen:
# ip route
default via 192.168.149.13 dev wlan0 proto dhcp src 192.168.149.193 metric 600
192.168.1.0/24 dev tap0 proto dhcp scope link src 192.168.1.137 metric 1052
192.168.149.0/24 dev wlan0 proto kernel scope link src 192.168.149.193 metric 600
La dirección de mi servidor OpenVPN es 72.33.33.33
, por lo que agregaré manualmente una ruta a través de la puerta de enlace wlan0 mencionada en el valor predeterminado anterior:
# ip route add 72.33.33.33 via 192.168.149.13 dev wlan0
Y ahora mis dos rutas generales funcionarán:
# ip route add 0.0.0.0/1 via 192.168.1.1 dev tap0
# ip route add 128.0.0.0/1 via 192.168.1.1 dev tap0
# curl -4 https://icanhazip.com
73.33.33.33