Jak wyłączyć automatyczną konfigurację na IPv6 w systemie Linux?

23

Jak mogę na stałe wyłączyć autokonfigurację IPv6 w systemie Linux? Kiedy próbuję ręcznie usunąć adres z interfejsu za pomocą:

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

Ponownie pojawi się kilka sekund później, chcę, aby zniknął na stałe, ale bez całkowitego wyłączenia IPv6.

Grumbel
źródło

Odpowiedzi:

22

Automatyczną konfigurację można tymczasowo wyłączyć dla eth1 za pomocą:

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

lub dla wszystkich interfejsów z:

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

Ponowne włączenie działa przy użyciu 1 zamiast 0 w połączeniu.

Wyłączenie na stałe można wykonać, wprowadzając wpis /etc/sysctl.conf. W Debian Etch (prawdopodobnie także w nowszych wersjach), bez ustawienia accept_ra, system przeprowadzi automatyczną konfigurację za pomocą lokalnego adresu Link ( fe80..)

Gart jak wspomniano poniżej, automatyczna konfiguracja routera adres i odkrycie będzie wyłączona, jeśli sam gospodarz jest routerem i accept_ranie jest 2, to znaczy

net.ipv6.conf.<iface|all|default>.forwarding=1

i

net.ipv6.conf.<iface|all|default>.accept_ra=0 lub net.ipv6.conf.<iface|all|default>.accept_ra=1.

gdzie ifacejest twój interfejs

Grumbel
źródło
3
Również automatyczna konfiguracja adresu i wykrywanie routera zostaną wyłączone, jeśli sam host jest routerem, tzn. net.ipv6.conf.all.forwarding=1Jest ustawiony.
Gart
4

net.ipv6.conf.all.accept_ra = 0 powyżej nie powinno być wykonywane, ponieważ RA są niezbędne do wskazania połączenia on-link i off-link dla prefiksu (zgodnie z RFC5942), a także automatycznej konfiguracji szeregu innych parametry, takie jak MTU, limity czasu wykrywania sąsiadów itp.

Jeśli chcesz wyłączyć autokonfigurację, wyłącz autoconf sysctl jak wyżej lub wyłącz A (bit autokonfiguracji) w opcji informacji o prefiksie (PIO) w RA.

Znaki
źródło
3
sudo sysctl -w net.ipv6.conf.all.autoconf=0

Nie działało to dla mnie w Debian Wheezy. Po sprawdzeniu /etc/sysctl.conf musiałem użyć

sudo sysctl -w net.ipv6.conf.default.autoconf=0
Nick B.
źródło
3

sysctlRozwiązanie nie działa dla nas na Ubuntu 18.04 Bionic. Rozwiązaliśmy to przez:

Edycja /etc/netplan/01-netcfg.yaml, konfiguracja:

network:
  ...
  ethernets:
    eth0:
      ...
      dhcp6: no
      accept-ra: no

Może być konieczne użycie nazwy interfejsu zamiast eth0. Po zapisaniu pliku uruchom:

netplan apply lub reboot

Jeśli otrzymałeś już adres IP IPv6 z automatycznej konfiguracji i chcesz go usunąć bez ponownego uruchamiania, możesz wykonać:

ip -6 addr del 1111:2222:1:0:aaaa:bbbb:cccc:dddd/64 dev eth0 

Oczywiście w tym poleceniu musisz wymienić adres IP i urządzenie.

Jeroen Vermeulen - MageHost
źródło
to właśnie sprawiło, że mój dzień drapał mnie po głowie przez kilka miesięcy: D
anthonysomerset
2
Zwykle drapię Google, dopóki go nie znajdę.
Jeroen Vermeulen - MageHost
1
To zadziałało, kiedy próbowałem, ale problem z wyłączaniem akceptora jest dość niebezpieczny, jak wspomniał Mark S - wydaje się działać, ale później może się okazać, że brakuje pakietów, ponieważ trafiają w punkt fragmentacji lub router przełączania awaryjnego Jest używane. Łamie też pingi. Powodem, dla którego próbowałem to zrobić, było niezawodne dopasowanie mojego rekordu SPF do poczty wychodzącej, ale potem zdałem sobie sprawę, że powinienem był użyć maski sieci w tym rekordzie, ponieważ w IPv6 zakres adresów faktycznie należy do maszyny, a nie do jednego adresu .
Phil McKerracher
2

Problem z Ubuntu 18 i ipv6 polega na tym, że systemd-networkd kontroluje parametry jądra, więc chociaż można wyłączyć ipv6 za pomocą sysctl, networkd będzie więcej niż szczęśliwy, włączając je dla ciebie, jeśli konfiguracja nie stanowi inaczej.

Moim rozwiązaniem do wyłączenia ipv6 jest skonfigurowanie link-local w netplan na pusty skalar (pod warunkiem, że nie masz adresów IP ipv4 dla lokalnego łącza)

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

Konfiguracja skompiluje konfigurację dla networkd, która zostanie opublikowana w /run/systemd/network/10-netplan-eth0.network i która przekona networkd, aby nie instalował ipv6 dla eth0

Jeśli chcesz wyłączyć ipv6 również w pętli zwrotnej, można to łatwo osiągnąć, ustawiając parametr jądra net.ipv6.conf.all.disable_ipv6 na 1. Networkd nie wydaje się kontrolować pętli zwrotnej.

sysctl -w net.ipv6.conf.all.disable_ipv6=1
Daniel
źródło
Naprawdę podoba mi się twoje bardzo czyste rozwiązanie. Ponieważ nie używamy adresów lokalnych dla łącza, dodanie pustego skalara jest idealnym rozwiązaniem. Następnie musieliśmy zrestartować serwer, ponieważ program netplan zastosował już przypisane adresy IPv6 na obu naszych interfejsach ethernetowych. Ale po ponownym uruchomieniu wszystko działa tak, jak powiedziałeś. Nie sądzę, że jest powód, aby zawracać sobie głowę wyłączaniem IPv6 w interfejsie pętli zwrotnej, więc właśnie pominąłem część sysctl. Dzięki!
Zoltan