これらのルーティングバリアの背後にあるコンピューターへのSSHアクセスを許可するためにファイアウォール/ NATをバイパスするために使用するDockerコンテナーをセットアップしようとしています。本質的に、私は他のコンピューターが接続するdockerコンテナー内でリッスンするSSHサービスを使用しており、リバースSSHポート転送を開いており、ファイアウォールの背後にあるコンピューターに接続する場合は、代わりにdockerizedに接続しますリバースポート上のプロキシサーバー。例:
ファイアウォールで保護されたコンピュータ「ボブ」はプロキシサーバーに接続します。
ssh -R 2024:localhost:22 -N remote.server
次に、ポート2024
でリモートサーバーに接続し、トンネルをたどり、bobのlocalhost:22
に接続します。
ssh -p 2024 remote.server
Docker化されていない場合、これはすべてうまく機能しますが、Docker化されたサービスに移動しようとすると、Dockerコンテナ内のsshd
サーバーが頑固にリモートポートフォワードを開くことを拒否することがわかりました。上記の最初のステップでssh -vvv
に接続すると、次のようになります。
...
debug1: Entering interactive session.
debug1: pledge: network
debug3: receive packet: type 4
debug1: Remote: Server has disabled port forwarding.
debug3: receive packet: type 82
debug1: remote forward failure for: listen 2024, connect localhost:22
Warning: remote port forwarding failed for listen port 2024
debug1: All remote forwarding requests processed
sshd
がリモートポート転送を許可するように設定されていないようです。ただし、私のsshd_config
は次のように考えています。
# tail /etc/ssh/sshd_config -n 5
GatewayPorts yes
AllowTcpForwarding yes
AllowStreamLocalForwarding yes
PermitTunnel yes
UsePrivilegeSeparation no
実際、Dockerコンテナー内でssh -ddd
を使用して実行し、次に上記の行で接続すると、最初に次のように表示されます。
debug3: /etc/ssh/sshd_config:91 setting GatewayPorts yes
debug3: /etc/ssh/sshd_config:92 setting AllowTcpForwarding yes
debug3: /etc/ssh/sshd_config:93 setting AllowStreamLocalForwarding yes
debug3: /etc/ssh/sshd_config:94 setting PermitTunnel yes
debug3: /etc/ssh/sshd_config:95 setting UsePrivilegeSeparation no
に続く:
debug1: server_input_global_request: rtype tcpip-forward want_reply 1
debug1: server_input_global_request: tcpip-forward listen localhost port 2024
debug1: server_input_global_request: rtype [email protected] want_reply 0
明らかに私の構成は正しく設定されていますが、クライアントはサーバーがポート転送を実行できないとまだ思っているようです。 opensshサーバーにリモート転送を実行させるにはどうすればよいですか?この失敗の原因は何ですか?
クライアントはOpenSSH_7.2p2 Ubuntu-4ubuntu2.4
を実行しており、サーバーはOpenSSH_6.7p1 Debian-5+deb8u4
を実行しており、Dockerのバージョンは17.09.1-ce
on Amazon Linux 2017.09
です。
ありがとう!
ああ!私はそれを考え出した。これは、docker
がipv6
コンテナの内部ネットワーク、およびカーネルにipv6
転送が有効になっています。そのため、コンテナの外でsshd
を実行すると、ipv4
ですが、Docker Bridgeネットワークのコンテナ内でsshd
を実行すると、ipv6
およびポート転送を開くことができません。
有効にしたらipv6
転送、(追加net.ipv6.conf.all.forwarding = 1
/etc/sysctl.conf
および再起動)すべてが正常に機能し始めます。
Sshdにipv4の使用を強制することもできます。あなたの例では、次のようにスイッチ「-4」を追加します:
ssh -4 -R 2024:localhost:22 -N remote.server