Pregunta Configuración de enrutamiento para el servidor OpenVPN en Amazon EC2


Desarrollador de software aquí, intentando que su administrador de sistemas esté en funcionamiento configurando un servidor OpenVPN en amazon EC2 para acceder a todos los recursos internos allí. Así es como lo visualizo en una nueva AMI canónica de Ubuntu 12.04:

   Local network          /        EC2 Cloud, 10.*.*.*/255.0.0.0
  172.16.20.*/          ,'
     255.255.255.0     ,'                +-----------------+
                      .'                 |Amazon DNS server|
                      |                ,'|  172.16.0.23    |
 +---------------+   |               ,'  +-----------------+
 | Workstation   |   |             ,'
 |               XXX |   +-------,'------+
 | 172.16.20.1   |  XXXX | OpenVPN server|
 +------`.-------+   \  XX  10.23.45.67  `-.  +-------------+
          \          '.  +---------------+  `-. Second server
  +--------`.---+     |                       | 10.23.45.68 |
  |Local server |      \                      +-------------+
  | 172.16.20.2 |       \
  +-------------+        \

Los clientes pueden conectarse a la VPN (incluso en el iPhone), pero estoy teniendo problemas para obtener una descripción general de los subsistemas que necesito verificar.

Aquí están mis metas para la configuración:

  • Los clientes VPN deben poder acceder a los recursos internos a través de la VPN, el resto de Internet debe enrutarse a través de la puerta de enlace local
  • Los clientes VPN deben poder acceder a todos los servidores a los que puede acceder el servidor OpenVPN
  • Los clientes VPN deben usar el servidor DNS de Amazon en 172.16.0.23 como su servidor dns principal, porque ese servidor resuelve los nombres de host generados de Amazon a direcciones IP internas (es decir, ec2-45-67-8-9.eu-west-1.compute.amazonaws.com resolvería a 10.23.45.67 cuando sea resuelto por ese servidor, pero a 45.67.8.9 en todos lados)
  • Los clientes de VPN deberían verse

Aquí es cómo configuré /etc/openvpn/server.conf (sólo los bits interesantes, espero):

persist-tun
server 172.16.10.0 255.255.255.0
push "route-gateway 172.16.10.1"
push "route 10.0.0.0 255.0.0.0"

push "route 172.16.0.23"
push "dhcp-option DNS 172.16.0.23"

Sin embargo, no estoy seguro de qué partes de estas me hace el servidor openvpn:

  • ¿Necesito configurar iptables en el servidor? Si es así, cómo ?
  • ¿Necesito establecer rutas en el servidor (además de las que se envían al cliente)? Si es así, ¿cuál y cómo?
  • ¿Qué otro software de red me falta y que hace que mis clientes no se conecten correctamente?

5
2018-03-07 09:47


origen


Puedes poner verb 5 en un cliente y agregue los registros de conexión a su publicación original, junto con el route print o route -n ¿Salida del cliente cuando está conectado? - SmallClanger
¿Están los clientes VPN ubicados en su red local (172.16.20.0/24)? ¿Acceden al servidor OpenVPN a través de su puerta de enlace local (172.16.20.1) o se conectan a la IP pública del servidor? Si no están en su red local: ¿Tendrán acceso a la red local o solo a los sistemas de Amazon? - Hauke Laging


Respuestas:


Debe habilitar el reenvío en el servidor OpenVPN en el kernel (/proc/sys/net/ipv4/ip_forward) y tiene que permitir global o selectivamente el reenvío en el firewall (iptables), por ejemplo:

# there is probably already a rule allowing all established connections
# iptables -A FORWARD -m conntrack --ctstate ESTABLISHED -j ACCEPT
# the next rules for every OpenVPN interface (or once for the respective address block)
iptables -A FORWARD -i tun0 -d 10.0.0.0/8  -j ACCEPT
iptables -A FORWARD -i tun0 -d 172.16.0.23 -j ACCEPT
# if the local network shall be accessible
# iptables -A FORWARD -i tun0 -d 172.16.20.0/24 -j ACCEPT

No es necesario establecer rutas en el servidor si solo los clientes simples se conectan. Si 172.16.20.1 se conecta como una puerta de enlace para la red local, entonces necesita una ruta para 172.16.20.0/24, pero probablemente esté (y mejor) configurada en la configuración de OpenVPN para 172.16.20.1.

Editar 1

Si no puede configurar el enrutamiento en ciertos sistemas y su enrutamiento no reenvía el tráfico de la manera correcta, entonces necesita NAT (más preciso: SNAT):

iptables -t nat -A POSTROUTING -d $PROBLEM_HOST_IP \! -s $LOCAL_IP \
  -j SNAT --to-source $LOCAL_IP

con las variables establecidas en consecuencia. Asumiendo que puede establecer el enrutamiento correcto para los objetivos en 172.16.20.0/24 solo entonces puede hacerlo más fácil de esta manera:

iptables -t nat -I POSTROUTING 1 -s $LOCAL_IP -j ACCEPT
iptables -t nat -I POSTROUTING 2 -d 172.16.20.0/24 -j ACCEPT
iptables -t nat -I POSTROUTING 3 -j SNAT --to-source $LOCAL_IP

3
2018-04-27 20:42



Hauke: Su respuesta está bien para el nodo al que se está conectando. La pregunta es cómo exponer el resto de los nodos en el clúster no VPC EC2. Esos no tienen dispositivos TUN y no tienen rutas al servidor OpenVPN. - nirvdrum
@nirvdrum Ver edición - Hauke Laging
@nirvdrum sí, ese es el punto de la pregunta. He configurado todo con SNAT ahora, pero tener rutas de regreso al servidor OpenVPN en todos los demás nodos es aún mejor;) - peritus