我开始怀疑这是否与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有点不高兴,大师是否知道这是否可行?
答案 0 :(得分:0)
你应该能够使用Docker本身,而不必乱用iptables。