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

设置是这个。我在boot2docker中,并想使用需要身份验证的上游代理。
我在docker容器和munkyboy / redsocks镜像中运行CNTLM。 Redsocks正在将所有内容移交给cntlm,然后cntlm进入上游。

然后我用了像

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

这对于被NAT转换的任何东西都非常有用。它先经过redsocks和cntlm,然后再经过Internet,但不知道它正在使用代理。但是,由于它是预路由表,因此仅适用于主机以外的所有其他功能。我希望它也可以在主机上工作。
到处都在谈论使用输出表,例如
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有点不满意,老师知道这是否可行吗?

最佳答案

您应该能够使用Docker本身执行此操作,而完全不必弄乱iptables。

关于docker - iptables重定向到docker容器中的其他主机/tproxy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26399179/

10-16 09:51