現在、golang を使用して P2P アプリケーションを作成しています。使いやすいネットワーク スタックを提供するため、Noiseを選択しました。
私のアプリケーションは、 経由でアクセスできる REST API を提供しますlocalhost
。ローカルに提供されたエンドポイントに送信されたデータは、接続されたすべてのピアに転送され、接続されたピアにデータが配信され、ネットワークの同期が維持されます。
これまでのところ、実装は成功していますが、これは公開されているノードまたは同じネットワーク内のノードに対してのみ機能します。
プライベート ネットワークのユーザーに対しても、アプリケーションの使いやすさをできるだけ簡単に維持したいと考えています。したがって、手動構成のオーバーヘッド (つまり、ルーター設定でのポート転送) を避けたいと考えています。私の目標は完全に分散化されたアプリケーションを持つことであるため、可能であれば、NAT トラバーサルに中央サーバーを使用することも避けたいと考えています。
STUNやTURNなど、いくつかの NAT-Traversal 手法があることは理解しています。また、Noise がすでにNAT-PMPとUPnPを提供していることも認識していますが、どういうわけか、それらがどのように機能するかについて頭を悩ませることができません。
一部の VoIP またはファイル共有サービスは NAT-PMP を使用しており、ユーザーの操作なしでほぼすべてのネットワークで動作しているようです。それは私には少し奇妙に思えますが、私は立ち往生しています。
私のアプリケーションがルーターの構成を魔法のように変更して、着信トラフィックを受け入れることができるのはどうしてですか? 特に私のアプリケーションのユーザーがそれについてさえ知らない場合、それは大きなセキュリティリスクのように思えます。また、すべてのルーターが NAT-PMP と UPnP をサポートしているわけではないこともわかりました。ユーザーがそれらのいずれかを持っている場合はどうなりますか?