現在、OpenVPNネットワークを「タップ」モードでセットアップしており、サーバーとしてGoogle VM、Minecraftサーバーを実行しているRaspberry Pi 3クライアント)を使用しています。
ユーザーは現在、自分のマシンでOpenVPNクライアントを実行し、PiのOpenVPN IPをMinecraftクライアントに入力することでMinecraftサーバーに接続できます(たとえば、10.8.0.2)。
ただし、ユーザーが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
問題は、piにルーティングされるパケットをマスカレードしておらず、piからのすべてのトラフィックがトンネルにルーティングされるわけではないことだと思います。
つまり、外部からのパケットはpiに到達できますが、piがそれらに応答する場合、応答パケットは最初にGoogle VMにルーティングされません(ただし、おそらくクライアントに直接送信されます(のように、そのインターネットゲートウェイを介して)、したがって、クライアントによって認識されません)。
また、piにトンネルからの着信パケットをフィルタリングするファイアウォールがある場合(他のVPNホストからのパケットのみが受け入れられるように)、VMからのように偽装されていないパケットがフィルタリングされます。
したがって、次のものが必要になる場合があります。
iptables -t nat -A POSTROUTING -d 10.8.0.x -o tap0 -j MASQUERADE
あなたはグーグルのファイアウォールクラウドメニューでポートを開くことができます。そして、テストした後、それが機能しない場合は、別のオプションをお伝えします。
よろしく