![如何让 Google Cloud VM 将 Minecraft 流量转发到 OpenVPN 客户端?](https://linux22.com/image/1604888/%E5%A6%82%E4%BD%95%E8%AE%A9%20Google%20Cloud%20VM%20%E5%B0%86%20Minecraft%20%E6%B5%81%E9%87%8F%E8%BD%AC%E5%8F%91%E5%88%B0%20OpenVPN%20%E5%AE%A2%E6%88%B7%E7%AB%AF%EF%BC%9F.png)
我有一个当前以“tap”模式设置的 OpenVPN 网络,其中 Google VM 作为服务器,Raspberry Pi 3 客户端运行 Minecraft 服务器。
用户目前可以通过在其机器上运行 OpenVPN 客户端并在 Minecraft 客户端中输入 Pi 的 OpenVPN IP(例如 10.8.0.2)来连接到 Minecraft 服务器。
但是我想让用户使用 Google VM 的外部 IP 访问 Minecraft 服务器(无需安装 OpenVPN)。由于 ISP 双层 NAT,用户无法直接使用 Pi 的地址。
我尝试过这个答案。具体来说我执行了:
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
VM 的接口是 eth0 和 tap0。控制台中启用了 IP 转发。
服务器防火墙设置为允许来自 0.0.0.0/0 TCP:25565 和 UDP:25565 的流量
但是,当我尝试使用 Google VM 的外部 IP 进行连接时,我收到“连接超时”的提示。NMAP 告诉我端口 25565 已被“过滤”
附加信息,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
答案1
我认为问题可能是,您没有伪装路由到 pi 的数据包,并且并非所有来自 pi 的流量都被路由到隧道中。
这意味着虽然来自外界的数据包可以到达 pi,但是当 pi 回复它们时,响应数据包不会首先路由到 Google VM(但可能会直接发送到客户端(例如,通过其 Internet 网关),因此不会被客户端识别)。
此外,如果 pi 有防火墙过滤来自隧道的传入数据包(以便只接受来自其他 VPN 主机的数据包),那么未伪装成来自 VM 的数据包将被过滤。
因此,您可能需要:
iptables -t nat -A POSTROUTING -d 10.8.0.x -o tap0 -j MASQUERADE
答案2
您可以在 google 的防火墙云菜单上打开端口。并且,经过测试,如果它不起作用,我会告诉你另一个选择。
问候