这篇文章详尽记录了如何在Ubuntu上禁用IPv6,如果您的Ubuntu联网出现了问题,有可能就是IPv6在作妖,可以试试禁用它。
现在联网的设备越来越多,IPv4地址将要耗尽,IPv6主要就是为解决这个问题而生,作为未来互联网基础设施的一部分,但它还是一个正在研究中的协议,并未大规模普及使用,但互联网的未来最终将依赖于IPv6标准。
然而,现在许多服务提供商根本没有实施它,还有一些服务提供商的配置很差,导致各种连接问题层出不穷。如果在使用IPv6进行连接时遇到了问题,可以在系统上禁用它。
自Ubuntu 18.04以来,操作系统默认启用了IPv6协议。请注意,如果你在联网时没有遇到任何问题,那么就没有必要禁用IPv6。以下所有步骤都需要在终端中完成。在Ubuntu桌面版上,可以按CTRL+ALT+T键轻松打开终端。
在Ubuntu上使用sysctl禁用IPv6
第一个在Ubuntu上禁用IPv6的方法是利用sysctl包。
可以利用这个包来修改系统内核的属性,使IPv6永远不被启用。
暂时停用IPv6
使用这种方法,可以暂时禁用IPv6协议。
当Ubuntu设备重新启动时,IPv6模块将重新开启。
1. 在设备的终端上,运行以下两个命令。
这些命令改变了所有网络设备的IPv6配置以及默认值。
将这些值从默认的0改为1,这样IPv6就会被禁用。
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
2. 可以使用ip命令来验证Ubuntu系统是否已经禁用IPv6。
在终端中运行以下命令,输出网络接口的详细信息。
ip a
用 “a “参数告诉 “ip “命令,要打印出所有网络接口的状态。
3. 在输出结果中,应该没有了 “inet6 “条目。
如果仍然看到这个条目,可能需要尝试使用其他方法,因为这表明IPv6仍然是启用的。
在Ubuntu启动时禁用IPv6
现在已经知道如何在Ubuntu上使用sysctl禁用IPv6了,还需要把这一更改永久化。
上一节的问题是,虽然临时禁用了,但只要设备重启,这些变化就会被重置。
为了使这些变化持久化,需要修改 “sysctl.cfg “配置文件。
1. 要编辑sysctl配置文件,可以利用nano文本编辑器。
你可以使用任何你想要的文本编辑器,但我发现nano是最容易使用的一个,特别是对于初学者。
sudo nano /etc/sysctl.conf
2. 在该文件底部增加以下几行:
可以使用CTRL + W,然后CTRL + V跳到文件的底部。
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
当的Ubuntu系统重新启动时,这些设置从系统启动时就被设置,IPv6被禁用。
3. 写完这些修改后,按CTRL + X,然后按Y,再按ENTER键保存。
4. 现在,必须处理一个由/etc/init.d/propcs在启动过程中被过早调用而引起的问题。
由于它可能太早启动,一些设置,如我们的IPv6禁用选项可能永远不会被应用。
可以创建一个文件来解决这个问题,这个文件会在启动序列的后面运行,从而启动我们需要的脚本。
通过在Ubuntu设备上使用以下命令开始写入这个文件。
sudo nano /etc/rc.local
5. 在该文件中,需要输入以下几行:
这几行会调用procps,这样它就会重新加载sysctl配置。
在启动过程中稍后会调用这个功能,IPv6禁用现在应该可以按照预期的方式工作了。
#!/bin/bash
#/etc/rc.local
/etc/init.d/procps restart
exit 0
完成后,请按CTRL + X,然后按Y,再按ENTER键保存文件。
6. 还没有结束,需要调整新文件的权限。
使用chmod命令为所有用户提供这个文件的执行权限。
sudo chmod 755 /etc/rc.local
如果没有执行权限,系统将无法在启动时使用该文件。
8. 最后,使用以下命令重新启动设备。
重启Ubuntu设备测试下禁用IPv6的配置是不是生效了。
sudo reboot
9. Ubuntu重新启动后,就可以验证IPv6是否已经被禁用。
要检查网络设备的状态,可以利用ip命令。
ip a
从这个命令中,应该看到输出中没有inet6值。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether dc:a6:32:d3:28:99 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.193/24 brd 192.168.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
在特定接口上禁用IPv6
可以修改前面两节,在特定的网络接口上禁用IPv6。
这些变化相当直接,只需要知道网络接口的名称。
1. 可以利用以下命令检索所有网络接口的名称。
ip link
2. 在这个命令中,应该看到网络接口的列表,就像下面的样子。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:2c:84:22 brd ff:ff:ff:ff:ff:ff
由于Ubuntu利用的是随机的网络名称,有两点可以说明。
首先,任何以 “en “开头的网络名称都是以太网接口。
同样,任何以 “el “开头的网络都是无线网络接口。
确定要禁用的IPv6的接口,然后进入下一步。
3. 现在,可以按照上面的步骤操作了。
不过,这次要做的事情略有不同。
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
不要使用上面的文字,而是使用下面的配置,其中 “NETWORKNAME “是要禁用的网络接口的名称。
net.ipv6.conf.NETWORKNAME.disable_ipv6-1
例如,使用下面的文本位来禁用以太网接口上的IPv6。
net.ipv6.conf.enp0s3.disable_ipv6=1
在Ubuntu上使用GRUB禁用IPv6
除了使用sysctl禁用Ubuntu系统中的IPv6之外,还可以使用GRUB。
GRUB是Ubuntu自9.10版本以来一直使用的启动加载器和管理器。
修改GRUB的设置,可以让它在启动时禁用IPv6。
1. 先来修改一下grub配置文件。
修改这个文件时要小心,因为它有可能破坏Ubuntu。
sudo nano /etc/default/grub
2. 在这个文件中,需要找到以下两行:
如果使用的是nano,可以使用CTRL+W更快地找到这些行。
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
3. 在这两行中,需要在双引号(” “)内添加ipv6.disable=1。
例如,配置应该最终看起来像我下面的样子。
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
GRUB_CMDLINE_LINUX="ipv6.disable=1"
如果你的GRUB_CMDLINE行中已经有了文本,请确保用空格将新的值隔开。
4. 按CTRL + X,然后按Y,再按ENTER键保存你对GRUB配置文件的修改。
5. 已经对GRUB配置进行了修改,现在运行update-grub软件。
这个软件会保存对启动加载器的更改,所以下次启动设备时,应该已经禁用了IPv6。
sudo update-grub
6. 为了让改变生效,需要重新启动Ubuntu设备。
可以通过运行以下命令重新启动Ubuntu。
sudo reboot
7. 现在可以使用ip命令来验证Ubuntu设备是否禁用了IPv6。
使用以下内容列出所有网络接口的状态。
ip a
如果一切正常,应该看到这个结果中没有返回任何inet6条目。
结论
此时,您应该已经成功地禁用了Ubuntu系统上的IPv6。
禁用IPv6可以帮助各种场景,例如连接到配置错误的IPv6处理的服务。
虽然不应该禁用IPv6,但我们也无能为力,因为有时候IPv6就是没法正常访问网络。
如果你需要什么问题,欢迎在下面留言。
欢迎转载,请留下出处链接:Labno3 » 联网出现问题,详细介绍如何在Ubuntu上禁用IPv6