logo NodeSeekbeta

让docker用好大方的IPv6 /48

先测试下是否能自己分配/48 (有的机商没写清楚);hostsailor的面板可以分配/64子网。而ip a显示有多个/48地址。
假设你的前缀是 2a01:4f8:xxx:xxx::
这里的关键是把第四段(子网位)改一下,比如本来是 ...:4::1,改成 ...:5::1
注意:掩码必须用 /64

sudo ip addr add 2001:db8:1234:1::1/64 dev eth0
ping6 -I 2001:db8:1234:1::1 google.com

如果是通的,那你可以完整使用/48子网。
删除临时增加的

sudo ip addr del 2001:db8:1234:1::1/64 dev eth0

最推荐、最标准的配置方案

假设你的 /48 前缀是 2001:db8:beef::/48。

  • 宿主机 (Host):使用第 0 个子网 (2001:db8:beef:0::/64)。
    
  • Docker 容器:使用第 1 个子网 (2001:db8:beef:1::/64)。
    

这样做的好处是宿主机和容器在逻辑上处于不同的网段,路由清晰,互不干扰。

  1. 修改 /etc/docker/daemon.json
{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:beef:1::/64",
  "ip6tables": true,
  "experimental": true
}

请将下面的配置写入文件。 注意: 请务必将 fixed-cidr-v6 的值替换为你自己的 第 1 个子网。
(例如:如果你的 IP 是 2a01:4f8:111:222::2,那么你的 Docker 子网应该是 2a01:4f8:111:222:1::/64,注意中间那个 :1:)

fixed-cidr-v6: Docker 会把这个 /64 再次切分成很多小块分配给不同的 Docker 网络,或者直接从这里分配地址。

ip6tables: true: 这是一个安全开关。开启后,Docker 会在 ip6tables 里建立规则链。默认情况下,它会阻止外网直接访问容器端口(即使容器有公网 IPv6),除非你在 docker run 时使用了 -p 80:80(在 IPv6 模式下,这会同时放行防火墙规则)。如果你希望容器所有端口默认对公网开放(不推荐),则需要手动调整防火墙。

  1. 必做:开启内核转发 (不可省略)

Docker 分配了 IP 之后,你的宿主机实际上就变成了一台“路由器”。Linux 默认是不允许做路由转发的,必须手动开启。
临时生效:sysctl -w net.ipv6.conf.all.forwarding=1
永久生效配置: 编辑 /etc/sysctl.conf,确保包含以下行:

net.ipv6.conf.all.forwarding=1
(有些系统可能还需要 net.ipv6.conf.default.forwarding=1)
sysctl -p
systemctl restart docker

启动一个 alpine 容器查看 IP

docker run --rm -it alpine ip -6 a

结果显示

2: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 state UP 
    inet6 2a04:xxxx:xx:1::2/64 scope global flags 02 
       valid_lft forever preferred_lft forever

已经自动分配成功。

  1. (进阶建议) 清理宿主机网络配置

既然你已经打算让 Docker 独占 subnet 1,建议你检查一下宿主机的网络配置(/etc/network/interfaces 或 Netplan)。

最佳实践:将宿主机的掩码显式设置为 /64(而不是 ip a 现在显示的 /48)。

理由:如果宿主机网卡认为自己拥有整个 /48(On-link),而 Docker 也占用了其中的一段,内核路由表里可能会有两条冲突的路由。虽然 Linux 通常会优先匹配更精确的路由(Docker 的 /64 优于 eth0 的 /48),但手动把宿主机改为 /64 是最稳妥的做法,能避免很多奇怪的网络不通问题。
(可做可不做)

  • 学习到了新知识

  • 其实直接nat更好,和IPv4一样用 ac01

  • 在这里 看到这段,v6应该不会容易被滥用吧?/48有 (2^{16}=65,536) 个/64啊
    https://hostsailor.com/acceptable-use-policy
    IPv6
    As we shift from IPv4 to IPv6 as the primary network address space, certain actions will be considered violations of our Acceptable Use Policy. Overuse of IPv6 resources can impact network performance and, in turn, the quality of service we provide to our users. Misuse of allocated server IPv6 addresses is a key concern. To maintain a high level of service for everyone, we will carefully regulate the number of IPv6 addresses assigned to each server.
    随着我们从 IPv4 过渡到 IPv6 作为主要网络地址空间,某些行为将被视为违反我们的《可接受使用政策》。过度使用 IPv6 资源会影响网络性能,进而影响我们为用户提供的服务质量。滥用已分配的服务器 IPv6 地址是一个关键问题。为了确保所有用户都能获得高质量的服务,我们将严格控制分配给每台服务器的 IPv6 地址数量。

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有60108位seeker

🎉欢迎新用户🎉