ローカルとリモートのIP転送の違いは何ですか?


10

2つの機能の違いは何ですか?私は少し混乱しています。

ローカル転送により、リモートポートがローカルで利用可能になります。

リモート転送により、ローカルポートがリモートで利用可能になります。

しかし、この「アベイラビリティ」は両方向で機能します...またはそれはできますか?

例:(ホスト「ホーム」から発行)

ssh -R 1234:localhost:2345 user@work

これにより、work :: 1234とhome :: 2345の間に安全なトンネルが確立されます。

片側に何かを入れると、反対側に出てきます。

しかし、その後、ホストの「work」からの次の呼び出しによって同じことを達成できます。

ssh -L 1234:localhost:2345 user@home

それで、唯一の違いは私がそれをどこから呼ぶかです、そうですか?


あなたの例では、機能に違いはありません。ターゲットホストを交換することにより、反対の引数を使用するための自己補償の一種です。これを実行せず、 1つの単一ホスト内から両方を使用した場合、すでに完全に反対の動作がトリガーされます。
XXL

回答:


2

主な実用的な違いは、2台のコンピューターAとBを接続していて、Bが制御できないファイアウォールまたはNATルーターの背後にあり、着信をブロックしているということです。あなたはAに座っています。Aは取得できません。 Bに接続します。ただし、Bは発信をブロックしません。したがって、BがAに接続します。

-説明を追加-

質問者が理解した上記のことは、ローカル転送とリモート転送の主な実用的な違いを意味します。ssh -Lとssh -Rは、それぞれを使用する場合に使用します。彼が与えた具体的なコマンド例、彼が-Lと-Rを切り替える場所、そして彼がどのsshdサーバーに接続するかについてはコメントしていませんでした。しかし、今、私はそれにコメントしようとします。.彼が与えたsshコマンドでは、通常のクライアントと通常のサーバーの観点から、「これはsshクライアントであり、これはsshサーバーです。 "それはsshを知りません、そしてそれはsshのクライアント/サーバーの側面は通常のクライアントと通常のサーバーにとっても無関係で未知です。彼らは誰が聞いているかを気にしているだけであり、彼らの観点からは、それは同じに見えます。仕事用のコンピューターは1234で待機しています。tは、sshd.exe sshサーバーである場合と、ssh.exe、sshクライアントである場合があります。ちなみに、sshクライアントがある場所はローカルと見なされます。


わかりました。ありがとうございます。これで私の質問に正確に回答できました。:-)
nandaloo

@nandalooそれは逆SSHトンネルと呼ばれていると思います。イニシエーターとリスナーという構成された用語を使用する場合( 'cosこれらの用語は、クライアントとサーバーほど曖昧ではありません)。アイデアは、通常のイニシエーターとリスナー、およびsshイニシエーターとリスナーがあることです。通常のイニシエーターとリスナーの場所を選択することはできません。たとえば、HTTPサーバー(通常のリスナー)はBにあります。Bはファイアウォールの背後にあります。AにはHTTPクライアント(通常のイニシエーター)があります。SSHイニシエーターをBに配置します。SSHイニシエーターとリスナーは、通常のイニシエーターとリスナーの反対側のコンピューター上にあります。
Barlop

10

はい、正しく理解していれば、aからbへのローカルポート転送は、bからa(およびその逆)へのリモートポート転送と同じでなければなりません。aからbへの(aから見た)発信トンネルは、aからb(bから見た)への着信トンネルと等しいはずです。

ローカルポートフォワーディングは、パブリックインターネットコンピュータをローカルマシンに接続するために使用できる発信トンネルを作成します。ローカル(クライアント)ホスト上の特定のポートがリモート側の特定のホストとポートに転送されるため、ローカルユーザーはローカルホスト上のリモートホスト:ポートの組み合わせにアクセスできます。

ssh -L local_port:remote_host:remote_port user@hostname

リモートポートフォワーディングは、ローカルコンピューターを公共のインターネットに接続するために使用できる着信トンネルを作成します。インターネットユーザーは、リモートホスト上の特定のローカルホスト:ポートの組み合わせにアクセスできます。リモート(サーバー)ホスト上の指定されたポートは、ローカル側の指定されたホストとポートに転送されます。

ssh -R local_port:remote_host:remote_port user@hostname

1
構文以外の別の違いは、ユーザーが接続するのを待機するプロセスだと思います。ssh.exe -Lは、ssh.exeに待機するよう指示します(すでに確立されている発信接続以外に)。ssh.exe -Rは、sshd.exeに待機するように指示します(すでに行っている待機に加えて)。
barlop 2013年

@ 0x4a6f4672、どういう0x4a6f4672意味ですか?
Pacerier、2015年

@Pacerierは、16進表記の私のイニシャル「JoFr」のみです:-)
0x4a6f4672

3

ローカルポート転送を使用して、ユーザー(クライアント)がコンピューターのリスニングソケットを開き、アプリケーションレベルのプロトコルクライアントをこのソケットに接続します。これで、接続はSSH経由でサーバーに転送されます。サーバーはリモートホストに接続し、プロトコルクライアントから最終的な宛先にデータをトンネルします。

リモートポート転送を使用すると、サーバーはサーバーホスト上でリスニングソケットを開きます。一部のリモートアプリケーションはこのホストに接続し、クライアントコンピュータに転送される情報を送信します。ここでは、最終的な宛先(コンピューターまたはネットワーク上で実行されているアプリケーションレベルのプロトコルサーバー)への接続が確立され、データがリモートアプリケーションから最終的な宛先に転送されます。


おかげで、ポートフォワーディングの動作が明確になりました。そして質問を移動してくれてありがとう-私はこのスーパーユーザーサイトについてさえ知らなかった:-)
nandaloo

1

これは小さな例で最もよく理解されます。これらの例では、接続は次のように構成されています。

ローカルサーバー-(LAN)-ターミナル-----(SSH、通常はインターネット経由)-----トンネルエンドポイント-(LAN)-リモートマシン

sshアクセス権があるトンネルエンドポイントから到達可能な特定のリモートマシン/ポートにトンネリングする場合は、ローカルポート転送を使用します。Therby、そのリモートマシンのポートは、自分の端末(http:// localhost:terminal_port /など)からローカルにアクセスすることもできます。

これは、次の構文を使用して行われます。

ssh -L terminal_port:remote_machine_ip:remote_service_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

トンネルエンドポイントのリスニングポートに到達してローカルLANのip /ポートにリモートアクセスできるANYONE(!)リモートを有効にする場合は、リモートポート転送を使用できます。ローカルサーバーへのリモートマシンからの接続は、ターミナルによって開始されたようです。

構文は次のとおりです。

ssh -R tunnel_endpoint_listen_port:local_server_ip:local_server_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

0

socatのマンページはこれを非常によく説明しています。はい、sshとsocatは2つのまったく異なるものであることは知っていますが、socatのドキュメントは非常に優れています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.