私は実行していますssh -N -f -R127.0.2.3:23000:127.1.2.3:23000 user@remote
、そしてリモートのトンネルが127.0.2.3:23000
、ただし127.0.0.1:23000
、そしてリモートでいくつかのトンネルを開く必要があるので不便ですが、同じtcpポートをリッスンします。
ローカルマシンでは、トンネルは正しいIPアドレス(127.1.2.3:23000)を指しています。
リモートでいくつかのループバックデバイスを作成しようとしましたが、役に立ちませんでした。
LinuxおよびFreebsdサーバー(openbsd-ssh)も同様です。
では、ssh -Rが127.0.0.1以外のリモートのループバックIPにバインドしないのはなぜですか?
ありがとうございました。
(不適切な編集のため申し訳ありません:)
localオプションのバインドアドレスがSSHのクライアント側の制御下にある間(-L
/ LocalForward
で指定または変更-g
/ GatewayPorts
clientの構成)、remote-R
/ RemoteForward
を使用してクライアントが指定したオプションのバインドアドレスは、SSHのserverの制御下にありますserver設定 GatewayPorts
を使用します。デフォルトではno
です。 clientspecified
に設定して、クライアントがバインドするアドレスを選択できるようにする必要があります。
GatewayPorts
リモートホストがクライアントに転送されたポートに接続できるかどうかを指定します。 デフォルトでは、sshd(8)はリモートポート転送をループバックアドレスにバインドします。これにより、他のリモートホストが転送ポートに接続できなくなります。GatewayPorts
を使用して、sshdがリモートポート転送を非ループバックアドレスにバインドできるように指定し、他のホストが接続できるようにすることができます。引数はno
にして、ローカルホストのみがリモートポート転送を利用できるようにするか、yes
にしてリモートポート転送をワイルドカードアドレスにバインドするか、またはclientspecified
を指定すると、クライアントは転送がバインドされるアドレスを選択できます。 デフォルトはno
です。
さらに、クライアントの RemoteForward
エントリも同様に示しています。
[...]
bind_addressが指定されていない場合、デフォルトではループバックアドレスにのみバインドされます。 bind_addressが ‘*’または空の文字列の場合、すべてのインターフェースでリッスンするように転送が要求されます。 リモートbind_addressの指定は、サーバーのGatewayPorts
オプションが有効な場合にのみ成功します(sshd_config(5)を参照)。
そのため、サーバー上のsshのサーバー構成を変更し(通常はルートアクセスで)、このエントリをsshd_config
ファイルに追加(または編集)できるようにする必要があります。
GatewayPorts clientspecified
できない場合は、サーバー側に他の利用可能なツールがあれば(またはローカルにインストール可能)、この(非常に弱い)セキュリティ制限を克服できます。たとえば socat
、またはssh
自体をサーバーからそれ自体にLocalForward
を使用して(暗号化の層を無用に追加していても)。