Ssh

Docker 容器內的遠端埠轉發

  • September 8, 2021

我正在嘗試設置一個 docker 容器,用於繞過防火牆/NAT,以允許 SSH 訪問這些路由障礙後面的電腦。本質上,我有一個 SSH 服務在 docker 容器內監聽,我的其他電腦連接到該服務,打開反向 SSH 埠轉發,然後如果我想連接到防火牆後面的電腦,我改為連接到我的 dockerized反向埠上的代理伺服器。例子:

防火牆電腦“Bob”連接到代理伺服器:

ssh -R 2024:localhost:22 -N remote.server

接下來,我連接到埠上的遠端伺服器,2024以便沿著隧道返回並連接到localhost:22bob:

ssh -p 2024 remote.server

當它沒有被 dockerized 時,這一切都很好,但是當我試圖將它移動到一個 dockerized 服務時,我發現我sshd在 docker 容器中的伺服器頑固地拒絕打開遠端埠轉發。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

事實上,ssh -ddd在 docker 容器內執行,然後連接上面的行首先顯示:

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 no-more-sessions@openssh.com want_reply 0

很明顯我的配置設置正確,但客戶端似乎仍然認為伺服器無法進行埠轉發。如何說服 openssh 伺服器執行遠端轉發?什麼可能導致此失敗?

客戶端執行OpenSSH_7.2p2 Ubuntu-4ubuntu2.4,伺服器執行OpenSSH_6.7p1 Debian-5+deb8u4,docker版本17.09.1-ce開啟Amazon Linux 2017.09

謝謝!

啊哈!我想到了。這是因為docker正在為我的容器創建一個ipv6內部網路,而我的核心沒有ipv6啟用轉發。因此,當sshd在容器外執行時,它可以正常工作ipv4,但是當sshd在 docker bridge 網路上的容器內執行時,它會監聽ipv6並且無法打開埠轉發。

一旦我啟用ipv6轉發,(添加net.ipv6.conf.all.forwarding = 1/etc/sysctl.conf重新啟動)一切都開始正常工作。

引用自:https://serverfault.com/questions/899848