web-dev-qa-db-ja.com

リバースポートトンネリング

明日、ローカルマシンで実行されているWebサイトを誰かに見せなければなりません。通常、ローカルルーターでポートフォワーディングを使用してこれを実現しますが、ハードウェアの故障とその交換がひどいため、現在のルーターではポートフォワーディングを実行できません。

したがって、この遅延に固執し、適切なサーバーにすべてをプッシュしたくないので、私はクレイジーなアイデアを持っていました:SSH経由で外部サーバーにポートを転送するだけですか?

以前にポートトンネリングを行ったことがありますが、通常は正しい方法で行います。

  • リモートボックスに接続し、ポート12345でローカルマシンにポート12345が表示されるように依頼します。
  • リモートマシンのP12345で何かを開始します
  • Localhost:12345経由でアクセスできます

私がすることしたい

  • リモートPCに接続し、itslocal P12345がローカルP12345から(トンネルを介して)フェッチすることを確認します
  • P12345でローカルコンピューターで何かを開始します
  • 他の人はremote:12345にアクセスして、localhost:12345を見ることができます
58
Oli

ローカルマシン(localhost)からポート8000​​上のリモートホストにポート80を転送するコマンドは次のとおりです。

ssh -R 8000:localhost:80 oli@remote-machine

これには、SSHサーバーで追加の調整が必要です。次の行を/etc/ssh/sshd_configに追加します。

Match User oli
   GatewayPorts yes

次に、サーバーがSudo reload sshを実行して構成を再読み込みします。

GatewayPorts yesを設定すると、SSHはワイルドカードアドレスでポート8000​​をバインドするため、remote-machineremote-machine:8000)のパブリックアドレスで使用可能になります。

ワイルドカードアドレスのすべてをバインドしないオプションが必要な場合は、GatewayPorts yesGatewayPorts clientspecifiedに変更します。 sshはデフォルトでループバックアドレスにバインドするため、ワイルドカードアドレスをバインドするには空のbind_addressを指定する必要があります。

ssh -R :8000:localhost:80 oli@remote-machine

GatewayPortsclientspecifiedに設定されており、:へのパブリックアクセスを許可する場合、8000の前のremote-machine:8000は必須です。

関連するマニュアルの抜粋:

ssh(1)

-R [bind_address:] port:Host:hostport
リモート(サーバー)ホスト上の指定されたポートが、ローカル側の指定されたホストおよびポートに転送されることを指定します。これは、リモート側のポートをリッスンするソケットを割り当てることで機能し、このポートへの接続が確立されるたびに、接続は安全なチャネルを介して転送され、ローカルマシンからホストポートホストポートに接続されます。 デフォルトでは、サーバー上のリッスンソケットはループバックインターフェイスのみにバインドされます。これはbind_addressを指定することでオーバーライドできます。 空のbind_addressまたはアドレス「*」は、リモートソケットがすべてのインターフェイスでリッスンする必要があることを示します。リモートbind_addressの指定は、サーバーのGatewayPortsオプションが有効になっています(sshd_config(5)を参照)。

sshd_config(5)

GatewayPorts
リモートホストがクライアント用に転送されたポートへの接続を許可されるかどうかを指定します。 GatewayPortsを使用して、sshdでリモートポート転送が非ループバックアドレスにバインドできるように指定し、他のホストが接続できるように指定できます。 引数は、ローカルホストのみがリモートポートフォワーディングを使用できるようにする「no」、ワイルドカードアドレスにバインドするようリモートポートフォワーディングを強制する「yes」、または転送がバインドされるアドレスをクライアントが選択できるようにします。デフォルトは「no」です。

こちらもご覧ください:

95
Lekensteyn

サーバーにGatewayPorts noがある場合、クライアントでssh -g -L 8001:localhost:8000 oli@remote-machineコマンドを実行すると、サーバーでssh -Rを実行することで同じ結果を得ることができます。これにより、サーバー上のループバックポート8000​​がポート8001のすべてのインターフェイスでアクセス可能になります。

14
FaST4