![Servidor OpenVPN para conectar clientes a una segunda red](https://rvso.com/image/1672350/Servidor%20OpenVPN%20para%20conectar%20clientes%20a%20una%20segunda%20red.png)
Tengo dos redes domésticas aisladas. Uno conectado a Internet y otro para dispositivos IOT desconectados.
Conecté un servidor Ubuntu a ambas redes usando tarjetas de red separadas.
Verifiqué que puedo acceder a datos de dispositivos en ambas redes desde este servidor (usando el viejo curl
para recuperar solicitudes http). Y también puedo acceder a Internet desde él.
Luego instalé OpenVPN y lo configuré siguiendo las instrucciones deespacio de servidor.
El siguiente paso configuré un cliente y pude conectarme a este servidor VPN desde Internet.
Cuando el cliente está conectado puede acceder a Internet y a una de las redes internas, pero no a la otra.
desde el servidor vpn, al ejecutar route -n
obtengo:
0.0.0.0 12.12.1.1 0.0.0.0 UG 100 0 0 eno1
0.0.0.0 13.13.0.1 0.0.0.0 UG 200 0 0 eno2
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
12.12.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno1
12.12.1.1 0.0.0.0 255.255.255.255 UH 100 0 0 eno1
13.13.0.0 0.0.0.0 255.255.255.0 U 200 0 0 eno2
13.13.0.1 0.0.0.0 255.255.255.255 UH 200 0 0 eno2
El cliente vpn se conecta a la red 10.8.0.0
y se le asigna la dirección IP 10.8.0.2
.
El cliente vpn conectado:
- puede acceder a la red
12.12.1.0
- puede acceder a internet.
- No puedo acceder a ninguna dirección IP desde
13.13.0.0
...
¿Qué falta en mis configuraciones para permitir que los clientes VPN accedan a esta segunda red?
Actualizar
Intenté agregar los comandos NAT desde el script para eno2 (13.x), pero todavía no funcionó... Modifiqué el archivo creado /etc/iptables/add-openvpn-rules.sh
con el siguiente contenido (la parte antes del espacio fue creada automáticamente por el script):
#!/bin/sh
iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o eno1 -j MASQUERADE
iptables -I INPUT 1 -i tun0 -j ACCEPT
iptables -I FORWARD 1 -i eno1 -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o eno1 -j ACCEPT
iptables -I INPUT 1 -i eno1 -p udp --dport 1194 -j ACCEPT
iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o eno2 -j MASQUERADE
iptables -I FORWARD 1 -i eno2 -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o eno2 -j ACCEPT
iptables -I INPUT 1 -i eno2 -p udp --dport 1194 -j ACCEPT
corriendo iptables -S
obtuve lo siguiente después de reiniciar:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eno2 -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -i eno1 -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A FORWARD -i tun0 -o eno2 -j ACCEPT
-A FORWARD -i eno2 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -o eno1 -j ACCEPT
-A FORWARD -i eno1 -o tun0 -j ACCEPT
Respuesta1
Primero, el firewall en el servidor VPN (es decir, la cadena "FORWARD" de iptables) debe permitir el envío y la recepción de paquetes.
En segundo lugar, todos tus dispositivos deben tener rutas.atrása la red VPN; de lo contrario, solo reciben paquetes de los clientes VPN pero no tienen forma de responder a ellos.
Por ejemplo, los dispositivos en la red 12.12.* (o más comúnmente, no los dispositivos en sí sino la puerta de enlace de esa red) necesitarían una ruta "10.8.0.0/24 vía 12.12.1.1".
Si eso no es posible, su alternativa es hacer que el servidor VPN realice SNAT (es decir, "enmascaramiento" de la dirección de origen) entre las dos redes. Con SNAT, todos los paquetes de clientes VPNpareceen realidad provienen del propio servidor VPN (es decir, de 12.12.1.1), que en su caso está en la misma red que sus dispositivos y, por lo tanto, es algo a lo que los dispositivos ya saben cómo llegar.
Parece que el script de instalación de VPN que estabas usando (que nomuchode las cosas) en realidad agrega reglas SNAT de iptables para una interfaz; Los puedes encontrar en /etc/iptables/add-openvpn-rules.sh
(líneas 963-977en el guión). Las reglas relevantes se ven así, usando MASQUERADE
la acción iptables:
iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o $NIC -j MASQUERADE
junto con, por supuesto, reglas para permitir que los paquetes reenviados pasen en general:
iptables -I FORWARD 1 -i $NIC -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o $NIC -j ACCEPT
Como tiene dos redes en dos interfaces, necesita duplicar esas reglas (o reescribirlas de una manera diferente).