UMGUM.COM 

Отключение IPv6 в Linux ( Деактивация поддержки неприменимого в заданной сетевой конфигурации протокола IPv6. )

28 апреля 2014  (обновлено 2 января 2019)

Эта публикация отнесена в архив. Она неактуальна.

OS: "Linux Debian 6/7/8/9", "Linux Ubuntu 14/16/18 LTS", "Linux Fedora 23/24/25".

Задача: отключить на уровне операционной системы поддержку неприменимого в заданной сетевой конфигурации протокола IPv6.

Не будем здесь о светлом будущем, когда IPv6 повсеместно вытеснит IPv4. На практике ни в одной из сетей, где я работал в течении последних десяти лет (с 2008 по 2018 годы), IPv6 не поддерживался даже на уровне коммутирующего оборудования. В то же время настройки "по умолчанию" Linux-сервисов всё более пронизываются трендом перехода на IPv6, до той степени, что приходится дополнительно тратить время, настраивая нюансы их работы ещё и для протокола, который в производственных условиях не может быть использован за рамками "локальной петли".

Из соображений экономии времени и снижения риска путаницы при конфигурирования сети отключаем невостребованный протокол IPv6.


Отключение IPv6 параметром загрузчика "Grub2".

Элементарно дополняем строку опций загрузки ядра системы параметром выключения IPv6:

# vi /etc/default/grub

....
GRUB_CMDLINE_LINUX="... ipv6.disable=1"
....

Даём команду пересобрать действующую конфигурацию загрузчика, в "Debian/Ubuntu":

# update-grub

В "Fedora/CentOS/RHEL" команда обновления действующей конфигурации иная, но результат идентичный:

# grub2-mkconfig -o /boot/grub2/grub.cfg

Таким образом я отключал IPv6 на серверах примерно до 2016-го.

Отключение IPv6 посредством "sysctl".

С 2017-го я предпочитаю деактивировать IPv6 следующим способом, без вмешательства в конфигурацию загрузчика операционной системы - безопаснее.

Создаём файл с параметрами конфигурации для ядра системы и перечисляем там флаги выключения IPм6 для всех действующих интерфейсов, всех будущих и, для подстраховки, явно для интерфейса "локальной петли":

# vi /etc/sysctl.d/70-disable-ipv6.conf

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Применяем заготовленный набор параметров:

# sysctl -p -f /etc/sysctl.d/70-disable-ipv6.conf

В "Linux Ubuntu v18" обнаружился забавный "баг", выражающийся в несвоевременной загрузке параметров "sysctl", отчего вышеприведённая конфигурация перекрывается другими подсистемами. Проще всего это обходится дополнительно принудительной установкой необходимых параметров уже после загрузки системного окружения:

# vi /etc/rc.local && chmod ug+x /etc/rc.local

#!/bin/bash
# /etc/rc.local

# The way to bypass the early loading "procps+sysctl" (bug:#50093)
/sbin/sysctl -p -f /etc/sysctl.d/70-disable-ipv6.conf

exit 0

Дополнительная зачистка упоминаний об IPv6.

Несмотря на то, что модуль поддержки IPv6 может быть и не загрузился после вышеперечисленных манипуляций по его отключению, но в ряде конфигурационных файлов упоминание о протоколе сохранилось - лучше бы их зачистить, чтобы снизить вероятность сбоя восприятия реальности пользовательскими сервисами и приложениями.

В частности, в обязательном порядке деактивируем сопоставления IPv6-адреса и символического имени "локальной петли" в файле локальных сопоставлений IP-адресов и FQDN:

# vi /etc/hosts

....

# Remove IPv6 from list of address mappings (via commenting)
#::1     localhost ip6-localhost ip6-loopback
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters

Проверка успешности выключения IPv6.

В зависимости от выбранного способа, сразу или после перезагрузки операционной системы, можно будет удостовериться в том, что протокол IPv6 действительно выключен следующими командами.

Вывод сведений о текущей конфигурации имеющихся сетевых интерфейсов:

# ip address

Вывод сведений о сетевых интерфейсах и портах, прослушиваемых сервисами и пользовательскими приложениями:

# netstat -apn | grep -i tcp | grep -i listen


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )