Как отключить автоконфигурацию на IPv6 в Linux?
Как я могу навсегда отключить автоконфигурацию IPv6 в Linux? Когда я пытаюсь вручную удалить адрес из интерфейса с помощью:
ip -6 addr del 2001:0db8:85a3:0000:0000:8a2e:0370:7334/64 dev eth1
Он появится снова через несколько секунд, я хочу, чтобы он пропал навсегда, но без отключения всего IPv6.
7 ответов
Автоматическая настройка может быть временно отключена для eth1 с помощью:
sudo sysctl -w net.ipv6.conf.eth1.autoconf=0sudo sysctl -w net.ipv6.conf.eth1.accept_ra=0
или для всех интерфейсов с:
sudo sysctl -w net.ipv6.conf.all.autoconf=0sudo sysctl -w net.ipv6.conf.all.accept_ra=0
Повторное включение работает с использованием 1 вместо 0 в вызове.
Отключить его навсегда можно с помощью записи в /etc/sysctl.conf, На Debian Etch (возможно, на более новых тоже), без установки accept_raсистема будет автоматически настроена с использованием локального адреса Link (fe80..)
Как Gart упомянул ниже, автоматическая конфигурация адреса и обнаружение маршрутизатора будут отключены, если сам хост является маршрутизатором и accept_ra не является 2т.е.
net.ipv6.conf.<iface|all|default>.forwarding=1
а также
net.ipv6.conf.<iface|all|default>.accept_ra=0или же net.ipv6.conf.<iface|all|default>.accept_ra=1,
где iface это ваш интерфейс
sysctl Решение не работает у нас на Ubuntu 18.04 Bionic. Мы решили это путем:
редактирование /etc/netplan/01-netcfg.yaml, настроить:
network:
...
ethernets:
eth0:
...
dhcp6: no
accept-ra: no
Возможно, вам придется использовать имя вашего интерфейса вместо eth0, После сохранения файла выполните:
netplan apply или же reboot
Если вы уже получили IPv6 IP из автоконфигурации и хотите удалить его без перезагрузки, вы можете выполнить:
ip -6 addr del 1111:2222:1:0:aaaa:bbbb:cccc:dddd/64 dev eth0
Конечно, вам нужно заменить IP-адрес и устройство в этой команде.
net.ipv6.conf.all.accept_ra=0 выше не следует делать, так как RA необходимы для индикации соединения и отсутствия соединения для префикса (согласно RFC5942), а также для автоматической настройки ряда других параметры, такие как MTU, время ожидания Neighbor Discovery и т. д.
Если вы хотите отключить автоконфигурацию, либо отключите sysctl autoconf, как указано выше, либо отключите A (бит автоконфигурации) в опции информации о префиксе (PIO) в RA.
sudo sysctl -w net.ipv6.conf.all.autoconf=0
Это не сработало для меня в Debian Wheezy. После изучения /etc/sysctl.conf мне нужно было использовать
sudo sysctl -w net.ipv6.conf.default.autoconf=0
Проблема с Ubuntu 18 и ipv6 заключается в том, что systemd-networkd контролирует параметры ядра, поэтому, хотя вы можете отключить ipv6 с помощью sysctl, networkd будет более чем рад включить их для вас, если в конфигурации не указано иное.
Мое решение отключить ipv6 - настроить локальный канал в netplan на пустой скаляр (при условии, что у вас нет IP-адреса локального канала ipv4)
network:
version: 2
renderer: networkd
ethernets:
eth0:
..
link-local: [ ]
Конфигурация скомпилирует конфигурацию для networkd, которая будет опубликована в /run/systemd/network/10-netplan-eth0.network и убедит networkd не устанавливать ipv6 для eth0
Если вы можете захотеть отключить ipv6 и в loopback, это легко сделать, установив для параметра ядра net.ipv6.conf.all.disable_ipv6 значение 1. Кажется, что networkd не управляет loopback.
sysctl -w net.ipv6.conf.all.disable_ipv6=1
Я только что столкнулся с странной проблемой. Обычно я отключаю autoconf, устанавливаяautoconf=0для всех соответствующих интерфейсов в sysctl.conf, например:
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.bond0.autoconf = 0
net.ipv6.conf.bond1.autoconf = 0
Обычно этого достаточно. Однако я только что столкнулся с некоторыми серверами (Rocky 8.6 и 8.7), на которых это не работает стабильно.bond0при загрузке получал адрес SLAAC, но со временем его срок устаревал и истекал. Но при перезагрузке все вернется.bond1, как ни странно, не было бы такой проблемы. После некоторой борьбы с этим, похоже, это решило добавление этого в sysctl:
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.all.accept_ra_pinfo = 0
net.ipv6.conf.bond0.accept_ra_pinfo = 0
net.ipv6.conf.bond1.accept_ra_pinfo = 0
Это говорит ему игнорировать информацию префикса, отправленную в RADV.
Мне кажется, это что-то вроде ошибки ядра. Отключения параметров autoconf в sysctl на самом деле должно быть достаточно, чтобы фактически отключить autoconf (иначе, WTF является целью этого параметра?). Кроме того, отключение «других вещей» только для того, чтобы все работало как положено, кажется неправильным. Во всяком случае, у меня это сработало и кажется более безопасным вариантом, чем отключениеaccept_raполностью.
Обратите внимание на теги в адресе
inet6 xxxx:ffc8:1:20:ec4:7aff:fe0f:77e5/64 scope global dynamic mngtmpaddr noprefixroute
mngtmpaddr создается стандартом IPv6 Privacy Extensions (RFC 4941), поэтому необходимо будет отключить autoconf и tempaddr
sysctl -w net.ipv6.conf.all.autoconf=0
sysctl -w net.ipv6.conf.default.autoconf=0
sysctl -w net.ipv6.conf.default.use_tempaddr=0
sysctl -w net.ipv6.conf.all.use_tempaddr=0
sysctl -w net.ipv6.conf.eth0.use_tempaddr=0
также вы должны проверить, является ли текущий флаг ложным с помощью
/proc/sys/net/ipv6/conf/*/use_tempaddr
/proc/sys/net/ipv6/conf/*/autoconfg
чтобы сделать изменения постоянными для перезагрузки, добавьте в /etc/sysctl.conf net.ipv6.conf.all.autoconf=0 net.ipv6.conf.default.autoconf=0 net.ipv6.conf.default.use_tempaddr=0 net.ipv6.conf.all.use_tempaddr=0 net.ipv6.conf.eth0.use_tempaddr=0
также, наконец, если вы используете netplan, кажется, что он может переопределить все это. единственное решение, которое я нашел, - отключить RA, добавив флаг в /etc/netplan/xxx.yaml
accept-ra: false