1

現在、golang を使用して P2P アプリケーションを作成しています。使いやすいネットワーク スタックを提供するため、Noiseを選択しました。

私のアプリケーションは、 経由でアクセスできる REST API を提供しますlocalhost。ローカルに提供されたエンドポイントに送信されたデータは、接続されたすべてのピアに転送され、接続されたピアにデータが配信され、ネットワークの同期が維持されます。

これまでのところ、実装は成功していますが、これは公開されているノードまたは同じネットワーク内のノードに対してのみ機能します。

プライベート ネットワークのユーザーに対しても、アプリケーションの使いやすさをできるだけ簡単に維持したいと考えています。したがって、手動構成のオーバーヘッド (つまり、ルーター設定でのポート転送) を避けたいと考えています。私の目標は完全に分散化されたアプリケーションを持つことであるため、可能であれば、NAT トラバーサルに中央サーバーを使用することも避けたいと考えています。

STUNTURNなど、いくつかの NAT-Traversal 手法があることは理解しています。また、Noise がすでにNAT-PMPUPnPを提供していることも認識していますが、どういうわけか、それらがどのように機能するかについて頭を悩ませることができません。

一部の VoIP またはファイル共有サービスは NAT-PMP を使用しており、ユーザーの操作なしでほぼ​​すべてのネットワークで動作しているようです。それは私には少し奇妙に思えますが、私は立ち往生しています。

私のアプリケーションがルーターの構成を魔法のように変更して、着信トラフィックを受け入れることができるのはどうしてですか? 特に私のアプリケーションのユーザーがそれについてさえ知らない場合、それは大きなセキュリティリスクのように思えます。また、すべてのルーターが NAT-PMP と UPnP をサポートしているわけではないこともわかりました。ユーザーがそれらのいずれかを持っている場合はどうなりますか?

4

2 に答える 2

0

公開の中央ディレクトリ サーバーがなければ、これは不可能です。ピアがお互いを識別する方法はありません。これは、サーバーがピアツーピア通信のいずれかに参加する必要があるという意味ではありません。p2p ネットワークへのエントリ ポイントの検出を許可するだけです。

NAT トランスバーサル: UPNP は、構成をゼロにする唯一の方法です。主要な問題は NAT ではなく、ファイアウォールの構成であることに注意してください。ほとんどの専用ファイアウォール (ホーム ルーターではない) は、セキュリティ上の懸念から UPNP をサポートしていません。それらは引き続き発信接続を確立できます。

于 2019-05-19T21:39:10.197 に答える