Существует разница в поведении адресов 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