Как отключить автоконфигурацию на IPv6 в Linux?

23

Как я могу навсегда отключить автоконфигурацию IPv6 в Linux? Когда я пытаюсь вручную удалить адрес из интерфейса с помощью:

ip -6 addr del 2001:0db8:85a3:0000:0000:8a2e:0370:7334/64 dev eth1

Он появится снова через несколько секунд, я хочу, чтобы он пропал навсегда, но без отключения всего IPv6.

Grumbel
источник

Ответы:

22

Автоматическая настройка может быть временно отключена для eth1 с помощью:

sudo sysctl -w net.ipv6.conf.eth1.autoconf=0
sudo sysctl -w net.ipv6.conf.eth1.accept_ra=0

или для всех интерфейсов с:

sudo sysctl -w net.ipv6.conf.all.autoconf=0
sudo 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твой интерфейс

Grumbel
источник
3
Кроме того, автоматическое конфигурирование адреса и обнаружение маршрутизатора будут отключены, если сам хост является маршрутизатором, т.е. net.ipv6.conf.all.forwarding=1установлен.
Gart
4

net.ipv6.conf.all.accept_ra = 0 выше не следует делать, так как RA необходимы для индикации соединения и отсутствия соединения для префикса (согласно RFC5942), а также для автоматической настройки ряда других параметры, такие как MTU, время ожидания Neighbor Discovery и т. д.

Если вы хотите отключить автоконфигурацию, либо отключите sysctl autoconf, как указано выше, либо отключите A (бит автоконфигурации) в опции информации о префиксе (PIO) в RA.

Метки
источник
3
sudo sysctl -w net.ipv6.conf.all.autoconf=0

Это не сработало для меня в Debian Wheezy. После изучения /etc/sysctl.conf мне нужно было использовать

sudo sysctl -w net.ipv6.conf.default.autoconf=0
Ник Б.
источник
3

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-адрес и устройство в этой команде.

Йерун Вермейлен - MageHost
источник
это только заставило мой день чесать мою голову об этом в течение нескольких месяцев: D
anthonysomerset
2
Я обычно просто чешу Google, пока не найду его.
Йерун Вермейлен - MageHost
1
Это сработало, когда я попробовал, но проблема в том, что отключение accept-ra довольно опасно, как уже было отмечено Марком S - похоже, это работает, но позже вы можете обнаружить, что пропускаете пакеты, потому что они достигли точки фрагментации или аварийного маршрутизатора. используется. Также это нарушает пинг. Причина, по которой я пытался это сделать, состояла в том, чтобы надежно сопоставить мою запись SPF в исходящей почте, но затем я понял, что вместо этого я должен был использовать маску сети в записи, потому что в IPv6 диапазон адресов фактически принадлежит машине, а не одному адресу. ,
Фил Маккерчер
2

Проблема с 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
Даниил
источник
Мне очень нравится ваше очень чистое решение. Поскольку мы не используем адреса локальной ссылки, добавление пустого скаляра является идеальным решением. После этого нам пришлось перезагрузить сервер, так как netplan apply сохранил уже назначенные адреса IPv6 на обоих наших интерфейсах Ethernet. Но после перезагрузки все работает так, как вы сказали. Я не думаю, что есть причина беспокоиться о отключении IPv6 на интерфейсе обратной связи, поэтому я просто пропустил часть sysctl. Благодарность!
Золтан