问题描述
如何通过终端命令禁用IPv6系统?
我读过编辑/etc/modprobe.d/aliases并替换:
alias net-pf-10 ipv6
有:
alias net-pf-10 off
alias ipv6 off
这是否可以安全应用并在重新启动后永久禁用ipv6?
最佳解决方案
在/etc/sysctl.conf
中添加以下行后,我成功禁用了IPv6:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
还运行此命令以加载更改
sudo sysctl -p
次佳解决方案
如果你的PC在启动时没有加载/etc/sysctl.conf(对我来说是这种情况),则需要从grub中禁用IPv6。 Linux内核有一个名为”ipv6.disable=1″的引导选项,它禁用启动IPv6。
要编辑引导选项,请使用任何文本编辑器以root用户身份编辑”/etc/default/grub”:
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
第三种解决方案
Carvalho的答案包括关于必须运行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
这一行
第四种方案
以下是检查计算机上是否启用了ipv6的方法
test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"
如果你看到
Running kernel is IPv6 ready
它已启用。
如果你看不到输出,那就不是。
如果此页面上的其他答案不适合您,请禁用ipv6,黑名单ipv6 all-together。为此,请使用以下命令:
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"
应该没有输出。
Click here for info on how to disable IPV6 at boot.
第五种方案
如果您使用的是Ubuntu的现代版本(我是16.04 LTS),那么您可以使用这个整洁的解决方案:
创建包含以下文本的/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