SSH 反向隧道进入 Docker 容器

chx*_*chx 5 iptables docker

我需要在 docker 容器中对服务器上失败的内容进行 xdebug,并且从我的笔记本电脑上运行ssh -R 9000:localhost:9000 server并验证了隧道telnet localhost 9000。到目前为止一切顺利,我建立了联系。

现在,在服务器上我做了

iptables -t nat -I PREROUTING -p tcp -d 172.17.42.1 --dport 9000 -j DNAT --to 127.0.0.1:9000 
Run Code Online (Sandbox Code Playgroud)

最后我提交了有问题的 docker 实例并运行

docker run  --net=host -t  -i snapshot /bin/bash
Run Code Online (Sandbox Code Playgroud)

容器内部telnet 172.17.42.1 9000拒绝连接。

小智 4

我遇到了同样的问题,除了我有两个容器用 --link 连接在一起,所以 --net=host 不适用于这种情况。

当使用 ssh 端口转发到远程主机时ssh -R 9000:localhost:9000 serverlsof -P -i -n可能会显示该端口已绑定到服务器环回设备,如下所示:

sshd 39172 ubuntu 9u IPv4 2941407 0t0 TCP ::1:9000 (LISTEN)

该环回接口不可用于 docker 容器内部的网络。我通过添加GatewayPorts yes到服务器上的 sshd_config 文件并重新启动 sshd 来解决此问题。

然后转发的端口 9000 绑定到普通接口,并可从 docker 容器内部使用。(以及与此相关的任何其他主机)。