IPアドレスが公開されたプロキシを設計したいと思います。クライアントはプロキシのIPアドレスを知っており、SSH経由で接続できます。ただし、クライアントがIPアドレスを知らないホストが1つあります。プロキシの目的は、クライアントでSSHを「傍受」し、リダイレクトそのプライベートホストに移動します。下の画像はこの問題を示しています。
サーバーBは私が設計したいプロキシです。クライアントCはサーバーAのIPアドレスを知りません。クライアントCはSSHを介してサーバーB(プロキシ)に接続できます。その後、プロキシ(サーバーB)はSSH接続をサーバーAに転送する必要があります。これ答え、以下を試しました。
サーバーAで次のコマンドを実行します。
ssh userB@serverB -R clientC:1234:serverA:22
クライアントCで次のコマンドを実行します。
ssh userA@serverB -p 1234
ただし、クライアントCはサーバーAとの接続を確立できず、次のメッセージが表示されます。
ssh: connect to host server B (192.168.2.122) port 1234: Operation timed out
プロキシ(サーバーB)の動作方法を教えてください。
解決済み:
sshd_config
私のアプローチは正しいです。サーバーAとサーバーB(プロキシ)を再構成する必要があります。
AllowAgentForwarding yes
AllowTcpForwarding yes
GatewayPorts yes
X11Forwarding yes
詳細を確認可能ここ。
答え1
clientC
からserverB
SSHserverB
経由で接続できますかserverA
?もしそうなら、より簡単な解決策があります。でclientC
以下を実行します。
ssh -J userB@serverB userA@serverA
これは最初にsshに接続しuserB@serverB
、sshで自動的にポート転送を設定しserverA
、転送されたポートを介してに接続しますuserA@serverA
。
これが不可能な場合は、ファイアウォールやその他のネットワーク制限が邪魔にならないという前提で、いくつかの修正を使用して方法を使用できます。
以下で実行するリバースフォワードコマンドを調整する必要がありますserverA
。
ssh userB@serverB -R "*:1234:localhost:22"
ここで*
設定するのは、bind_address
逆方向転送を監視するためのアドレスです。 SSHのマニュアルページから:
デフォルトでは、サーバーのTCPリスニングソケットはループバックインターフェイスにのみバインドされます。これはバインドアドレスを指定することで無視できます。空のバインド・アドレスまたはアドレス「*」は、リモート・ソケットがすべてのインターフェースでリッスンする必要があることを示します。リモートバインドアドレッシングは、サーバーのGatewayPortsオプションが有効になっている場合にのみ成功します(sshd_config(5)を参照)。
したがって、設定により、bind_address
すべてのインターフェイスで接続を受信できます。 (に設定したバージョンでは、IPアドレスがのネットワークインターフェースを参照していないclientC
ため機能しません。clientC
serverB
GatewayPorts clientspecified
設定も必要です/etc/ssh/sshd_config
。これはssh -R
非ループバックインターフェイスにバインドする権限を与えます。
これで、以下からSSH経由で接続できますclientC
。
ssh userA@serverB -p 1234
このタイプのB
ポート転送は、A
高速で汚れた作業に適しています。もっとプロダクションフレンドリーなものが必要な場合は、SSH転送を使用する代わりに、HAProxy、nginx、またはiptables / nftablesなどのものを使用してTCP転送を処理することを検討してください。
答え2
sshd_config
私のアプローチは正しいです。サーバーAとサーバーB(プロキシ)を再構成する必要があります。
AllowAgentForwarding yes
AllowTcpForwarding yes
GatewayPorts yes
X11Forwarding yes
詳細はこちらからご覧いただけます。SSHポート転送。