Как отключить IPv6 навсегда?

54

Как мы можем отключить всю систему IPv6 с помощью команд терминала?

Я прочитал редактирование /etc/modprobe.d/aliases и заменяю:

alias net-pf-10 ipv6

с участием:

alias net-pf-10 off
alias ipv6 off

Безопасно ли это применять и постоянно отключает ipv6 при перезагрузках?

Tinfoilhats
источник
5
Почему вы хотите отключить IPv6 навсегда?
Андерсон Грин
2
Абсолютно (ну, я действительно могу найти его в MS Windows) нет причин отключать IPv6. Почему вы хотите это сделать?
Андерс
17
Нет абсолютно никаких причин, чтобы включить ipv6 на самом деле. Все по-прежнему ipv4, и он не дает никаких преимуществ тому, кто управляет небольшой сетью и имеет ограниченное время. Это еще один вектор для атаки и возможной неправильной конфигурации, и его целесообразно отключить. Вероятно, не то, что хочет услышать любой инженер IETF, но это их проблема, а не моя. Я включу его, когда у меня будет веская причина, до тех пор, просто еще один вектор атаки, которым я должен управлять.
Джонатан С. Фишер
8
Отключение IPv6 не делает вас невосприимчивым к атакам IPv6. Гораздо лучше включить его, разобраться с ним и извлечь из него уроки - это единственный способ сделать вашу среду немного более безопасной. Вместо этого всем лучше узнать «Как отключить IPv4 навсегда». IPv6 намного проще, чем IPv4. Начнем с того, что NAT больше не существует, так что управлять им стало еще меньше ... Интернет растет очень быстро, через несколько лет сеть IPv6 станет больше, чем IPv4, поэтому с IPv4 вы будете вне реального Интернета. Давай, парень! Обнови свой IP !! Изменение это хорошая вещь.
ThiagoCMC
7
@ JonathanS.Fisher и другие - эти комментарии бесполезны. То, что вы можете не знать причину отключения IPv6, не означает, что ее нет. Одним из основных случаев является VPN-сервисы, которые не поддерживают IPv6. Если вы не отключите его, вы потеряете свой IPv6-адрес.
Сконе

Ответы:

75

Я успешно отключил IPv6, вставив следующие строки /etc/sysctl.conf:

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

также запустите эту команду, чтобы загрузить изменения

sudo sysctl -p
Эрик Карвалью
источник
Uubuntu на VMware не может пинговать, и я закрываю ipv6 на Ubuntu, теперь все в порядке.
Honghe.Wu
12
После добавления этих строк в sysctl.conf запустите sudo sysctl -pили перезагрузите компьютер, чтобы изменения вступили в силу.
Раджат Гупта
4
Мне нужно сделать это только по беспроводной сети в качестве обходного пути, чтобы я мог подключиться снова. Вот как это сделать только для одного адаптера:net.ipv6.conf.wlan0.disable_ipv6 = 1
cmc
1
Это не работает на Ubuntu 17.10. См. Комментарий NullNoname ниже для исправления grub.
Лука
1
Не работает и в Ubuntu 16.04. Grub метод работает.
Penghe Geng
54

Если ваш компьютер не загружает /etc/sysctl.conf во время загрузки (как для меня), необходимо отключить IPv6 от grub. Ядро Linux имеет параметр загрузки с именем «ipv6.disable = 1», который отключает IPv6 от запуска.

Чтобы отредактировать параметры загрузки, отредактируйте «/ etc / default / grub» в любом текстовом редакторе от имени пользователя root:

sudo nano /etc/default/grub

Найдите строку, содержащую «GRUB_CMDLINE_LINUX_DEFAULT»:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Добавьте «ipv6.disable = 1» в параметр загрузки, затем сохраните файл grub:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 quiet splash"

Наконец, обновите grub:

