我有一个泊坞设置,它禁用了篡改iptables
的默认行为。因此,通过在ufw
上指定规则,我可以完全正常地允许或阻止特定端口到外部世界。直到我发现无法访问访问该网站的客户端的真实IP的问题。我所看到的只是容器内的172.0.0.1,即IP docker0
网络。
我找到了一个解决方案,要求我将以下内容添加到iptables
iptables -t nat -A PREROUTING ! -i docker0 -p tcp --dport 80 -j DNAT --to-destination 172.17.0.7:80
其中172.17.0.7
是代理容器的IP。现在的问题是,如果IP重新启动,那么IP往往会发生变化,然后我的规则将不再有效。
是否有任何优雅的方法可以解决这个问题,而无需考虑将静态IP分配给容器,如果可能的话。
如果您需要查看我的设置的更多详细信息,请与我们联系。我很乐意发布它们。
答案 0 :(得分:1)
您可以尝试在没有userland代理的情况下运行dockerd,这是屏蔽IP的过程。
--userland-proxy=false
虽然有various issues这样做。
否则routing "real" IP's to containers是最干净的解决方案。
答案 1 :(得分:1)
或者考虑What is the best practice of docker + ufw under Ubuntu解决方案。
POSTROUTING
iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
解决方案对我来说效果更好。