Шаги ==== 1. # ip -c a 2. # ip -6 addr delete fe80::<link-local-ipv6>/64 dev ens19 && ip -c a 3. # sleep 3 && ip -c a 4. Добавить в настройки etcnet по умолчанию строку `CONFIG_IPV6=yes`, получив: ==> /etc/net/ifaces/ens19/ipv4address <== (пустой файл) ==> /etc/net/ifaces/ens19/options <== BOOTPROTO=dhcp TYPE=eth CONFIG_WIRELESS=no NM_CONTROLLED=yes DISABLED=yes SYSTEMD_CONTROLLED=no ONBOOT=yes SYSTEMD_BOOTPROTO=dhcp4 CONFIG_IPV4=yes CONFIG_IPV6=yes (в sisyphus по сравнению с p11 ещё есть DHCP_TIMEOUT=7) 5. Перезагрузиться. 6. # ip -c a 7. # ip -6 addr delete fe80::<link-local-ipv6>/64 dev ens19 && ip -c a 8. # sleep 3 && ip -c a Фактический результат ===================== До: > 6. # ip -c a > ... > 2: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 > link/ether <mac> brd ff:ff:ff:ff:ff:ff > altname enp0s19 > inet <ipv4>/21 brd <broadcast-ipv4> scope global noprefixroute ens19 > valid_lft forever preferred_lft forever > inet6 <network>:<ipv6-link-local>/64 scope global noprefixroute > valid_lft forever preferred_lft forever > inet6 fe80::<link-local-ipv6>/64 scope link noprefixroute > valid_lft forever preferred_lft forever > 7. # ip -6 addr delete fe80::<link-local-ipv6>/64 dev ens19 && ip -c a > ... > 2: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 > link/ether <mac> brd ff:ff:ff:ff:ff:ff > altname enp0s19 > inet <ipv4>/21 brd <broadcast-ipv4> scope global noprefixroute ens19 > valid_lft forever preferred_lft forever > inet6 <network>:<ipv6-link-local>/64 scope global noprefixroute > valid_lft forever preferred_lft forever > 8. # sleep 3 && ip -c a > (то же самое) После: > 6. # ip -c a > ... > 2: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 > link/ether <mac> brd ff:ff:ff:ff:ff:ff > altname enp0s19 > inet <ipv4>/21 brd <broadcast-ipv4> scope global noprefixroute ens19 > valid_lft forever preferred_lft forever > inet6 <ipv6>/64 scope global noprefixroute > valid_lft forever preferred_lft forever > inet6 fe80::<link-local-ipv6>/64 scope link noprefixroute > valid_lft forever preferred_lft forever > 7. # ip -6 addr delete fe80::<link-local-ipv6>/64 dev ens19 && ip -c a > ... > 2: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 > link/ether <mac> brd ff:ff:ff:ff:ff:ff > altname enp0s19 > inet <ipv4>/21 brd <broadcast-ipv4> scope global noprefixroute ens19 > valid_lft forever preferred_lft forever > inet6 <ipv6>/64 scope global noprefixroute > valid_lft forever preferred_lft forever > 8. # sleep 3 && ip -c a > ... > 2: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 > link/ether <mac> brd ff:ff:ff:ff:ff:ff > altname enp0s19 > inet <ipv4>/21 brd <broadcast-ipv4> scope global noprefixroute ens19 > valid_lft forever preferred_lft forever > inet6 <ipv6>/64 scope global noprefixroute > valid_lft forever preferred_lft forever > inet6 fe80::<link-local-ipv6>/64 scope link noprefixroute > valid_lft forever preferred_lft forever (Иногда сначала `scope link tentative noprefixroute` у link-local адреса, затем `tentative` исчезает.) Ожидаемый результат =================== IPv6-адрес link-local не появляется автоматически сразу после удаления вручную (до перезагрузки или другого аналогичного события). Дополнительно ============= Аналогичное поведение, если `BOOTPROTO=static` и настроить статический IPv6 в файле `ipv6address`. Если сначала удалить все не link-local IPv6-адреса, то они удаляются успешно. Но после этого удаление link-local адреса приводит к появлению всех новых IPv6-адресов заново. Если удалить только часть, восстанавливаются все после удаления link-local. Если убрать `CONFIG_IPV6=yes` и перезагрузиться, то link-local адрес будет удаляться корректно. Обнаружено при выполнении workaround для https://bugzilla.altlinux.org/51620. Воспроизводимость ================= Воспроизводится на виртуальных машинах: [sisyphus] например ALT Workstation K 11.0 x86_64 etcnet-0.9.35-alt1.noarch iproute2-6.13.0-alt1.x86_64 NetworkManager-1.53.92-alt1.x86_64 kernel-image-6.12-6.12.41-alt1.x86_64 [p11] например ALT Workstation K 11.0 x86_64 etcnet-0.9.35-alt1.noarch iproute2-6.12.0-alt1.x86_64 NetworkManager-1.52.1-alt1.x86_64 kernel-image-6.12-6.12.41-alt1.x86_64
Помогает ли следующая команда предотвратить перегенерацию адресов? # ip l set ens19 addrgenmode none Если да, то etcnet, в теории, мог бы настраивать этот параметр и реализовывать собственную политику генерации адресов. Но это более обширное предложение. В частности: — далеко не факт, что надо поддерживать конфигурацию, где LL-адрес отсутствует на не-p2p интерфейсе; — у него importance будет не normal, а enhancement; — позволю себе сомневаться, что такое предложение будет принято при исходном позиционировании etcnet — "хитрые алгоритмы почти все в ядре, не мешайте ему".
(In reply to Artem Varaksa from comment #0) > (Иногда сначала `scope link tentative noprefixroute` у link-local адреса, > затем `tentative` исчезает.) Это абсолютно нормальное поведение, для свеженазначенного адреса происходит процедура duplicate address detection.
Спасибо. Нет, команда `# ip l set ens19 addrgenmode none` не помогает. Адреса так же продолжают перегенерироваться после удаления link-local.
etcnet сам не работает как сервис, отдавая настройку на сторону ядра. Link-local адреса (fe80::/64) автоматически назначаются ядром IPv6 на каждый активный интерфейс и являются обязательными по стандарту (RFC 4291, RFC 4862). Удалить их «навсегда» командой ip -6 addr del невозможно — стек IPv6 создаёт их заново. Если требуется полностью убрать link-local на конкретном интерфейсе, нужно отключить IPv6 именно для него через sysctl -w net.ipv6.conf.ens19.disable_ipv6=1
Удаление link-local адреса, похоже, приводит к переинициализации сетевой подсистемы ipv6 на интерйфейсе и поэтому появляются и остальные удалённые адреса.
Понятно, но почему тогда поведение воспроизводится только после включения CONFIG_IPV6=yes в etcnet? Если это ожидаемое поведение на уровне ядра, то оно должно быть таким всегда, вне зависимости от настроек etcnet. В данном случае получается, что etcnet всё же меняет какие-то настройки, которые приводят к такой перегенерации. Возможно, это ожидаемо из-за переключения с фактического Только RA (также см. https://bugzilla.altlinux.org/55605) на DHCP/static, т. е. в режиме Только RA допустимо удаление адреса?
Всё что делает etcnet для поднятия ipv6 адресов, если не настроен dhcp6: $IP -6 address flush dev $NAME scope host >/dev/null 2>&1 $IP -6 address flush dev $NAME scope site >/dev/null 2>&1 $IP -6 address flush dev $NAME scope global >/dev/null 2>&1 link-local адреса он не трогает, но возможно эти команды заставляют ядро показать и link-local адреса