为什么在链接断开时 IPv6 地址会被刷新?

为什么在链接断开时 IPv6 地址会被刷新?

分配给网络接口的 IPv4 和 IPv6 地址的行为有所不同:当链接断开时(如使用“ip link set down dev eth0”),IPv4 地址会保留,但 IPv6 地址会被刷新。如果链接再次建立,则可以立即使用 IPv4 地址来传递流量,但必须分配 IPv6 地址。

这是错误还是设计使然?如果是设计使然,我在哪里可以找到明确记录?

一位同事认为这是一个错误,将在即将发布的内核中修复;另一位同事认为这是设计使然,因为 IPv6 假设动态寻址。我在几个不同的 Linux 发行版和不同的内核版本中发现了相同的行为,所以我几乎可以肯定这是设计使然,但我想找到文档(如 RFC 中的引文)来解决这个问题。

如果有一种解决方法可以强制保留手动分配的 IPv6 地址,那么了解它也会很有用。

答案1

听起来你正在寻找的设置是keep_addr_on_down在 Linux 4.6 中引入的。引用文档/网络/ip-sysctl.txt

keep_addr_on_down - INTEGER
    Keep all IPv6 addresses on an interface down event. If set static
    global addresses with no expiration time are not flushed.
      >0 : enabled
       0 : system default
      <0 : disabled

    Default: 0 (addresses are removed)

如果您使用的是 4.6 之前的 Linux 版本,我建议的最佳解决方法是将地址分配给一个dummy接口,即使物理接口关闭,您也可以保留该接口:

modprobe dummy
ip -6 addr add dev dummy0 2001:db8::42/128

相关内容