尝试让我的 Docker 设置与 IPv6 配合使用时,我感到非常沮丧。我的配置如下:
- Docker Compose 服务 1:nginx 通过网络访问 Compose 服务 2 中的 wordpress:php-fpm 容器
- Docker Compose 服务 2:Wordpress(php-fpm)和 MySQL
当我通过 IPv4 访问我的 Wordpress 实例时,一切都运行正常。我可以使用它们的 IPv4 地址单独识别连接客户端。但是,当我尝试通过 IPv6 访问我的网站时,它也会正常响应并且一切正常,但 nginx 日志中的源 IP 地址是 IPv4 地址 - 来自 Docker 的用户空间代理的地址。
目前,这不是什么大问题,因为一切都运行良好,但这将成为我使我的网站面向未来的障碍,因为我想将其他应用程序部署到同一主机。对于统计而言,这最终会成为一个问题,因为所有访问者通过 IPv6 的请求都通过 Docker 代理,因此似乎是从同一个 IP 地址访问的。
我尝试按照 Docker 的官方指南进行操作启用 IPv6,但不清楚该设置什么fixed-cidr-v6
。我也尝试过使用这个 Docker 镜像“使其工作”,但它仍然需要fixed-cidr-v6
设置......
编辑:不清楚我的意思是,为这个键设置什么值 - 我不确定使用哪个命令或如何以其他方式获取所需的 ipv6 地址范围...在网络方面我真的是个菜鸟,我感谢你的耐心!
如果 Docker 在不久的将来无法正确处理 IPv6 流量,我想我可能不得不放弃 Docker,至少放弃 nginx 等部分。我是否错过了一些可以解决我的问题的东西,或者我的一些解决方案是什么?
提前致谢!我对这个社区还很陌生,所以请随时指出错误。
答案1
这些 IPv6 CIDR 网络需要包含您的前缀,超出地址空间并路由到您的容器主机。路由很重要,因此路由器会将整个范围发送到容器主机。
就像您的公共 IPv4 地址一样,您的 IPv6 网络是由您的托管服务提供商提供的,并且对您来说是唯一的。可能看起来像2001:db8:114:8155::/64
根据该文档,根据您的容器网络设计,可以在几个可能的地方设置这些。fixed-cidr-v6 用于默认网桥,默认地址池下为默认池,或分配给特定网络,例如使用 --ipv6 --subnet cli 选项。
docker-ipv6nat 不会消除定义网络的需要。使用 NAT 到私有 ULA 地址空间是一种黑客行为,这在 v6 中通常不需要。因为 Docker 的 v6 设计不幸不成熟,即使在改进了图像中提到的问题之后也是如此。人们会认为大量容器是 IPv6 等巨大地址空间的绝佳用例……