Docker 和具有真实 IP 的 UFW

Docker and UFW with real IP

我有一个 docker 设置,它禁用了篡改 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 分配给容器。

如果您需要查看我的设置的更多详细信息,请告诉我。我很高兴 post 他们。

你可以试试运行没有userland代理的dockerd,这是屏蔽IP的进程。

--userland-proxy=false

虽然有 various issues 这样做。

否则是最干净的解决方案。

或者考虑 解决方案。

POSTROUTING iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE 解决方案对我来说效果更好。