Linux

為什麼在鏈路斷開時刷新 IPv6 地址?

  • April 10, 2017

分配給網路介面的 IPv4 和 IPv6 地址之間的行為有所不同:當連結斷開時,就像“ip link set down dev eth0”一樣,IPv4 地址被保留,但 IPv6 地址被刷新。如果鏈路再次開通,可以立即使用 IPv4 地址傳遞流量,但必須分配 IPv6 地址。

這是一個錯誤,還是設計使然?如果設計使然,我在哪裡可以找到明確記錄的內容?

一位同事認為這是一個錯誤,需要在即將發布的核心中修復;另一個人認為這是設計使然,因為 IPv6 採用動態定址。我在幾個不同的 Linux 發行版和不同的核心版本中發現了相同的行為,所以我幾乎可以肯定這是設計使然,但我想找到文件(如 RFC 的引用)來解決這個問題。

如果有一種解決方法可以強制保留手動分配的 IPv6 地址,那麼了解這一點也很有用。

聽起來您正在尋找的設置是keep_addr_on_down在 Linux 4.6 中引入的。引用Documentation/networking/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

引用自:https://serverfault.com/questions/842542