web-dev-qa-db-ja.com

リンクダウン時にIPv6アドレスがフラッシュされるのはなぜですか?

ネットワークインターフェイスに割り当てられたIPv4アドレスとIPv6アドレスの動作には違いがあります。「ip link set down dev eth0」のようにリンクがドロップされると、IPv4アドレスは保持されますが、IPv6アドレスはフラッシュされます。リンクが再び立ち上がると、IPv4アドレスをすぐに使用してトラフィックを渡すことができますが、IPv6アドレスを割り当てる必要があります。

これはバグですか、それとも仕様ですか?設計上、明示的に文書化されている場所はどこにありますか?

ある同僚は、これはバグであり、次のカーネルで修正されると主張しました。別の人は、IPv6は動的アドレス指定を想定しているため、これは仕様によるものであると主張しています。私はいくつかの異なるLinuxディストリビューションと異なるカーネルバージョンで同じ動作を見つけたので、これが仕様によるものであるとほぼ確信していますが、問題を解決するために、RFCからの引用のようにドキュメントを見つけたいです。

手動で割り当てられたIPv6アドレスの保持を強制する回避策がある場合は、それも知っておくと役立ちます。

6
bgvaughan

お探しの設定は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
5
kasperd