SSH 反向隧道进入 Docker 容器

SSH 反向隧道进入 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 

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

docker run  --net=host -t  -i snapshot /bin/bash

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

答案1

我遇到了同样的问题,只是我有两个容器通过--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 容器内部使用。(以及从任何其他主机使用)。

答案2

@barlop 的评论非常有用。我删除了 iptables 规则,然后尝试运行nc -l -p 1234nc -l 127.0.0.1 -p 1234然后在容器中尝试telnet localhost 1234,它成功了。所以我试了一下telnet localhost 9000,它也成功了!我认为以前没有,但现在似乎成功了。所以:不需要任何 iptables 规则,它只是与 一起工作--net=host。但是,lsof -i :9000 仍然没有显示任何内容,可能我以前只用它测试过。

编辑:netstat -anl |grep :9000容器中显示开放端口为 LISTEN。lsof 没有显示。很奇怪。

相关内容