Назад | Перейти на главную страницу

Почему IPv6-адреса сбрасываются при отключении ссылки?

Существует разница в поведении адресов IPv4 и IPv6, назначенных сетевому интерфейсу: когда ссылка отбрасывается, как в случае «ip link set down dev eth0», адреса IPv4 сохраняются, но адреса IPv6 сбрасываются. Если ссылка будет установлена ​​снова, адреса IPv4 могут быть немедленно использованы для передачи трафика, но адреса IPv6 должны быть назначены.

Это ошибка или это умышленно? Если это сделано намеренно, где я могу найти это явно задокументированное?

Один из сотрудников утверждал, что это ошибка, которая будет исправлена ​​в следующем ядре; другой утверждал, что это сделано намеренно, поскольку IPv6 предполагает динамическую адресацию. Я обнаружил идентичное поведение в нескольких разных дистрибутивах Linux и разных версиях ядра, поэтому я почти уверен, что это сделано намеренно, но я хочу найти документацию, как в цитате из RFC, чтобы решить этот вопрос.

Если есть обходной путь, который заставляет сохранять вручную назначенные IPv6-адреса, было бы полезно знать об этом.

Похоже, что настройка, которую вы ищете, 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)

Если вы используете более старую версию Linux, чем 4.6, лучший обходной путь, который я могу предложить, - назначить адрес dummy интерфейс, который вы поддерживаете, даже если физический интерфейс выйдет из строя:

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