Ubuntu 关闭 IPv6 操作说明
本文整理本次操作中的关闭方法、验证步骤和参数含义。用户已确认:在 GRUB 中添加 ipv6.disable=1,执行 update-grub 并重启后,IPv6 已关闭。
1. 适用范围
下文的永久关闭方法适用于使用 GRUB 启动的 Ubuntu。WSL、容器及使用其他引导器的系统不能直接套用此方法。
ipv6.disable=1 会禁用 IPv6 功能,包括网卡 IPv6 地址、本地回环地址 ::1 和 IPv6 socket。远程操作时应使用 IPv4 SSH 连接,重启后也通过 IPv4 重新连接。[1]
2. 永久关闭 IPv6
2.1 备份并编辑 GRUB 配置
在 Ubuntu 终端执行:
sudo cp -a /etc/default/grub "/etc/default/grub.bak.$(date +%Y%m%d-%H%M%S)"
sudo nano /etc/default/grub
备份文件名带有时间,便于区分不同次备份。
找到 GRUB_CMDLINE_LINUX= 这一行,在已有引号内追加 ipv6.disable=1,与其他参数之间用空格隔开。
例如,原配置为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="ipv6.disable=1"
如果引号内已有其他参数,必须保留;以上是示例,不要直接覆盖原有参数。 如果该参数已经存在,无需再次追加。
在 nano 中按 Ctrl+O、回车保存,再按 Ctrl+X 退出。
2.2 更新配置并重启
保存工作后执行:
sudo update-grub && sudo reboot
update-grub 会重新生成 GRUB 启动配置;&& 表示只有前一条命令成功,才执行重启。[3]
如果配置文件不存在,或命令找不到、执行报错,应先检查实际使用的引导器,不要直接安装或替换 GRUB。
2.3 重启后验证
cat /proc/cmdline
ip -6 addr show
预期结果:
/proc/cmdline中包含ipv6.disable=1,说明本次启动已传入该参数。ip -6 addr show没有输出,说明当前没有 IPv6 地址,包括::1。
如果 /proc/cmdline 中没有该参数,说明修改没有进入本次启动参数。需要检查 update-grub 的执行结果、实际启动的系统和引导器,以及 /etc/default/grub.d/ 中是否存在覆盖配置。
3. 为什么两行都添加会重复
GRUB 对两项配置的处理规则是:[2]
GRUB_CMDLINE_LINUX:应用于正常启动和恢复模式的 Linux 启动项。GRUB_CMDLINE_LINUX_DEFAULT:额外追加到正常启动项,不应用于恢复模式。
用户本次实际使用了下面的配置,并确认重启后生效:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1"
GRUB_CMDLINE_LINUX="ipv6.disable=1"
按照上述规则,正常启动时,由这两行产生的参数片段为:
ipv6.disable=1 quiet splash ipv6.disable=1
同一个 ipv6.disable=1 出现两次,禁用效果与传入一次相同。
| 参数添加位置 | 正常启动 | 恢复模式 |
|---|---|---|
仅 GRUB_CMDLINE_LINUX_DEFAULT | 关闭 IPv6 | 不通过此参数关闭 IPv6 |
仅 GRUB_CMDLINE_LINUX | 关闭 IPv6 | 关闭 IPv6 |
| 两处同时添加 | 关闭 IPv6,参数重复 | 关闭 IPv6 |
所以,在 GRUB_CMDLINE_LINUX 中添加一次即可。当前两处都添加且已经正常工作的配置,也可以保留。
这里的结论针对相同的 ipv6.disable=1,不能推广为所有启动参数重复时都没有影响。
4. quiet splash 是什么
这是两个控制开机显示效果的参数:[4][5]
| 参数 | 作用 |
|---|---|
quiet | 减少启动时屏幕上的日志输出 |
splash | 显示图形启动画面,例如 Ubuntu 标志和加载动画 |
ipv6.disable=1 | 禁用 IPv6 功能 |
quiet splash 与是否关闭 IPv6 无关,可以保留原有设置。
5. 临时关闭与持久配置的区别
如果只想临时关闭,可以在 IPv4 SSH 连接或本机终端中执行:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
ip -6 addr show
这些命令修改当前运行中的设置,没有写入启动配置,因此不能保证重启后仍然禁用。all 会影响当前接口,default 用于新接口;实际检查应查看接口状态,不能只根据 all.disable_ipv6 的读数下结论。[6]
此前提到的 /etc/sysctl.d/99-disable-ipv6.conf 属于另一种持久化方式:系统会在启动时加载该目录中的配置,但后续网络管理服务或其他配置可能重新调整接口设置。[7]
本次已通过 GRUB 方法达到永久关闭的目的,不需要再叠加上述临时命令。
6. 恢复 IPv6
6.1 移除 GRUB 禁用参数
sudo nano /etc/default/grub
从 GRUB_CMDLINE_LINUX 和 GRUB_CMDLINE_LINUX_DEFAULT 中移除所有 ipv6.disable=1,保留其他参数。
例如:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
6.2 清理此前添加的 sysctl 禁用配置
如果此前创建过 /etc/sysctl.d/99-disable-ipv6.conf,先检查内容:
cat /etc/sysctl.d/99-disable-ipv6.conf
如果文件仅包含本次添加的 IPv6 禁用配置,可以删除:
sudo rm /etc/sysctl.d/99-disable-ipv6.conf
如果文件还包含其他设置,仅编辑删除其中 disable_ipv6 = 1 的相关配置。若曾在其他 sysctl 文件中添加同类设置,也需要清理。没有创建过此文件则跳过这一步。
6.3 更新、重启并检查
sudo update-grub && sudo reboot
重启后执行:
cat /proc/cmdline
ip -6 addr show
启动参数中不应再有 ipv6.disable=1。重新启用 IPv6 后,网卡能否获得 IPv6 地址仍取决于本机网络配置及上游网络支持,不能以是否立即获得公网 IPv6 地址作为唯一判断依据。