sudo update-grub
NullNoname
источник
6
+1 это работает и полностью отключает IPv6, так что не осталось никаких следов, /proc/sys/net/ipv6/которые могут вызвать проблемы, такие X11 forwarding request failedкак sshdпопытка привязки к ненастроенному интерфейсу IPv6. Обратите внимание, что аналогичным образом вы можете избавиться от IPv4 таким образом на виртуальных машинах с чистым IPv6. Благодарю.
Тино
7

Ответ Карвалью, включая комментарий о необходимости бежать sudo sysctl -P, помог мне больше всего.

Тем не менее, в моем случае, по крайней мере:

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

и, похоже, вторая строка была необходима.

Возможно, это связано с тем, что я использую TP-Link Archer T2U, для которого мне пришлось настраивать драйвер из исходного кода.
Я предполагаю, что в результате <mydevice>не считается как " all".
Таким образом, в двух словах, если вы добавили (настраиваемый) сетевой драйвер по своему усмотрению, этого net.ipv6.conf.all.disable_ipv6 = 1может быть недостаточно для отключения сети IPv6.

Должен признать, однако, что я не пробовал линию
net.ipv6.conf.default.disable_ipv6 = 1

polynomial_donut
источник
1
Upvote за упоминание о том, что иногда требуется отключение различных устройств.
Сконе
Отсутствие defaultлинии, вероятно, является проблемой здесь. Если ваш драйвер еще не был загружен в тот момент процесса загрузки, когда был запущен sysctl, то он не был включен all- но установка по умолчанию означала бы, что он получит настройку позже, когда он будет загружен.
Чарльз Даффи
1
У меня была defaultзапись, и я должен был настроить конкретное устройство, чтобы успешно отключить его.
Альфонсо Нишикава
7

Вот как проверить, включен ли ipv6 на вашем компьютере.

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

Если ты видишь

Running kernel is IPv6 ready

это включено.

Если вы не видите выхода, это не так.

Чтобы отключить ipv6, если другие ответы на этой странице не работают для вас, черный список ipv6 все вместе. Для этого используйте следующую команду:

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

Также это может помочь:

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

Перезагрузитесь, чтобы изменения вступили в силу. Чтобы проверить, включен ли он после запуска, снова запустите эту команду:

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

Там не должно быть никакого выхода.

Нажмите здесь для получения информации о том, как отключить IPV6 при загрузке.

mchid
источник
Этот ответ предполагает, что ipv6функция ядра является модулем ядра (используется blacklist.localдля предотвращения его загрузки). Существует случай, когда ipv6 скомпилирован в ядро ​​(не модуль), и в этом случае необходимо загрузить ядро ​​с помощью ipv6.disable=1загрузочного параметра (для этого нужно: (1) sudo gedit /etc/default/grub(2) найти строку GRUB_CMDLINE_LINUX_DEFAULT=<args>и (3) добавить ipv6.disable=1в параметры загрузки)
humanityANDpeace
@humanityANDpeace Вам может быть интересен этот более полный ответ: unix.stackexchange.com/a/190189
mchid
6

Если вы используете современную версию (я 16.04 LTS) Ubuntu, то вы можете использовать это решение:

Создать, /etc/sysctl.d/60-ipv6-disable.confсодержащий следующий текст:

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

Бегать service procps start

user10550
источник
2
это самый чистый способ сделать это - не понимаю, почему был понижен. это работает на fedora / centos / redhat тоже. у него есть преимущество в том, что он не изменяет системные файлы по умолчанию (например, непосредственно sysctl.conf, как предложено в самом популярном ответе)
Костин Гуцэ
@ Костин Я не понизил голос, но это не всегда будет работать. Иногда вам нужно указать конкретное имя устройства (например, в случае установки пользовательских драйверов). См. Комментарий Альфонсо Нишикаваса к моему ответу.
polynomial_donut
Я благодарен за то, что следовал этому подходу, потому что я потерял соединение на удаленном сервере (ему нужен IPv6), и моему помощнику было очень легко направить на сайт один файл и перезагрузить компьютер.
Роджер Дуек
service procps restartвместо этого я должен был работать на Ubuntu 18.04
iPherian