明日、ローカルマシンで実行されているWebサイトを誰かに見せなければなりません。通常、ローカルルーターでポートフォワーディングを使用してこれを実現しますが、ハードウェアの故障とその交換がひどいため、現在のルーターではポートフォワーディングを実行できません。
したがって、この遅延に固執し、適切なサーバーにすべてをプッシュしたくないので、私はクレイジーなアイデアを持っていました:SSH経由で外部サーバーにポートを転送するだけですか?
以前にポートトンネリングを行ったことがありますが、通常は正しい方法で行います。
私がすることしたい:
ローカルマシン(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-machine
(remote-machine:8000
)のパブリックアドレスで使用可能になります。
ワイルドカードアドレスのすべてをバインドしないオプションが必要な場合は、GatewayPorts yes
をGatewayPorts clientspecified
に変更します。 ssh
はデフォルトでループバックアドレスにバインドするため、ワイルドカードアドレスをバインドするには空のbind_address
を指定する必要があります。
ssh -R :8000:localhost:80 oli@remote-machine
GatewayPorts
がclientspecified
に設定されており、:
へのパブリックアクセスを許可する場合、8000
の前のremote-machine:8000
は必須です。
関連するマニュアルの抜粋:
-R [bind_address:] port:Host:hostport
リモート(サーバー)ホスト上の指定されたポートが、ローカル側の指定されたホストおよびポートに転送されることを指定します。これは、リモート側のポートをリッスンするソケットを割り当てることで機能し、このポートへの接続が確立されるたびに、接続は安全なチャネルを介して転送され、ローカルマシンからホストポートホストポートに接続されます。 デフォルトでは、サーバー上のリッスンソケットはループバックインターフェイスのみにバインドされます。これはbind_addressを指定することでオーバーライドできます。 空のbind_addressまたはアドレス「*」は、リモートソケットがすべてのインターフェイスでリッスンする必要があることを示します。リモートbind_addressの指定は、サーバーのGatewayPortsオプションが有効になっています(sshd_config(5)を参照)。
GatewayPorts
リモートホストがクライアント用に転送されたポートへの接続を許可されるかどうかを指定します。 GatewayPortsを使用して、sshdでリモートポート転送が非ループバックアドレスにバインドできるように指定し、他のホストが接続できるように指定できます。 引数は、ローカルホストのみがリモートポートフォワーディングを使用できるようにする「no」、ワイルドカードアドレスにバインドするようリモートポートフォワーディングを強制する「yes」、または転送がバインドされるアドレスをクライアントが選択できるようにします。デフォルトは「no」です。
こちらもご覧ください:
サーバーにGatewayPorts no
がある場合、クライアントでssh -g -L 8001:localhost:8000 oli@remote-machine
コマンドを実行すると、サーバーでssh -R
を実行することで同じ結果を得ることができます。これにより、サーバー上のループバックポート8000がポート8001のすべてのインターフェイスでアクセス可能になります。