Как отключить и снова включить IPv6 в Linux
Важная заметка: изменения на уровне загрузчика и initramfs требуют перезагрузки. Перед внесением изменений создайте резервные копии конфигураций и initramfs.
Почему люди отключают IPv6
IPv6 — это современная версия IP, дающая больше адресов и улучшенную маршрутизацию. Тем не менее, в некоторых сетях (особенно старых корпоративных или тестовых) поддержка IPv6 отсутствует или вызывает конфликт с существующими правилами безопасности и мониторинга. Отключение IPv6 полезно, когда нужно гарантировать использование только IPv4 для отладки, совместимости приложений или упрощения сетевой политики.
Краткое определение: IPv6 — сетевой протокол следующего поколения, заменяет IPv4; имеет 128‑битные адреса и улучшенную автоконфигурацию.
Проверка текущего состояния IPv6
Быстрые команды для проверки того, активен ли IPv6 на машине:
# Показать адреса IPv6 на интерфейсах
ip -6 addr
# Проверить, существует ли файл интерфейса IPv6 в proc (существование файла обычно означает, что ядро поддерживает IPv6)
ls /proc/net/if_inet6
# Проверить текущие значения sysctl, связанные с отключением IPv6
sysctl net.ipv6.conf.all.disable_ipv6
sysctl net.ipv6.conf.default.disable_ipv6
# Посмотреть параметры командной строки ядра (например, ipv6.disable=1)
cat /proc/cmdlineЕсли ip -6 addr выводит адреса (например, fe80::…), стек IPv6 работает. Если файл /proc/net/if_inet6 отсутствует или пуст, стек отключён на уровне ядра.
Основные подходы
- Отключить IPv6 глобально на уровне ядра (через параметр загрузчика GRUB). Требует пересборки конфигурации GRUB и перезагрузки.
- Отключить IPv6 локально в userland (sysctl / /etc/sysctl.d + NetworkManager). Подходит, если нужно выключать только на отдельных интерфейсах.
- Восстановление: обратные шаги для возврата состояния.
Отключение IPv6 через GRUB (глобально)
- Откройте конфигурацию GRUB:
sudo nano /etc/default/grub- Найдите строку, содержащую GRUB_CMDLINE_LINUX_DEFAULT, и добавьте в конец параметр:
ipv6.disable=1Пример:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1"
- Сохраните файл и обновите конфигурацию GRUB:
sudo grub-mkconfig -o /boot/grub/grub.cfg- Пересоздайте initramfs (рекомендуется сделать резервную копию оригинального образа):
sudo cp /boot/initramfs-$(uname -r).img /initramfs-backup.img
sudo dracut -fПерезагрузите систему.
Проверьте состояние:
ls /proc/net/if_inet6 || echo "/proc/net/if_inet6 not present"
ip -6 addr
cat /proc/cmdlineЕсли все прошло успешно, IPv6 отключён на уровне ядра.
Отключение IPv6 через sysctl и NetworkManager (локально, без изменения загрузчика)
Этот способ полезен, если вы хотите отключить IPv6 только на одном интерфейсе или избегаете изменения GRUB.
Шаги общие (ниже приведены отличия для Red Hat и Debian):
- Найдите имя интерфейса:
ip -6 addr- Создайте файл конфигурации sysctl в /etc/sysctl.d, например 40-ipv6.conf:
sudo nano /etc/sysctl.d/40-ipv6.confВставьте:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.YOUR_INTERFACE_NAME.disable_ipv6 = 1Замените YOUR_INTERFACE_NAME на имя (например, enp1s0 или eth0).
- Примените настройки и перезапустите службу:
sudo sysctl -p /etc/sysctl.d/40-ipv6.conf
sudo systemctl restart systemd-sysctl.service- Для NetworkManager сделайте изменение, чтобы Systemd/NetworkManager не переопределяли настройки:
sudo nmcli connection modify YOUR-CONNECTION-NAME ipv6.method disabled
sudo nmcli connection up YOUR-CONNECTION-NAME- Проверьте:
ip -6 addr
sysctl net.ipv6.conf.YOUR_INTERFACE_NAME.disable_ipv6
Дополнительно для Red Hat‑производных
- После изменения sysctl и nmcli, если вы используете dracut и в initramfs присутствует поддержка модуля IPv6 на раннем этапе, пересоздайте initramfs, как показано выше, чтобы исключить загрузку модулей IPv6 во время initramfs.
- В RHEL/CentOS/Fedora иногда требуется явно отключить модуль ipv6 в конфигурации модуля ядра; обычно параметр ipv6.disable=1 в командной строке ядра достаточно.
Дополнительно для Debian‑производных
- Debian/Ubuntu тоже поддерживают /etc/sysctl.d/*.conf. Если вы используете ifupdown вместо NetworkManager, измените /etc/network/interfaces, добавив:
iface eth0 inet6 manual
post-up sysctl -w net.ipv6.conf.eth0.disable_ipv6=1- Если используется systemd-networkd, настройка делается в .network файлах (IPv6AcceptRA=no или подобное).

Как восстановить (включить) IPv6
Если вы отключали через GRUB — удалите параметр ipv6.disable=1 из /etc/default/grub, обновите конфигурацию и перезагрузите:
sudo nano /etc/default/grub
# удалить ipv6.disable=1
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo dracut -f # если вы меняли initramfs ранее
sudo rebootЕсли вы использовали sysctl и NetworkManager:
# Для sysctl
sudo rm /etc/sysctl.d/40-ipv6.conf # или измените значения на 0
sudo sysctl -p
sudo systemctl restart systemd-sysctl.service
# Для NetworkManager
sudo nmcli connection modify YOUR-CONNECTION-NAME ipv6.method auto
sudo nmcli connection up YOUR-CONNECTION-NAME
# Проверить
ip -6 addrСпецифика для Red Hat и Debian при включении
- В Red Hat: восстановите initramfs из бэкапа, если вы снимали его:
sudo cp /initramfs-backup.img /boot/initramfs-$(uname -r).img
sudo dracut -f- В Debian: восстановите sysctl значения net.ipv6.conf.*.disable_ipv6 в 0, затем перезагрузите службы.

Чего стоит остерегаться (типичные ошибки и ловушки)
- Пропущенный пробел в командах: команды вида
ip-6илиsudonano— это опечатки в исходных примерах. Используйтеip -6иsudo nano. - Если вы используете cloud‑образы или провайдера с преднастроенной сетью, NetworkManager/Cloud‑init могут вернуть старые параметры после перезагрузки. Проверьте cloud‑init и конфигурации провайдера.
- Полное отключение на уровне ядра повлияет на приложения, которые рассчитывают на доступность IPv6 (локальная связь, некоторые контейнерные сети, автоконфигурация).
- Некоторые VPN‑клиенты и контейнерные решения (Docker/Podman/CNI) могут ожидать наличия IPv6‑ядра; тестируйте в безопасной среде.
Отладка (troubleshooting)
- Проверка загрузочной строки ядра:
cat /proc/cmdline | grep ipv6- Проверка наличия /proc/net/if_inet6:
ls -l /proc/net/if_inet6- Проверка конкретных sysctl‑параметров:
sysctl -a | grep disable_ipv6- Журналы systemd для служб, связанных с sysctl и NetworkManager:
journalctl -u systemd-sysctl.service -b
journalctl -u NetworkManager -b- Проверка модулей ядра (на предмет загруженных модулей ipv6):
lsmod | grep ipv6- Если изменения не применяются — проверьте, не переопределяют ли их конфигурации в /etc/network, systemd-networkd, cloud-init или NM dispatcher скрипты.
Чек‑лист перед изменением
- Сделать резервную копию /etc/default/grub
- Сделать резервную копию /etc/sysctl.d/*.conf
- Сделать копию initramfs: cp /boot/initramfs-$(uname -r).img /initramfs-backup.img
- Записать текущее состояние: ip -6 addr, ls /proc/net/if_inet6, cat /proc/cmdline
- Подготовить план отката (команды восстановления)
Чек‑лист для ролей
- Системный администратор: тестировать изменения на тестовой виртуальной машине, документировать изменения, оповестить команды мониторинга.
- Desktop‑пользователь: сделать бэкап /etc/hosts и настроек NM, не изменять GRUB без контроля админа.
- DevOps/CI: проверить пайплайны, зависящие от IPv6 (интеграционные тесты, сборщики), убедиться, что контейнеры не полагаются на IPv6.
Когда НЕ стоит отключать IPv6 (контрпримеры)
- Если сеть активно использует IPv6 (публичные сервисы или peer‑to‑peer) — отключение сломает доступ.
- Если вы планируете миграцию на IPv6 или ожидаете роста адресного пространства — лучше решить проблемы совместимости иначе.
- Когда используется SLAAC или DHCPv6 для критичных сетевых настроек.
Безопасность и приватность
- Отключение IPv6 может уменьшить атакующую поверхность в сетях, где IPv6 не контролируется, но одновременно убирает возможности отдельных механизмов безопасности, завязанных на IPv6 (например, некоторые политики сетевого контроля на основе адресов).
- Если вы управляете персональными данными пользователей, убедитесь, что изменения в сетевых логах и адресации не нарушают требования локального регулирования по хранению/обработке данных.
Быстрый эталон команд (cheat‑sheet)
# Проверка
ip -6 addr
ls /proc/net/if_inet6
sysctl net.ipv6.conf.all.disable_ipv6
cat /proc/cmdline
# Отключить глобально через GRUB
sudo nano /etc/default/grub
# добавить ipv6.disable=1
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo dracut -f
sudo reboot
# Отключить локально через sysctl + NM
sudo nano /etc/sysctl.d/40-ipv6.conf
# добавить net.ipv6.*disable_ipv6 = 1
sudo sysctl -p /etc/sysctl.d/40-ipv6.conf
sudo systemctl restart systemd-sysctl.service
sudo nmcli connection modify YOUR-CONNECTION-NAME ipv6.method disabled
sudo nmcli connection up YOUR-CONNECTION-NAME
# Включить обратно
# удалить/изменить параметры sysctl или удалить ipv6.disable=1 из GRUBКритерии приёмки
- После отключения: ip -6 addr не показывает глобальных/локальных IPv6‑адресов; /proc/net/if_inet6 отсутствует.
- После включения: ip -6 addr показывает ожидаемые IPv6‑адреса; приложения, зависящие от IPv6, работают корректно.
1‑строчный глоссарий
- IPv6: протокол Интернет‑уровня с 128‑битными адресами.
- GRUB: загрузчик GNU GRUB, задающий параметры ядра.
- sysctl: инструмент управления параметрами ядра в рантайме.
- NM / NetworkManager: менеджер сетевых подключений в популярных дистрибутивах.
Короткое резюме
Отключение IPv6 в Linux можно выполнить глобально через параметр ядра ipv6.disable=1 или локально через sysctl и NetworkManager. Всегда делайте резервные копии конфигураций и проверяйте влияние на приложения и контейнерные окружения.
Image credit: Leon Seibert via Unsplash and Wikimedia Commons. All alterations and screenshots by Ramces Red.



