如何讓 Google Cloud VM 將 Minecraft 流量轉送到 OpenVPN 用戶端?

如何讓 Google Cloud VM 將 Minecraft 流量轉送到 OpenVPN 用戶端?

我目前有一個以「tap」模式設定的 OpenVPN 網路,其中 Google VM 作為伺服器,Raspberry Pi 3 用戶端運行 Minecraft 伺服器。

使用者目前可以透過在自己的電腦上執行 OpenVPN 用戶端並將 Pi 的 OpenVPN IP 輸入 Minecraft 用戶端(例如 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(但可能直接發送到客戶端(如透過其互聯網網關),因此不會被客戶認可)。

此外,如果 pi 有防火牆過濾來自隧道的傳入封包(這樣只接受來自其他 VPN 主機的封包),則未偽裝成來自 VM 的封包將會被過濾。

因此,您可能需要:

iptables -t nat -A POSTROUTING -d 10.8.0.x -o tap0 -j MASQUERADE

答案2

您可以在Google防火牆雲端選單上開啟該連接埠。而且,經過測試,如果它不起作用,我會告訴你另一種選擇。

問候

相關內容