Google Cloud VM で Minecraft トラフィックを OpenVPN クライアントに転送するにはどうすればよいですか?

Google Cloud VM で Minecraft トラフィックを OpenVPN クライアントに転送するにはどうすればよいですか?

現在、OpenVPN ネットワークが「タップ」モードでセットアップされており、Google VM がサーバーとして使用され、Raspberry Pi 3 クライアントが Minecraft サーバーを実行しています。

現在、ユーザーは自分のマシン上で OpenVPN クライアントを実行し、Pi の OpenVPN IP (たとえば、10.8.0.2) を Minecraft クライアントに入力することで、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 のファイアウォール クラウド メニューでポートを開くことができます。テスト後、機能しない場合は別のオプションをお知らせします。

よろしく

関連情報