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