Tengo una red OpenVPN actualmente configurada en modo "tap", con Google VM como servidor y un cliente Raspberry Pi 3 ejecutando un servidor Minecraft.
Actualmente, los usuarios pueden conectarse al servidor de Minecraft ejecutando un cliente OpenVPN en sus máquinas y escribiendo la IP OpenVPN de Pi en el cliente de Minecraft (digamos, 10.8.0.2).
Sin embargo, quiero poder permitir que los usuarios accedan al servidor de Minecraft utilizando la IP externa de la máquina virtual de Google (sin la necesidad de instalar OpenVPN). Los usuarios no pueden usar la dirección del Pi directamente debido a la NAT de doble capa del ISP.
He intentado seguiresta respuesta. Específicamente ejecuté:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 25565 -j DNAT --to-destination 10.8.0.2:25565
iptables -A FORWARD -p tcp -d 10.8.0.2 --dport 25565 -j ACCEPT
iptables -A POSTROUTING -t nat -s 10.8.0.2 -o eth0 -j MASQUERADE
Las interfaces de VM son eth0 y tap0. El reenvío de IP está habilitado en la consola.
El firewall del servidor está configurado para permitir el tráfico desde 0.0.0.0/0 TCP:25565 y UDP:25565
Sin embargo, cuando intento conectarme utilizando la IP externa de la máquina virtual de Google, aparece el mensaje "Se agotó el tiempo de conexión". NMAP me dice que el puerto 25565 está "filtrado"
Información adicional, iptables-save
:
# Generated by iptables-save v1.6.0 on Thu Sep 26 11:42:02 2019
*nat
:PREROUTING ACCEPT [106:35257]
:INPUT ACCEPT [75:15902]
:OUTPUT ACCEPT [111:6692]
:POSTROUTING ACCEPT [6:328]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -i eth0 -p udp -m udp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -i eth0 -p udp -m udp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -d 35.197.47.71/32 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -d 35.197.47.71/32 -p udp -m udp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.8.0.3/32 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.8.0.2/32 -o eth0 -j MASQUERADE
COMMIT
# Completed on Thu Sep 26 11:42:02 2019
# Generated by iptables-save v1.6.0 on Thu Sep 26 11:42:02 2019
*filter
:INPUT ACCEPT [1822:367429]
:FORWARD ACCEPT [13:700]
:OUTPUT ACCEPT [1610:231716]
-A FORWARD -d 10.8.0.2/32 -p tcp -m tcp --dport 25565 -j ACCEPT
COMMIT
# Completed on Thu Sep 26 11:42:02 2019
--list-rules
:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -d 10.8.0.3/32 -p tcp -m tcp --dport 25565 -j ACCEPT
Respuesta1
Creo que el problema podría ser que no estás enmascarando los paquetes que se enrutan al pi y no todo el tráfico del pi está diseñado para enrutarse al túnel.
Esto significa que, si bien los paquetes del mundo exterior pueden llegar al pi, cuando el pi les responde, los paquetes de respuesta no se enrutan primero a la máquina virtual de Google (sino que probablemente se envían directamente a los clientes (como a través de su puerta de enlace de Internet), que por lo tanto no será reconocido por los clientes).
Además, si el pi tiene un firewall que filtra los paquetes entrantes del túnel (de modo que solo se aceptan paquetes de otros hosts VPN), se filtrarán los paquetes que no estén enmascarados como provenientes de la VM.
Por lo tanto, es posible que necesites:
iptables -t nat -A POSTROUTING -d 10.8.0.x -o tap0 -j MASQUERADE
Respuesta2
Puede abrir el puerto en el menú de la nube del firewall de Google. Y, después de probar, si no funciona os digo otra opción.
Saludos