0

サーバーとクライアントの両方として機能する P2P Java アプリケーションがあります。パブリック IP アドレスのリストが与えられ、アプリケーションはソケット通信の作成を試みます。このリストは、パブリック IP アドレスのみで構成されています (構成できるのはパブリック IP アドレスのみです)。

同じ NAT の背後にある 2 台のマシンでアプリケーションを実行しています。両方のポート (マシンごとに 1 つ) を転送して、それらが公開され、いずれかのマシンへの着信メッセージが正しく受信されるようにしました (つまり、ポート転送が正しく機能しています)。

ただし、2 つのローカル マシンがパブリック IP を使用して相互に通信しようとすると、問題が発生します。たとえば、マシン A には 192.168.1.1 のプライベート IP があり、マシン B には 192.168.1.2 のプライベート IP があり、それぞれポート 2001 と 2002 を受け入れます。両方のポートがルーターで転送されました。どちらも 8.8.8.8 という同じパブリック IP を持っています。A がパブリック IP を使用して B に接続しようとすると、次のようなパケット キャプチャが行われます。

192.168.1.1:4000 -> 8.8.8.8:2002
192.168.1.2:2002 -> 192.168.1.1:4000

この結果は、B のリッスン ソケットが受け入れないことです。ただし、代わりに B のローカル IP を使用すると、すべて問題ありません。

192.168.1.1:4000 -> 192.168.1.2:2002
192.168.1.2:2002 -> 192.168.1.1:4000

パブリック IP アドレスを使用して、同じ NAT の背後にある 2 台のマシン間でソケット接続を形成する方法はありますか?

4

0 に答える 0