加速器 发表于 2025-9-14 02:00:04

简单开通docker容器内ipv6 | VPSVPN

用“全球单播前缀(GUA)”给容器(推荐,纯路由,无 NAT) ,理想做法是给 docker 网桥分一个 /64 公网前缀,上游把这个 /64 路由到你的宿主机。在常见云上这通常需要“申请一个额外 /64 并设置路由到实例”,如果你的供应商支持:
假设你拿到了 2403:18f0:3:30a::/64 并路由到宿主 eth0。改 daemon.json:
{"ipv6": true,"fixed-cidr-v6": "2403:18f0:3:30a::/64","ip6tables": true,"experimental": true}重启 Docker:
systemctl restart docker相关说明

其实做完第二步开启 IPv6 转发,大部分情况下应该也就够用了,这里解释下,为什么开启转发就能通公网?
你的主机本身已经有公网 IPv6(/64 前缀)

[*]你的 eth0 地址是 公网ipv6,在运营商的全球单播前缀里。
[*]这意味着宿主机具备完整的 IPv6 出口能力。
Docker 给容器分配了一个 ULA 子网 fd00::/80

[*]一旦开启 net.ipv6.conf.all.forwarding=1,宿主机就会把来自 docker0 的 IPv6 包直接路由出去。
[*]如果运营商的网关不做过滤,那么即使源地址是 fd00::/80(ULA),包也会被转发到公网。
[*]一些云环境会“宽松处理”源地址检查 → 导致 容器用 ULA 也能访问公网。
没有 NAT66,但依然能出去

[*]正常来说,ULA(fd00::/8)是“只在本地有效”,外网不应该接受。
[*]你能通,说明:

[*]要么是出口网关自动给这些包做了 SNAT(NAT66),把源地址换成宿主的公网地址;
[*]要么运营商的路由策略比较“宽松”,直接放行了。




[*]开启 IPv6 转发 后,容器能用 IPv6 出公网 → 说明出口网关帮你做了隐藏的地址处理。
[*]在逻辑上,你相当于“白捡了 NAT66 功能”,Docker 不需要自己配置 NAT 规则。

页: [1]
查看完整版本: 简单开通docker容器内ipv6 | VPSVPN