如何设置 IP V6 自动配置

如何设置 IP V6 自动配置

我才刚刚开始研究 IP v6,并且在我的虚拟主机上遇到了一个问题。

主机网络接口 ( eth0 ) 当前正在配置静态 IPv4 地址。/etc/network/interfaces 中没有任何内容指示如何配置 IP V6,因此我假设默认为无状态自动配置,就像我指定的那样

iface eth0 inet6 auto 

如果已经收到 2 /64 IPV6 地址,那么我现在看到在 eth0 上配置了 2 个 IPv6 地址和一个 IPV4 地址。

我想为我的 docker 容器使用第二个地址,因此我的想法是,我必须在 /etc/docker/daemon.json 中配置该地址,但我还必须阻止我的系统将其分配给 eth0。

所以问题是:

我可以将我的系统配置为仅为 eth0 分配一个 IPv6 地址,以便另一个地址可供 docker 使用吗?

或者我必须恢复到静态 IPV6 配置?

此外,在无状态模式下,IPV6 地址是前缀和我的 MAC 地址的组合。我是否在静态模式下指定完整 IP,或者 MAC 部分是否可以自动配置?

提前感谢托马斯

答案1

我想为我的 docker 容器使用第二个地址,所以我的想法是在 /etc/docker/daemon.json 中配置该地址

Docker 的配置不需要地址——它需要一个网络前缀(换句话说,整个子网)。它需要一个唯一的地址每个容器,不只是对 Docker 整体而言。

只要 Docker 管理自己的隔离网络,它应该有一个专用前缀 – 在 IPv4 和 IPv6 中都是不是直接让两个接口使用相同的子网前缀(即应该直接属于您的子网的路由地址)。

无论您想“共享” IPv4 /24 还是 IPv6 /64,问题在于您的路由器和子网中的其他所有人都会期望进行 ARP(NDP)查询并接收回复 - 但如果地址从 eth0 取消分配并路由到更远的地方,则不会发生这种情况。

为了真正使这种“共享”前缀发挥作用,您需要:

  • 直接将容器连接到 eth0(例如在 Docker 中使用 macvlan 桥接模式),或者
  • 在主机上运行 Proxy-NDP(例如ndppd),这样你的主机就可以代表它路由的地址发出 NDP 响应,或者
  • 放弃这个想法,为docker0配置一个单独的/64。

我可以将我的系统配置为仅为 eth0 分配一个 IPv6 地址,以便另一个地址可供 docker 使用吗?

这从一开始就没有任何意义。不要认为这是“必须保持另一个地址可用”。整个 /64 可用,如果您需要一个地址,您实际上可以从同一个 /64 中获取第三个地址。

(无论如何你都需要这样做,因为每个您的 Docker 容器需要一个唯一的地址。)

在 IPv6 无状态自动配置中,主机仅接收网络前缀 - 每个主机没有地址配额,实际上您当前看到的两个地址中的一个很可能被标记为“临时”,并且每隔几个小时就会被一个全新的地址替换。也没有用于声明/租用地址的特定协议,这就是为什么它被称为“无状态”自动配置。

此外,在无状态模式下,IPV6 地址是前缀和我的 MAC 地址的组合。我是否在静态模式下指定完整 IP,或者 MAC 部分是否可以自动配置?

您指定完整的 IP 地址;但是,您可以选择任何您想要的后缀。它不需要基于您的 MAC 地址,它只需要是唯一的并且在子网前缀内。

其他主机将始终使用 NDP(IPv6 的 ARP)来发现您的第 2 层地址,在这方面对“基于 MAC”的 IPv6 地址没有特殊处理。

(除非网络运营商真的坚持这样做——但那样的话你的 eth0 就不能与这些无论如何,IPv6 地址都是如此,因为其中只有一个是基于 MAC 的,另一个是随机生成的。)

各种操作系统已经完全停止使用基于 MAC 的地址,即使对于无状态自动配置也是如此,而是用无意义的基于哈希的地址取而代之(例如根据 RFC 7217)。

相关内容