iptables重定向到docker容器中的不同主机/ tproxy

时间:2014-10-16 08:02:11

标签: docker iptables

我开始怀疑这是否与iptables无关,但我想透明地将https重定向到redsocks(代理)服务器。

设置就是这样。我在boot2docker中,想要使用需要身份验证的上游代理。 我在一个docker容器中运行CNTLM,以及munkyboy / redsocks图像。 Redsocks正在将所有东西交给cntlm,然后上行。

然后我使用了像

这样的行
iptables -t nat -A PREROUTING -p tcp '!' -s $CNTLM --dport 443 -j DNAT --to $REDSOCKS:12346 

这适用于任何NAT的东西。它通过redsocks和cntlm,然后是互联网,它不知道它使用代理。然而,由于它是预先路由表,因此仅适用于除主机之外的所有内容。我希望它也适用于主机。 到处都在谈论使用输出表,比如

iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to $REDSOCKS:12346

这似乎与https相比很奇怪。查看日志,redsocks获取连接,将其传递给CNTLM,但随后cntlm打印此

cntlm[1]: 172.17.0.9 CONNECT 172.17.0.9:12346

由于 curl https://google.com

我认为DNAT正在改变数据包的IP dst?做DNAT,我认为https通过代理使用它。有趣的是,它在PREROUTING表和OUTPUT表中的工作方式不同。

我也尝试过使用TPROXY的MANGLE表,但这只能在PREROUTING上使用。我还看到人们使用REDIRECT而不是DNAT,但似乎只是将其重定向到此计算机上的端口。所以不是特别有用,除非我可以使用REDIRECT将它指向veth设备上的端口吗?

我对iptables有点不高兴,大师是否知道这是否可行?

1 个答案:

答案 0 :(得分:0)

你应该能够使用Docker本身,而不必乱用iptables。