web-dev-qa-db-ja.com

ポート転送や集中型サーバーなしでピアツーピア接続を作成するにはどうすればよいですか?

これを行うための提案された方法についての記事を読んだことを思い出します。私が正しく思い出せば、研究者たちはお互いにHTTPパケットを送信することにより、ポート転送なしで別のネットワーク上のクライアントへの接続を正常に作成しました(AliceはBobがHTTP Webサーバーであると偽り、BobはAliceがWebサーバーであると偽ります)。

それが理にかなっているかどうかはわかりませんが、記事をどこで見つけられるか、中央サーバーやポート転送なしで2つのクライアントを接続する方法を知っている人はいますか?

可能ですか?

編集:両方のコンピューターのIPを知っていて、プログラムがリッスンするポートを知っています。

20
mwaboff

可能です。私はあなたの質問に少なくとも2部を見ています。 (これはHTTPパケットにはなりません。それよりもはるかに複雑です。)

まず始めに、あなたは分散型P2Pネットワークと呼ばれる概念について話していると思います。分散型ピアツーピアネットワークの背後にある主なアイデアは、そのようなネットワークで結合されたノードが中央サーバーまたはサーバーグループを必要としないという事実です。

すでにご存じかもしれませんが、最も一般的な集中型のピアツーピアネットワークでは、ノード間の相互接続を交換および維持するために、このような集中型システムが必要です。基本的な概念は、新しいノードがメインサーバーの1つに接続し、ネットワーク上の他のノードに関する情報を取得して、その接続性と可用性を維持することです。中央システムは、ネットワーク状態、関連情報、および相互間の中央調整を常に同期するサーバーを通じて維持されます。

一方、分散型ネットワークには、構造や所定のコアはありません。このピアツーピアモデルは、非構造化P2Pネットワークとも呼ばれます。新しいノードは、「親」ノードから元のリンクをコピーまたは継承し、時間の経過とともに独自のリストを形成します。このような非構造化ネットワークの分散化にはいくつかのカテゴリがあります。

興味深いことに、中央のコマンドアンドコントロールシステムがないため、最新のマルウェアボットネットに最適なソリューションとなっています。典型的な例は、いわゆるパッシブP2Pモニター(PPM)を採用したStormボットネットです。 PPMは、感染したホストがファイアウォールまたはNATの背後にあるかどうかに関係なく、感染したホストを特定してピアリストを作成することができました。ウィキペディアの記事 ストームボットネット 興味深い読み物です。という素晴らしい共同研究もあります 完了に向けてNodeピアツーピアボットネットでの列挙ストームボットネットネットワークで採用されている優れた概念分析と手法を提供します。

2番目に、UDPホールパンチングについて話しているかもしれません。これは、3番目のランデブーサーバーによる3番目のコメントホストを使用して、NATされたルーター/ゲートウェイの背後にある2つのホスト間の接続を維持するために使用される手法またはアルゴリズムです。

Bryan Ford、Pyda Srisuresh、Dan Kegelによる素晴らしい論文があります。 ネットワークアドレストランスレータを介したピアツーピア通信

27
PSS

回答したとおり、ピアツーピア接続では、2つの(おそらく)住宅用コンピューター間で接続を確立する必要があります。そのため、両方のファイアウォールに穴を開ける必要があります。穴あけの具体的な例については、 pwnat: "ファイアウォールやNATを介してサードパーティなしで穴を開ける唯一のツール" を参照してください。簡単に言えば、プロセスは次のようになります。

  1. 「サーバー」(クライアントのIPアドレスはわかりませんが、クライアントはサーバーのアドレスを知っています)は、特定のICMP Echo Requestパケットを1.2.3.4に30秒ごとにpingします。 NATは、変換中に、応答を取得する場合に備えてこのパケットを記録します。
  2. クライアントはICMP Time Exceededパケットをサーバーに送信します。これは、通常、配信に失敗したパケットを含むタイプのパケットです。サーバーが1.2.3.4に送信している正確なパケットを事前に知っているクライアントは、そのパケット全体をデータフィールドに埋め込みます。
  3. NATはエコー要求パケットを認識し、whole Time Exceeded packet、source IP and all、正しいユーザー、つまりサーバーに送信すると、サーバーはクライアントのIPとポート番号を認識します。
  4. サーバーはアドレスを認識したので、クライアントのNATはそれらを予期していないため、それらをすべて無視しますが、UDPパケットを継続的にクライアントに送信し始めます。
  5. クライアントは、サーバーへのUDPパケットの送信を開始します。これは、サーバーのNATによってサーバーのパケットへの応答として認識され、適切にルーティングされます。
  6. クライアントがUDPパケットをサーバーに送信しているので、サーバーのUDPパケットのストリームは、クライアントのNATによって適切にルーティングされ始めます。

そして、6つの簡単なステップで、クライアントとサーバーの間にUDP接続を確立しましたtwo住宅用ファイアウォールを貫通します。どうぞ、ISP!

4
pmttavara