Як відключити автоматичну конфігурацію на IPv6 в Linux?


23

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

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

Він з’явиться знову через кілька секунд, я хочу, щоб він назавжди зник, але не відключаючи IPv6 всіх разом.

Відповіді:


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ваш інтерфейс


3
Також автоматична конфігурація адреси та виявлення маршрутизатора будуть відключені, якщо сам хост є маршрутизатором, тобто net.ipv6.conf.all.forwarding=1встановлений.
Гарт

4

net.ipv6.conf.all.accept_ra = 0 вище не слід робити, оскільки РА необхідні для вказівки приставки та відключення для префікса (відповідно до RFC5942), а також для автоматизованої конфігурації ряду інших такі параметри, як MTU, таймаут сусідського виявлення тощо

Якщо ви хочете відключити автоматичну конфігурацію, відключіть функцію autoconf sysctl, як описано вище, або вимкніть A (біт автоконфігурації) у розділі Інформація про префікс (PIO) в РА.


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


це щойно змусило мене день чухати голову над цим протягом декількох місяців: D
anthonysomerset

2
Я зазвичай просто дряпаю Google, поки не знайду його.
Jeroen Vermeulen - MageHost

1
Це спрацювало, коли я спробував це, але проблема вимикання приймання-ра є досить небезпечною, як згадував Марк S - це, здається, працює, але пізніше ви можете виявити, що вам не вистачає пакетів, оскільки вони потрапили в точку фрагментації або маршрутизатор відмови використовується. Також він розбиває пінгси. Причиною, що я намагався це зробити, було надійно відповідати моєму запису SPF у вихідній пошті, але тоді я зрозумів, що я повинен використовувати замість цього мережеву маску, тому що в IPv6 діапазон адрес ефективно належить до машини, а не однієї адреси .
Phil McKerracher

2

Проблема Ubuntu 18 та ipv6 полягає в тому, що системна мережа керує параметрами ядра, тому, хоча хтось може відключити ipv6 за допомогою sysctl, networkd буде більш ніж щасливим включити їх для вас, якщо в конфігурації не вказано інше.

Моє рішення відключити ipv6 - налаштувати локальну посилання в netplan на порожній скаляр (за умови, що у вас немає IP-ipv4-локальних IP-адрес)

network:
     version: 2
     renderer: networkd
     ethernets:
     eth0:
        ..
        link-local: [ ]

Конфігурація буде компілювати конфігурацію для networkd, яка буде розміщена в /run/systemd/network/10-netplan-eth0.network, і це переконає networkd не встановлювати ipv6 для eth0

Якщо ви, можливо, захочете відключити ipv6 також на зворотному зворотному звороті, це легко досягти, встановивши параметр ядра net.ipv6.conf.all.disable_ipv6 на 1. networkd, схоже, не керує петлею.

sysctl -w net.ipv6.conf.all.disable_ipv6=1

Мені дуже подобається ваше дуже чисте рішення. Оскільки ми не використовуємо локальні адреси посилань, додаючи порожній скаляр ідеальним рішенням. Після цього нам довелося перезавантажити сервер, оскільки netplan застосовував збережені вже призначені адреси IPv6 в обох наших інтерфейсах Ethernet. Але після перезавантаження все працює так, як ви сказали. Я не думаю, що є причина заважати відключати IPv6 на інтерфейсі петлі, тому я просто пропустив частину sysctl. Спасибі!
Золтан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.