Servidor OpenVPN para conectar clientes a una segunda red

Servidor OpenVPN para conectar clientes a una segunda red

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 curlpara 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 -nobtengo:

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.0y se le asigna la dirección IP 10.8.0.2.

El cliente vpn conectado:

  • puede acceder a la red12.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.shcon 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 MASQUERADEla 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).

información relacionada