Существует разница в поведении между адресами IPv4 и IPv6, назначенными сетевому интерфейсу: когда ссылка отбрасывается, как в случае" ip link set down dev eth0 ", IPv4 адреса сохраняются, но адреса IPv6 сбрасываются. Если ссылка появится снова, IPv4-адреса могут быть немедленно использованы для передачи трафика, но IPv6-адреса должны быть назначены.
Это ошибка или намеренно? Если это сделано намеренно, где я могу найти это явно задокументированное?
Один сотрудник утверждал, что это ошибка, которая будет исправлена в следующем ядре; другой утверждал, что это сделано намеренно, поскольку IPv6 предполагает динамическую адресацию. Я обнаружил идентичное поведение в нескольких разных дистрибутивах Linux и разных версиях ядра, поэтому я почти уверен, что это сделано намеренно, но я хочу найти документацию, как в цитате из RFC, чтобы решить этот вопрос.
Если есть обходной путь, принудительно сохраняющий вручную назначенные IPv6-адреса, было бы полезно знать об этом.
Похоже, вы ищете параметр keep_addr_on_down
, который был введен в Linux 4.6. Цитата Documentation / network / 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, лучший обходной путь, который я могу предложить, - присвоить адрес фиктивному
интерфейс, который вы сохраняете, даже если физический интерфейс не работает:
modprobe dummy
ip -6 addr add dev dummy0 2001:db8::42/128