web-dev-qa-db-ja.com

UDPまたはTCP 2つのピアを接続するための穴あけ(それぞれがルーターの背後にある)

自分のコンピューターを友人のコンピューターに直接(サードパーティのサーバーなしで)接続しようとしています。私たちは両方ともISPルーターの背後にいて、(課題として!)ルーター構成を変更せずに接続したいと考えています

提案されているように ここここ の両方を試しました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の背後ではない)<->自宅のコンピューター(ルーターの背後にある)も同じ方法で動作します。

2
Basj

質問で指定されたコマンドが機能する場合もありますが、機能しない場合もあります。

これが理由です。

まあ言ってみれば:

  • ローカルネットワーク上のコンピューターの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

注(*):ルーターが55183のようなランダムなポートに書き換えるのではなく、srcport = 7777を保持する場合があります。この場合、質問の解決策が機能する可能性があります。しかし、これはランダムな動作です!

2
Basj