
Tengo tres máquinas que intento coordinar a través de una conexión TUN.
FREEBSD
cuadro que ejecuta el servidor OpenVPN (tun)
10.0.200.21/24 en la subred local
10.0.202.1/24 en VPN
REMOTE
IP pública
10.0.202.6/24 en VPN
WEBSERVER
10.0.200.31/24 en subred local
Puedo acceder REMOTE
a VPN FREEBSD
a través de OpenVPN y la conexión está bien, pero está configurada incorrectamente. Cuando intento conectarme desde REMOTE
a WEBSERVER
escribiendo WEBSERVER
la dirección IP de en REMOTE
el navegador, WEBSERVER
no puedo acceder. Es accesible si lo conecto REMOTE
directamente a la subred local.
Aprendí lo siguiente mientras solucionaba problemas.
REMOTE
puede hacer pingFREEBSD
e incluso SSH.- Una captura de paquetes configurada en
FREEBSD
el puerto Ethernet de no captura paquetes desde o haciaREMOTE
la IP VPN de 10.0.202.6. Entonces los paquetes de REMOTE no llegan a la subred local. - Elopenvpn.logarchivo en
FREEBSD
tiene la siguiente línea:GET INST BY VIRT: 10.0.200.31 [failed]
Entonces, parece que OpenVPN no reenvía los paquetes recibidos en el dispositivo TUN al FREEBSD
adaptador Ethernet de ni a la subred local.
Tengo la siguiente línea en mi archivo server.conf.
push "route 10.0.200.0 255.255.255.0"
Intenté agregar esta línea pero no ayudó.
route 10.0.200.0 255.255.255.0
Aquí está la tabla de enrutamiento enFREEBSD
Tablas de enrutamiento Internet: Destino Puerta de enlace Banderas Refs Usar Netif Caducar predeterminado 10.0.200.1 UGS 0 4306 re0 10.0.200.0 enlace#9 U 0 61582 re0 10.0.200.21 enlace#9 UHS 0 41 lo0 10.0.201.0 10.0.200.1 UGS 0 0 re0 10.0.202.0 10.0.202.2 UGS 0 0 tun0 10.0.202.1 enlace#12 UHS 0 0 lo0 10.0.202.2 enlace#12 UH 0 0 tun0 enlace de host local#11 UH 0 193743 lo0
Leí en línea sobre el GET INST BY VIRT: 10.0.200.31 [failed]
mensaje y se recomendó que las máquinas Linux ejecutaran el siguiente comando.
echo 1 > /proc/sys/net/ipv4/ip_forward
Tengo miedo de ejecutarlo porque no lo entiendo y no quiero entrar FREEBSD
en una configuración extraña. También prefiero una solución que modifique el archivo server.conf para crear automáticamente la configuración necesaria para que se administre y elimine adecuadamente cuando se cierre OpenVPN.
¿Cuál es la solución a este problema?
Respuesta1
Encontré el problema. Resulta que FreeNAS, el software del dispositivo NAS basado en FreeBSD y al que me refiero anteriormente FREEBSD
, tiene el net.inet.ip.forwarding
valor 0. Esto se puede ver usando el comando sysctl -a | grep net.inet.ip.forwarding
. Para poder reenviar los paquetes, tuve que hacer un archivo sysctl net.inet.ip.forwarding=1
.
Este cambio no persiste durante los reinicios. Creo que tendré que usar el archivo /etc/rc.conf y configurarlo gateway_enable="YES"
, pero hasta ahora he descubierto que esta configuración no se procesa hasta el reinicio y, desafortunadamente, en FreeNAS, rc.conf parece sobrescribirse en cada reinicio. Es posible escribir esta variable en /etc/defaults/rc.conf, que se supone que almacena los valores predeterminados para el sistema y se sobrescribe con configuraciones personalizadas en rc.conf, pero /etc/defaults/rc.conf El archivo tiene una advertencia en la parte superior para no editarlo.
Entonces, este problema no está totalmente resuelto, pero al menos he descubierto cuáles parecen ser los problemas. Ahora que entiendo esto, noto un problema al iniciar sesión en dispositivos de administración web https en la subred local. Ése será otro problema a resolver.
Respuesta2
Bien, entonces su cliente VPN tiene una ruta para llegar a la 10.0.200.0/24
red y su servidor VPN tiene una ruta. Pero la pregunta es: ¿su servidor web 10.0.200.31
tiene una ruta para llegar a la 10.0.202.0/24
red?
Haga un tcpdump en el cuadro freebsd. Sospecho que verá 10.0.202.6
que se reenvía el tráfico de su host, pero no verá ningún tráfico de retorno.