将其添加到引导加载程序的内核行中以完全禁用IPv6:
ipv6.disable=1
如果您使用的是Grub(如果您尚未安装自己的引导程序,那么您使用的是Grub),您的内核行应如下所示:
linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff ipv6.disable=1
为了向内核行添加内容,推荐的方法是将所需的内核参数添加到文件中的GRUB_CMDLINE_LINUX_DEFAULT
变量中/etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
将其添加到后/etc/default/grub
,运行以下命令来重新生成您的grub.cfg
:
sudo grub-mkconfig -o /boot/grub/grub.cfg
或者,添加ipv6.disable_ipv6=1
将保持IPv6堆栈正常运行,但不会将IPv6地址分配给您的任何网络设备。
要么
要通过sysctl禁用IPv6,请将以下内容放入/etc/sysctl.conf
文件中:
net.ipv6.conf.all.disable_ipv6 = 1
不要忘记注释掉/etc/hosts
文件中的所有IPv6主机:
#::1 localhost.localdomain localhost
注意
sysctl方法可能需要重新引导,而内核行方法肯定需要重新引导。
要么
要暂时禁用IPv6:
sysctl -w net.ipv6.conf.all.disable_ipv6 = 1
要暂时启用它:
sysctl -w net.ipv6.conf.all.disable_ipv6 = 0
因此,如果您需要在给定条件下禁用ipv6 ,则可以按照以下几行方法编写bash脚本:
#!/bin/bash
ipv6_disabled="$(sysctl net.ipv6.conf.all.disable_ipv6 | awk '{print $NF}')"
if (connected_to_vpn &> /dev/null); then
(($ipv6_disabled)) || sysctl -w net.ipv6.conf.all.disable_ipv6=1
else
(($ipv6_disabled)) && sysctl -w net.ipv6.conf.all.disable_ipv6=0
fi
注意
您可能也需要/etc/hosts
为此方法禁用文件中的任何ipv6主机,就像我在上一种方法中建议的那样。