web-dev-qa-db-ja.com

複数のクライアントホストがNAT 1つの「外部」IPアドレスを共有している場合)、複数のクライアントが同じアドレスに同時に接続するにはどうすればよいですか?

関連記事 によると、各インターネットサービスと同じインターネットサービス/アプリケーション/プロトコル(例:FTP、HTTPなど)を使用している複数のクライアントホストにポート転送を同時に提供することはできません。 IANAによって設定された専用ポート。つまり、ポート転送だけでは、同じ内部ネットワーク内の複数のクライアントホストが同じインターネットサービスを同時に使用することはできません[〜#〜]または[〜#〜]単一のホストマシンで実行されている同じインターネットアプリケーションの複数のインスタンスの場合でも。ただし、観察により、同じ内部ネットワーク内でインターネットサービスの複数のインスタンスを同時にサポートできることが示唆されます。

これは実際にはどのように説明されていますか?

1
MShakeG

「NATの背後に複数のクライアントホストがあり、単一の「外部」IPアドレスを共有している場合、複数のクライアントが同じポート上の同じサーバーに接続するにはどうすればよいですか?」

これは、singleホストが同じサービスへの複数の接続を確立できるようにするまったく同じメカニズムによって可能になります。 (たとえば、Webブラウザーは同じWebサーバーへの2〜3の同時HTTP接続を頻繁に使用します。)

TCP接続とUDPストリームは、常にポートのペアで識別されます。各TCPまたはUDPパケットには、「送信元」ポートと「宛先」ポートの2つのフィールドがあります。

クライアントからのパケットでは、「宛先」ポートはIANAによって割り当てられたサービスポート(HTTPの場合は80など)を保持しますが、「ソース」ポートはOSによって自動的に割り当てられるため、{source、dest}ペアは常に一意になります。たとえば、クライアントは最初のHTTP接続にポート{54794、80}を使用し、2番目のポートに{48973、80}を使用する場合があります。サーバーは送信元と宛先を逆にして応答します-そのパケットは{80、54794}または{80、48973}になります。

NATの背後に複数のクライアントホストがある場合、プロセスは同じままで、NATデバイスはポートの組み合わせを使用して、どのクライアントがどの接続を行ったかを認識します。また、複数のクライアントデバイスが偶然同じポートを選択した場合、NATデバイスはソースポートを変換して、WAN側でペアが依然として一意であることを確認します。

同じ答えの別のバージョン(あまり明確ではありませんが、例があります): インターネットサーバーはプライベートIPからのリクエストにどのように応答しますか?


他の一部のIPベースのプロトコル(SCTPなど)にも、まったく同じように機能するポートがあります。

QUICはこの目的のためにUDPカプセル化を使用します– QUICポートは実際にはUDPポートです。

ICMPエコー(別名ping)には、「送信元ポート」と同じ目的で使用される一意のIDフィールドがあります。 (ICMPタイプ/コードフィールドは「宛先ポート」の目的に役立つと言えます。)

IPsec ESPにはセキュリティアソシエーションIDがありますが、私が知る限り、通常はNATによって追跡されていません。NATデバイスは通常、ESPをポートのようなものがないものとして扱い、許可するだけです特定のサーバーに接続する単一のクライアント(さらに悪いことに、一部のNATデバイスは、単一のクライアントが一度にESPを使用することしか許可していません)。 UDPカプセル化は、この問題に対処するために使用されます。

2
user1686

正しい。それが許されない理由を逆に考えてください。 2つのマシンが同じポートを内部で使用しているパブリックIP(たとえば74.32.x.x:5000)をヒットし、両方がルーターレベルでポート転送されている場合、どちらにルーティングするかをどのようにして知ることができますか?答えは、着信トラフィックを委任するためのユースケースに応じて、ネットワークまたはロードバランサー内にリバースプロキシを配置することです。ロードバランサーは同じポートで実行されているアプリケーションにサービスを提供でき、リバースプロキシはパケットヘッダーを読み取り、データを正しい内部サーバーに送信できます。

リバースプロキシの例:blue.comとred.comを実行している2つのWebサイトがあり、両方が内部サーバーでホストされているが、パブリックIPを共有し、両方がポート80で実行されているとします。受信リクエストは、ルーター、リバースプロキシに送信され、 "ユーザーがred.comを要求しました"と表示され、内部でred.comをホストしているWebサーバーに要求を渡します。

ロードバランサーExampl e:2つの内部サーバーが、同じアプリケーションをホストする同じポートを共有します。ロードバランサーは着信要求を受け取り、トラフィックが最も少ないサーバーに送信しますORは、常に1つのサーバーに送信するように設定できますが、応答が停止した場合は、他のサーバーに再ルーティングします。フェイルオーバー。

1
Narzard