如何让docker容器与sshuttle一起工作?

pey*_*oot 10 dns vpn docker

我需要容器能够使用sshuttle工具.我尝试在主机或包含器中的任何一种方式.但它都不会起作用.这就是我需要的:我跑:sshuttle -r mysshaccount@my.remote.server --dns 0/0 在主持人.它可以通过sshuttle帮助托管应用程序访问Internet.但对于容器,它无法解析DNS请求.似乎--dns会影响容器的DNS功能.如何让容器与主机的sshuttle一起工作?

如果我在容器内运行sshuttle也是如此.似乎容器没有"--dns"sshuttle中的选项权限.

无论如何,我需要"--dns"在集装箱中使用这个选项,因为这是在中国克服政府防火墙(GFW)的唯一途径.

有人帮忙使它工作?

mrk*_*han 13

试试sshuttle -l 0.0.0.0 --dns -vvr XXXXXX@YY.YY.YY.YY 0/0,这对我有用.我想我们需要-l 0.0.0.0使用"remote ip"的docker容器可以连接到隧道.

  • 这曾经运作良好。但是,此解决方案在最近的 Docker 版本中停止工作。在我的测试中,“Docker version 17.04.0-ce, build 4845c56”无法再从这种隧道设置中受益。 (2认同)

mik*_*łak 7

通常,设置0.0.0.0需要监听外部可用的接口,sshuttle也是如此.

更安全的方法如下 - 在您的主机上:

  1. 启动你的"普通" sshuttle实例,听localhost,
  2. 启动另一个sshuttle实例,监听docker主机的虚拟网络接口.

例如:

sshuttle --dns -r <your-ssh-server> 0/0
sshuttle -l 172.17.0.1 --dns -r <your-ssh-server> 0/0
Run Code Online (Sandbox Code Playgroud)

请注意,这将干扰主机< - >容器通信(例如端口绑定),但它将允许容器的安全外部连接(您可以进一步帮助自己排除Docker的子网,例如-x 172.17.0.0/24).


Abo*_*ifi 5

您可以查看您的网桥子网并将其排除在 sshuttle 中,例如,

sudo sshuttle -l 0.0.0.0:0 -r user@host -x host -x 127.0.0.1 -x 172.21.0.0/24 -x 172.22.0.0/24 -x 172.23.0.0/24 0/0 --dns
Run Code Online (Sandbox Code Playgroud)

  • 要查找网桥,首先通过`docker network ls`获取network_id列表,然后使用特定的network_id执行`docker network informator network_id`来查找子网 (2认同)