Разработчик из SUSE предложил убрать из ядра Linux возможность сборки IPv6 в виде модуля

Фернандо Фернандес Мансера направил на рассмотрение серию патчей, отменяющих опцию CONFIG_IPV6=m. Причина — избыточная сложность поддержки и отсутствие востребованности в современных дистрибутивах. IPv6 предлагается либо встраивать в ядро, либо полностью отключать.

Разработчик компании SUSE Фернандо Фернандес Мансера 10 марта 2026 года направил в ветку linux-next серию патчей, направленных на полное удаление возможности компиляции стека IPv6 в форме загружаемого модуля ядра (опция CONFIG_IPV6=m). Это предложение затрагивает будущую версию ядра Linux 7.1 и призвано радикально упростить архитектуру сетевой подсистемы, избавив её от устаревших механизмов динамической выгрузки.
Поддержка IPv6 как модуля была внедрена в ядро Linux в 1996 году с версии 2.1.8, когда стек протокола только интегрировался в проект. Изначально такая гибкость позволяла экономить память на системах без IPv6-трафика, но с ростом универсальности протокола (особенно после 2010-х годов) она утратила практическую ценность.

В современных дистрибутивах — SUSE Linux Enterprise, Red Hat Enterprise Linux, Ubuntu, Fedora и Debian — IPv6 всегда компилируется статически (CONFIG_IPV6=y) или полностью отключается (CONFIG_IPV6=n). Модульная сборка не используется ни в одном production-сценарии из-за фундаментальных проблем: динамическая выгрузка критического сетевого стека приводит к сбоям в зависимых подсистемах, таким как маршрутизация, фильтрация пакетов и мониторинг.

Текущая tristate-опция CONFIG_IPV6 (y/m/n) вынуждает разработчиков подсистем реализовывать "заглушки" (stubs) для обработки выгрузки модуля. Это затрагивает:
  • Сетевую подсистему (net/core, net/ipv6) — обработчики unregister_netdevice_notifier.
  • BPF (Berkeley Packet Filter) — динамическая привязка программ к IPv6-сокетам.
  • Netfilter (iptables/nftables) — цепочки IPv6 с условной инициализацией.
  • Драйверы (vxlan, geneve, сетевые адаптеры) — fallback-функции для отсутствующего стека.
Такие заглушки составляют сотни строк кода, который никогда не выполняется, но усложняет ревью, тестирование и поиск уязвимостей — особенно актуально после недавних CVE в IPv6 (например, race conditions в icmpv6 и fib6).


Структура серии патчей

Предложенная серия состоит из 10 последовательных патчей, преобразующих CONFIG_IPV6 в boolean-опцию (только y/n). Основные изменения:

№ патча

Название

Ключевые изменения

Затронутые файлы

1/10

Kconfig: convert CONFIG_IPV6 to bool

Удаление tristate, замена на depends bool; дефолт = n

net/ipv6/Kconfig

2/10

Replace IS_BUILTIN(CONFIG_IPV6) usages

Глобальная замена макросов на IS_ENABLED(CONFIG_IPV6)

net/, kernel/bpf/

3/10

net: ipv6: remove module_exit and notifier

Удаление unregister_netdevice_notifier для ICMPv6

net/ipv6/icmp.c, net/core/dev.c

4/10

netfilter: remove IPv6 ops stubs

Прямые вызовы вместо nf_ipv6_ops->foo()

net/netfilter/nf_ipv6.c

5/10

bpf: remove ipv6_bpf_stub

Интеграция прямых вызовов ipv6_sock/bpf

kernel/bpf/syscall.c

6/10

drivers: net: remove IPv6 module stubs

Очистка vxlan/geneve от dynaddr

drivers/net/vxlan.c

7/10

Remove ipv6_stub.h

Полное удаление заголовка stubs

include/net/ipv6_stub.h

8/10

ip6: fib: remove module unload handlers

Упрощение nexthop_fib6_nh

net/ipv6/fib6.c

9/10

net: core: IPv6 unregister cleanups

Удаление raw6/icmp6 module_exit

net/ipv6/raw.c

10/10

Documentation: update IPv6 config notes

Описание новой boolean-семантики

Documentation/networking/ipv6.rst

Патчи протестированы на x86_64, arm64 и RISC-V с defconfig, а также в qemu-симуляциях с трафиком IPv6. Общий объём удалённого кода — около 500 строк, преимущественно условных проверок #ifdef CONFIG_IPV6_MODULE.


Текущий статус и реакция сообщества

По состоянию на 15 марта 2026 года патчи приняты в linux-next (хеш: v6.8-rc7-next-20260312), проходит ревью на LKML и Patchew.org. Автор активно отвечает на замечания, включая связанные фиксы (например, race в ip6_sock_set_v6only). Maintainers сетевой подсистемы (David S. Miller, Jakub Kicinski) отметили положительно; нет блокирующих отзывов.

Обсуждение на Phoronix, Reddit (/r/linux, /r/kernel) и Linux.org Forums подчёркивает timely характер изменений: это часть тенденции минимизации модульности в core-компонентах (аналогично TCP-состою, где модульность удалена в 5.15+). SUSE уже применяет патчи в Tumbleweed.


Технические последствия для разработчиков и пользователей

Для пользователей дистрибутивов: Никаких изменений. Стандартные конфигурации (например, в /boot/config-6.8.0) остаются валидными; make menuconfig предложит только [*] или [< ]> для IPv6. Миграция прозрачна.
Для разработчиков ядра:
  • Ускорение компиляции (меньше условного кода).
  • Проще аудит безопасности: нет «мёртвого» пути unload.
  • Новые драйверы/BPF-программы не нуждаются в stubs для IPv6.
Рекомендации по тестированию:
  1. Склонировать linux-next: git checkout linux-next/master.
  2. make defconfig; make menuconfig — установить IPv6=y/n.
  3. Сборка: make -j$(nproc) bzImage.
  4. Тест: qemu-system-x86_64 -kernel bzImage -netdev user,id=net0,ipv6=on -device e1000,netdev=net0.
Это изменение укрепляет стабильность ядра, соответствуя принципам "built-in or nothing" для критической инфраструктуры. Ожидаемое включение в Linux 7.1-rc1 к июлю 2026 года.
© 16.03.2026
Контакты:
info@smartinfra.ru
105118, г. Москва,
ул. Буракова, 27 к3,
3 этаж, офис 322

© 2026