禁用IPv6,别只改 sysctl.conf

414 字
2 分钟
禁用IPv6,别只改 sysctl.conf

今天遇到个问题,某个服务商的v6连接cf老是断断续续的,tg上不断告警。。。突然想到是不是和这家的v6用户很多人用hy2有关系,美其名曰v6快乐机,实际上各显神通搞的乌烟瘴气,跟帮蝗虫一样。不说了,干脆把v6禁用。

想把服务器的 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
net.ipv6.conf.eth0.disable_ipv6 = 1

然后执行:

Terminal window
sysctl -p

当时 IPv6 确实没了。但机器一重启,IPv6 地址又回来了。

sysctl 没失效。它只是把当前内核运行时参数改掉了。系统启动时,NetworkManager、cloud-init 或网络脚本还可能继续创建接口、重写接口参数。网卡名也未必叫 eth0,新系统经常是 ens18enp1s0 这类名字。只靠 sysctl.conf,并不能保证 IPv6 协议栈从开机起就不加载。

要彻底关闭,就在内核启动参数里加入 ipv6.disable=1。这个参数在网络服务启动之前生效,重启也不会丢。

Ubuntu / Debian#

编辑 GRUB 配置:

Terminal window
sudo nano /etc/default/grub

在原有的 GRUB_CMDLINE_LINUX_DEFAULT 引号内追加 ipv6.disable=1。例如:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1"

然后生成 GRUB 配置并重启:

Terminal window
sudo update-grub
sudo reboot

Rocky / AlmaLinux / CentOS#

这类系统可以直接用 grubby 写入全部已安装内核:

Terminal window
sudo grubby --update-kernel=ALL --args="ipv6.disable=1"
sudo reboot

重启后检查#

Terminal window
cat /proc/cmdline
ip -6 addr

/proc/cmdline 里应当能看到 ipv6.disable=1ip -6 addr 不应再出现 IPv6 地址。

如果系统并不用 GRUB,例如部分云镜像或 systemd-boot,就把同一个 ipv6.disable=1 加到对应的启动项里。内核启动参数才是这里的重点。

以上。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

禁用IPv6,别只改 sysctl.conf
https://blog.qiui.net/posts/2026-08-02-disable-ipv6-persistently/
作者
Qiui
发布于
2026-08-02
许可协议
CC BY-NC-SA 4.0

评论区

文章目录