ネットワークインターフェイスに割り当てられた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