具有真实IP的Docker和UFW

时间:2017-03-13 01:04:01

标签: docker docker-compose ubuntu-16.04 iptables ufw

我有一个泊坞设置,它禁用了篡改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分配给容器,如果可能的话。

如果您需要查看我的设置的更多详细信息,请与我们联系。我很乐意发布它们。

2 个答案:

答案 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解决方案对我来说效果更好。