解決できないような問題に遭遇しました。 VPS上にVPNサーバーがあります。クライアントPC(ホームLAN)に接続できます。正常に動作します。クライアントPCでVPSIPアドレスを取得します。
ただし、特定のポートを使用してVPN経由でクライアントPCに接続できるようにしたいと思います。 MineCraftサーバーを持っていますが、VPN経由でMCサーバーに接続できるようにしたいと思います。
IP転送を有効にしました:
sysctl -w net.ipv4.ip_forward=1
特定のポートを転送しようとしました:
iptables -t nat -A PREROUTING -d 50.x.x.x -p tcp --dport 25565 -j DNAT --to-dest 10.98.0.2:25565
50.x.x.xは私のVPNパブリックIPアドレスです。 10.98.0.2は、クライアントのローカル(tun0)IPアドレスです。
何らかの理由で動作しません。 tcpdump port 25565
クライアントに接続しようとすると、VPNサーバーにこれが表示されます。
20:49:58.345498 IP MyInternetPublicIP.62336 > VPNPublicIP.25565: Flags [S], seq 2320085851, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
20:50:01.344059 IP MyInternetPublicIP.62336 > VPNPublicIP.25565: Flags [S], seq 2320085851, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
20:50:07.342439 IP MyInternetPublicIP.62336 > VPNPublicIP.25565: Flags [S], seq 2320085851, win 8192, options [mss 1460,nop,nop,sackOK], length 0
クライアント側では何も表示されません。私は何かが足りないのは確かです。
フィルタテーブル(FORWARD
チェーンまたはそこから呼び出されるチェーン)で、次のような転送を許可する必要があります。
iptables -I FORWARD 1 -d 10.98.0.2 -p tcp --dport 25565 -j ACCEPT
応答パケットがVPNを介して送信されることを確認するクライアント側の特別な構成がない場合は、SNATも構成する必要があります。
iptables -t nat -A POSTROUTING -m conntrack --ctstate DNAT -d 10.98.0.2 -p tcp --dport 25565 -j SNAT --to-source 10.98.0.1
10.98.0.1がVPSVPNアドレスであると仮定します。