You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动