Jak trwale wyłączyć IPv6?

54

Jak możemy wyłączyć cały system IPv6 za pomocą poleceń terminalu?

Przeczytałem edycję /etc/modprobe.d/aliases i zastępowanie:

alias net-pf-10 ipv6

z:

alias net-pf-10 off
alias ipv6 off

Czy można to bezpiecznie zastosować i czy na stałe wyłącza ipv6 podczas ponownego uruchamiania?

Tinfoilhats
źródło
5
Dlaczego chcesz trwale wyłączyć IPv6?
Anderson Green,
2
Nie ma absolutnie (cóż, właściwie mogę go znaleźć w MS Windows) nie ma powodu, aby wyłączać IPv6. Dlaczego chcesz to zrobić?
Anders
17
Nie ma absolutnie żadnego powodu, aby włączyć ipv6. Wszystko jest nadal w wersji ipv4 i nie oferuje żadnych korzyści komuś, kto zarządza małą siecią i ma ograniczony czas. To jeszcze jeden wektor ataku i potencjalnej błędnej konfiguracji, dlatego rozsądnie jest go wyłączyć. Prawdopodobnie nie to, co chce usłyszeć każdy inżynier IETF, ale to ich problem, nie mój. Umożliwię to, gdy będę miał dobry powód, do tego czasu po prostu kolejny wektor ataku, którym muszę zarządzać.
Jonathan S. Fisher
8
Wyłączenie IPv6 nie powoduje odporności na ataki IPv6. O wiele lepiej jest włączyć tę funkcję, poradzić sobie z nią i uczyć się na niej, to jedyny sposób, aby Twoje środowisko było nieco bezpieczniejsze. Zamiast tego wszystkim lepiej jest nauczyć się „Jak trwale wyłączyć IPv4”. IPv6 jest o wiele łatwiejszy niż IPv4, na początek nie ma już NAT, więc jedna rzecz mniej do zarządzania ... Internet rozwija się naprawdę szybko, za kilka lat sieć IPv6 będzie większa niż IPv4, więc, dzięki IPv4 nie będziesz mieć dostępu do Internetu. Śmiało, człowieku! Zaktualizuj swoje IP !! Zmiana to dobra rzecz.
ThiagoCMC
7
@ JonathanS.Fisher i inni - Te komentarze nie są pomocne. To, że nie znasz przyczyny wyłączenia protokołu IPv6, nie oznacza, że ​​nie istnieje. Jednym z głównych przypadków są usługi VPN, które nie obsługują IPv6. Jeśli go nie wyłączysz, wycieknie twój adres IPv6.
Scone

Odpowiedzi:

74

Pomyślnie wyłączyłem IPv6 po wprowadzeniu następujących wierszy /etc/sysctl.conf:

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

uruchom także to polecenie, aby załadować zmiany

sudo sysctl -p
Eric Carvalho
źródło
Uubuntu na VMware nie może być pingowany, a ja zamykam ipv6 na Ubuntu, teraz jest w porządku.
Honghe.Wu
12
Po dodaniu wierszy do pliku sysctl.conf uruchom sudo sysctl -plub uruchom ponownie, aby zmiany odniosły skutek.
Rajat Gupta
4
Muszę to zrobić tylko w sieci bezprzewodowej, aby obejść błąd, aby móc ponownie się połączyć. Oto jak to zrobić tylko dla jednego adaptera:net.ipv6.conf.wlan0.disable_ipv6 = 1
cmc
1
To nie działa na Ubuntu 17.10. Zobacz komentarz NullNoname poniżej, aby uzyskać poprawkę grub.
Łukasz
1
Nie działa również na Ubuntu 16.04. Metoda Grub działa.
Penghe Geng
53

Jeśli twój komputer nie ładuje /etc/sysctl.conf podczas uruchamiania (co jest w moim przypadku), konieczne jest wyłączenie IPv6 z Grub. Jądro Linux ma opcję rozruchu o nazwie „ipv6.disable = 1”, która wyłącza IPv6 podczas uruchamiania.

Aby edytować opcje uruchamiania, edytuj „/ etc / default / grub” w dowolnym edytorze tekstu jako użytkownik root:

sudo nano /etc/default/grub

Znajdź wiersz zawierający „GRUB_CMDLINE_LINUX_DEFAULT”:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Dodaj „ipv6.disable = 1” do opcji rozruchu, a następnie zapisz plik grub:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 quiet splash"

Na koniec zaktualizuj grub:

sudo update-grub
NullNoname
źródło
6
+1 to działa i całkowicie wyłącza IPv6, więc nie pozostały żadne ślady, /proc/sys/net/ipv6/które mogłyby powodować problemy, np. X11 forwarding request failedPonieważ sshdpróbuje się połączyć z nieskonfigurowanym interfejsem IPv6. Zauważ, że podobnie możesz pozbyć się IPv4 w ten sposób na maszynach wirtualnych z czystym IPv6. Dzięki.
Tino
7

