TCP が機能するには 2 つのポートが必要であることを知りました。1 つはサーバーにデータを送信するため、もう 1 つはサーバーからデータを受信するためです。特にsshの場合、これらのポートの両方を指定する方法はありますか? ローカル トンネル方式は、発信ローカル ポートと着信サーバー ポート用であり、着信ローカル ポート用ではないという印象を受けます。
3 に答える
あなたが学んだことは完全に正しくありません。TCP 接続は、1 対の IP/ポートの組み合わせ (クライアント IP/ポート、サーバー IP/ポート) の間で行われますが、各端で使用されるポートは 1 つだけです。たとえば、接続は 1.2.3.4:65432 上のクライアントと 5.6.7.8:22 上のサーバーの間である可能性があります。
クライアント ポートは、SSH を含むほとんどのアプリケーションにとってまったく重要ではありません。ディレクティブを使用して SSH に「特権付き」(1024 未満) のポートを使用させることがUsePrivilegedPort
できますが、それは root のみが利用できます。
openssh を使用すると、暗号化されたトンネルを作成して、トラフィックをあるポイントから別のポイントに転送できます。-L および/または -R フラグを使用して、ジョブを実行できます。
例 1: SSH サーバーを介して流れる別のマシンに転送されるクライアント PC のローカル ポートをバインドできます。
(ssh user@sshserver -L<local_port>:<remote_ip>:<remote_port>)
ssh user@192.168.1.1 -L8080:192.168.1.20:8090
例 2: SSH サーバーを通過するローカル マシンのポートに接続されているリモート マシンのポートをバインドできます。
(ssh user@sshserver -R<local_port>:<remote_ip>:<remote_port>)
ssh user@192.168.1.1 -R8080:192.168.1.20:8080
例 3: SSH サーバー自体のリモート ポートに転送されるクライアント PC のローカル ポートをバインドできます。
(ssh user@sshserver -L<local_port>:<sshserver>:<remote_port>)
ssh user@192.168.1.1 -L8080:127.0.0.1:8090
最初の例では、次を実行します。
telnet 127.0.0.1 8080
クライアント マシンで、ポート 8090 の 192.168.1.20 に接続します (これは SSH サーバー ネットワークです!)
2 番目の例では、ポート 8080 がマシン 192.168.1.20 (SSH サーバー ネットワークです!) にバインド (作成) され、SSH クライアントのローカル ポート 8080 に関連付けられます。したがって、192.168.1.20 では次のことができます。
telnet 127.0.0.1 8080
SSH クライアント マシンの 8080 に移動します。
3 番目の例は最初の例と似ていますが、リモート マシンは SSH サーバー自体であるため、次のようにします。
telnet 127.0.0.1 8080
クライアント マシンから、SSH サーバーのポート 8090 に接続されます。
TCP が機能するには 2 つのポートが必要であることを知りました。1 つはサーバーにデータを送信するため、もう 1 つはサーバーからデータを受信するためです。
いいえ、そうではありません。1 つのローカル ポートと 1 つのリモート ポートが必要です。これは双方向プロトコルであり、全二重でもあります。したがって、あなたの質問には答えは必要ありません。