2つのピア(ルーターの後ろの各ピア)を接続するためのUDPまたはTCPホールパンチング

2つのピア(ルーターの後ろの各ピア)を接続するためのUDPまたはTCPホールパンチング

私のコンピュータを(サードパーティのサーバーなしで)友達のコンピュータに直接接続しようとしています。私たちはどちらもISPルーターの背後にあり(挑戦的に!)接続を望んでいます。ルータの設定を変更する必要はありません。

提案に従ってくださいここそしてここ、我々は2種類のTCPホールパンチングを試みた。

myself$ nc -p 7777 public-ip-friend 8888
friend$ nc -p 8888 public-ip-myself 7777

UDPで穴をあける:

myself$ nc -u -p 7777 public-ip-friend 8888
friend$ nc -u -p 8888 public-ip-myself 7777

しかし、それらのどれも動作しません。

この問題をどのように解決しますか?

注:VPS(NATの背後にない)<-->マイホームコンピュータ(まだルータの背後にある)は同じ方法を使用します。

ベストアンサー1

質問に記載されているコマンドが動作する場合もありますが、動作しない場合もあります。

理由は次のとおりです。

仮定:

  • 私のローカルネットワークのコンピュータIP:192.168.1.10
  • マイパブリックネットワークIP:203.0.113.10
  • 私の友人の公開IP:198.51.100.27

マイコンピュータでこれを行うとき:

myself$ nc -u -p 7777  198.51.100.27 8888

NAT変換の前に、以下を行った。

srcip          srcport         destip            destport
192.168.1.10   7777            198.51.100.27     8888

ただし、ホーム ルータ NAT 変換後、次の結果が表示されます。

srcip          srcport         destip            destport
203.0.113.10   55183(*)        198.51.100.27     8888

つまり、ソース IP は NAT によって書き換えられます。ソースポートもあります

したがって、私の家のファイアウォールに「穴」が作成されますが(私の友人の198.51.100.27からのトラフィックを許可する)、ポート55183用です。ポートには適用されません7777.

私の友人がこれを行うときに失敗する理由は次のとおりです。

friend$ nc -u -p 8888 203.0.113.10 7777

注(*):場合によっては、ルータはsrcport = 7777を任意のポート(55183など)に書き換える代わりに保持できます。この場合、質問に記載されているソリューションが機能する可能性があります。しかし、これはランダムな行動です!

おすすめ記事