Docker容器内无法访问主机上的远程SSH反向隧道端口的安全合规解决方案求助
Docker容器内无法访问主机上的远程SSH反向隧道端口的安全合规解决方案求助
各位大佬好,遇到一个棘手的问题想请教下:
我家里的MacBook上跑着一个80端口的Web服务器,它在NAT内网后面。我还有一台公网可访问的Ubuntu服务器,为了能从这台Ubuntu服务器访问我本地的Web服务,我建了一条SSH反向隧道:
ssh -fnNT -R 8080:localhost:80 remote-host
这条隧道本身是正常工作的——在Ubuntu主机上直接执行curl localhost:8080,能拿到本地Web服务的正常响应。但当我在Ubuntu主机的Docker容器里尝试访问这个端口时,却一直连接超时。
我启动容器的命令是这样的:
docker run -it --add-host host.docker.internal:host-gateway ubuntu:latest /bin/bash
进入容器后执行curl -vvv host.docker.internal:8080,得到的错误信息是:
- connect to 172.17.0.1 port 8080 failed: Connection timed out
我在网上搜过一些解决办法,但因为安全要求,这些方案都不能用:
- 不能用
--network host参数,这个会把容器直接放到主机网络里,不符合安全规范 - 也不能修改隧道让它监听所有接口(比如改成
ssh -R 0.0.0.0:8080:localhost:80),这样会把端口暴露给所有外部访问,风险太高
另外补充一下,容器内访问主机上的其他端口是完全正常的,比如curl host.docker.internal:80就能正常得到主机上Caddy服务器的响应,只有这个SSH隧道的8080端口连不上。
想请教下,有没有什么安全合规的办法,能让Docker容器访问到这个SSH反向隧道的端口呢?
备注:内容来源于stack exchange,提问作者henk




