IPv6 基础知识

ubuntu22.04在不修改 grub 的情况下,重启后自动禁用 IPv6

将配置放入 /etc/sysctl.d/ 目录(推荐)
systemd 优先加载 /etc/sysctl.d/ 目录下的 .conf 文件(优先级高于 /etc/sysctl.conf),且该目录的配置会被 systemd-sysctl.service 自动应用于启动过程。
步骤:
创建专用配置文件在 /etc/sysctl.d/ 目录下创建一个禁用 IPv6 的配置文件(文件名建议以数字开头,确保优先加载,如 99-disable-ipv6.conf):
bash
sudo nano /etc/sysctl.d/99-disable-ipv6.conf
添加禁用 IPv6 的配置写入以下内容(与之前 sysctl.conf 中的配置一致):
conf
# 禁用所有接口的 IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
设置文件权限确保配置文件权限正确(默认即可,无需特殊权限):
chmod 644 /etc/sysctl.d/99-disable-ipv6.conf
重启 systemd-sysctl 服务让系统重新加载配置文件,并验证是否生效:
systemctl restart systemd-sysctl
验证配置检查当前 IPv6 状态(应输出 1):
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
关键原理
Ubuntu 22.04 基于 systemd,systemd-sysctl.service 服务会在系统启动时自动加载 /etc/sysctl.d/ 和 /usr/lib/sysctl.d/ 目录下的所有 .conf 文件。
相比 /etc/sysctl.conf,/etc/sysctl.d/ 目录的配置更可靠,不易被系统升级或其他服务覆盖。
文件名以 99- 开头是为了确保在其他可能的配置文件之后加载(数字越小优先级越高),避免被其他配置覆盖。
测试重启效果
执行重启后,无需手动执行 sysctl -p,直接检查 IPv6 状态:
reboot

# 重启后验证
cat /proc/sys/net/ipv6/conf/all/disable_ipv6  # 应输出 1
ping -6 google.com  # 应提示 "connect: Network is unreachable"
若仍不生效:检查配置冲突
如果问题依旧,可能存在其他配置文件覆盖了设置,可执行以下命令排查所有生效的 sysctl 配置:
sysctl --system  # 列出所有已加载的 sysctl 配置文件及参数
查看输出中是否有 net.ipv6.conf.all.disable_ipv6 = 0 的记录,若有,找到对应的配置文件(如 /usr/lib/sysctl.d/ 下的文件),并在 /etc/sysctl.d/99-disable-ipv6.conf 中强制覆盖(相同参数后加载的配置会覆盖先加载的)。
通过这种方式,无需修改 grub,即可确保重启后自动禁用 IPv6,解决手动执行 sysctl -p 的问题。