sudo sysctl -PNajbardziej pomogła mi odpowiedź Carvalho, w tym komentarz dotyczący konieczności biegania .

Jednak w moim przypadku przynajmniej:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.<mydevice>.disable_ipv6 = 1

i wydaje się, że druga linia była konieczna.

Być może ma to związek z faktem, że używam TP-Link Archer T2U, dla którego musiałem niestandardowo zbudować sterownik ze źródła.
Zakładam, że w rezultacie <mydevice>nie liczy się jako „ all”.
Krótko mówiąc, jeśli niestandardowo dodano (niestandardowy) sterownik sieciowy, net.ipv6.conf.all.disable_ipv6 = 1może nie wystarczyć do wyłączenia sieci IPv6.

Muszę jednak przyznać, że nie próbowałem linii
net.ipv6.conf.default.disable_ipv6 = 1

polynomial_donut
źródło
1
Uprzejmie wspominam, że czasami wymagane jest wyłączenie różnych urządzeń.
Scone
defaultProblemem jest prawdopodobnie brak linii. Jeśli sterownik nie został jeszcze załadowany w momencie uruchamiania systemu, kiedy sysctl został wykonany, to nie został uwzględniony all- ale ustawienie wartości domyślnej oznaczałoby, że otrzymałoby to ustawienie później, gdy został załadowany.
Charles Duffy,
1
Miałem ten defaultwpis i musiałem skonfigurować konkretne urządzenie, aby pomyślnie je wyłączyć.
Alfonso Nishikawa,
7

Oto jak sprawdzić, czy ipv6 jest włączony na twoim komputerze

test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"

Jeśli zobaczysz

Running kernel is IPv6 ready

jest włączony.

Jeśli nie widzisz żadnych danych wyjściowych, nie jest.

Aby wyłączyć ipv6, jeśli inne odpowiedzi na tej stronie nie działają dla ciebie, umieść na czarnej liście ipv6 razem. Aby to zrobić, użyj następującego polecenia:

echo 'blacklist ipv6' | sudo tee -a '/etc/modprobe.d/blacklist.local' >/dev/null 

Może to również pomóc:

echo 'install ipv6 /bin/true' | sudo tee -a '/etc/modprobe.d/blacklist.local' >/dev/null

Uruchom ponownie, aby zmiany odniosły skutek. Aby sprawdzić, czy jest włączony po uruchomieniu, ponownie uruchom to polecenie:

test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"

Nie powinno być wyjścia.

Kliknij tutaj, aby uzyskać informacje o tym, jak wyłączyć IPV6 podczas rozruchu.

mchid
źródło
Ta odpowiedź zakłada, że ipv6cechą jądra jest moduł jądra (używany blacklist.localdo zapobiegania jego ładowaniu). Istnieje przypadek, że ipv6 jest wkompilowany w jądro (nie moduł), w którym to przypadku konieczne jest uruchomienie jądra za pomocą ipv6.disable=1paremetera rozruchowego (aby to zrobić: (1) sudo gedit /etc/default/grub(2) wyszukaj wiersz GRUB_CMDLINE_LINUX_DEFAULT=<args>i (3) dodaj ipv6.disable=1do parametrów startowych)
humanityANDpeace
@humanityANDpeace Być może zainteresuje Cię bardziej wyczerpująca odpowiedź: unix.stackexchange.com/a/190189
mchid
6

Jeśli używasz nowoczesnej wersji Ubuntu (mam 16.04 LTS), możesz użyć tego schludnego rozwiązania:

Utwórz /etc/sysctl.d/60-ipv6-disable.confzawierający następujący tekst:

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

Biegać service procps start

użytkownik10550
źródło
2
jest to najczystszy sposób na zrobienie tego - nie rozumiem, dlaczego został odrzucony. działa również na fedora / centos / redhat. ma tę zaletę, że nie zmienia plików domyślnych systemu (jak bezpośrednio sysctl.conf, jak sugeruje najpopularniejsza odpowiedź)
Costin Guină
@Costin Nie głosowałem, ale to nie zawsze zadziała. Czasami musisz podać konkretną nazwę urządzenia (np. W przypadku niestandardowych instalacji sterowników). Zobacz komentarz Alfonso Nishikawasa do mojej odpowiedzi.
polynomial_donut
Jestem wdzięczny, że zastosowałem to podejście, ponieważ straciłem połączenie na zdalnym serwerze ( wymagało to IPv6) i bardzo łatwo było skierować mojego asystenta na miejscu, aby usunął jeden plik i uruchomił się ponownie.
Roger Dueck
service procps restartzamiast tego musiałem uruchomić Ubuntu 18.04
iPherian