自分のコンピューターを友人のコンピューターに直接(サードパーティのサーバーなしで)接続しようとしています。私たちは両方とも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の背後ではない)<->自宅のコンピューター(ルーターの背後にある)も同じ方法で動作します。
質問で指定されたコマンドが機能する場合もありますが、機能しない場合もあります。
これが理由です。
まあ言ってみれば:
私のコンピューターでこれを行うとき:
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を保持する場合があります。この場合、質問の解決策が機能する可能性があります。しかし、これはランダムな動作です!