web-dev-qa-db-ja.com

同じポート番号を2つの異なる内部IPアドレスにポート転送できますか?

私のPCにポート80 UDPを転送する場合、他のラップトップからポート80にアクセスできますか?

14
Octocat

ここでは、2つの異なる質問をしています。

同じポート番号を2つの異なる内部IPアドレスにポート転送できますか?

いいえ。考えてみてください。パケットが外部アドレスとUDPポート80に到着した場合(外部IPアドレスが1つしかない場合)、ルーターは、転送先の2つの内部IPアドレスのうちwhichをどのようにして知るのでしょうか。

2つの異なるサービスをホストする場合は、それぞれに個別のポートが必要です。

私のPCにポート80 UDPを転送する場合、他のラップトップからポート80にアクセスできますか?

はい。通常、ポート転送はyour側にポート80があるパケットにのみ影響します。誰かがあなたに接続しようとすると、ルーターには次のように表示されます:

  • 他のコンピューターのランダムなポートXからポート80への着信パケット
  • ポート80から他のポートXへの発信応答

しかし、発信接続(あなたが他の場所にあるWebページにアクセスした場合)は、ルーターの観点から逆転します。

  • ランダムなポートXから他のコンピューター(Webサーバー)のポート80への発信パケット
  • 相手のポート80からポートXへの着信応答

したがって、ポート転送はそれらにまったく影響を与えません。

(ちなみに、HTTPは通常[〜#〜] tcp [〜#〜]で実行されます。UDPを使用するのはChromeのQUIC実験のみです。)

14
user1686

同じポート番号を2つの異なる内部IPアドレスにポート転送できますか?

はい、[〜#〜] udp [〜#〜]で絶対に、[〜#〜] tcp [〜#〜]

[〜#〜] udp [〜#〜]はコネクションレス型のステートレスプロトコルであるため、特定のポートをリッスンでき、パケットが到着したらコピーして、 2つの異なる内部宛先に送信します。ハンドシェイクや状態追跡がないため、すべての宛先がこれらのパケットを正常に受信できます。 Samplicator は、それを実行できるプログラムの1つです。 これは、その定義による純粋なポート転送ではないことに注意してください。

これは[〜#〜] tcp [〜#〜]で可能ですが、いくつかの制限があります-特定のポートをリッスンでき、パケットが到着したらそれをプール内の特定の内部ホストに転送できます。 TCPは接続を使用するため、最初のパケットを特定の内部ホストに転送したら、このセッションの残りのパケットを同じ内部ホストに転送する必要があります。

このテクノロジーを使用すると、1つの外部宛先への要求を処理する複数のバックエンドサーバーを使用できます。

PCでポート80 UDPを転送する場合、他のラップトップからポート80にアクセスできますか?

この質問は少し不明確です。外部アドレスから内部ホストの1つにトラフィックを転送する場合、この事実だけでは、内部ネットワークから同じポートにアクセスできます。

ポート80をAからBに転送するとします。同時に、Cは問題なくBのポート80に直接アクセスできます。

     A (external IP)
     |
 ---------
 |       |
 B       C
4
VL-80

同じポートを同時に複数のIPに転送することはできません。ルーターや管理されたスイッチで、構成エラーメッセージを返さずにそれを行うことさえできません。複数のIPに対して設定できますが、一度に有効にできる転送ルールは1つだけです。したがって、一方を無効にしたり、他方を有効にしたりできますが、それは無駄です。外部IPアドレスを介してLANコンピューターの特定のポート/サービスにアクセスする場合にのみ、ポートの転送について心配する必要があります。たとえば、2つのLAN PCで2つのWebサーバーを実行し、常に両方にアクセスできるようにしたい場合、最も簡単な方法は、サービスのポートを変更し、一方をポート80でリッスンし、もう一方をポート80でリッスンすることです。 8080または必要なポート。サービスの99%で、任意のポートでホスト/リッスンできます。ポートを指定しない場合、サービスのデフォルトにフォールバックします。他にも高度な方法がありますが、これが最も簡単な方法です。高度な方法は、ネットワークスクールに戻る必要があると言っている人には「ポートフォワーディング」とは見なされません。

1
JohnRB