Linux
為什麼在鏈路斷開時刷新 IPv6 地址?
分配給網路介面的 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