ipv6是否真正禁用需同时验证三项:cat /proc/sys/net/ipv6/conf/all/disable_ipv6返回1、lsmod | grep ipv6无输出、ip -6 addr show无scope global地址;仅fe80::存在不表示可用,任一条件不满足则ping6 ::1失败。

直接用 sysctl 检查并关闭 IPv6,关键不是只看有没有 fe80:: 地址,而是确认内核开关、模块加载和网络服务三者状态一致。关掉它不难,但容易只改一半,结果看似禁用实则仍生效。
怎么用 sysctl 查看 IPv6 当前状态
运行三条命令,缺一不可:
-
cat /proc/sys/net/ipv6/conf/all/disable_ipv6—— 返回 0 表示开启,1 表示已禁用 -
lsmod | grep ipv6—— 有输出说明模块已加载;若为空,IPv6 栈根本没初始化 -
ip -6 addr show | grep inet6—— 看是否有 scope global 地址;仅 fe80:: 是链路本地地址,不代表可用
哪怕 ip -6 addr 显示了地址,只要上面任一值为 1 或模块未加载,ping6 ::1 就会失败。
临时关闭 IPv6(重启即失效)
适合调试或快速验证,不改任何配置文件:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 执行:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 - 同时关掉默认接口和回环:
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1和sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1 - 验证:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6应输出 1,且ip -6 addr show不再显示 inet6 行(除可能残留的 fe80::,这是内核 fallback 行为,不影响判断)
永久关闭 IPv6(推荐方式)
编辑 /etc/sysctl.conf 或新建配置文件(更规范):
- 创建
/etc/sysctl.d/99-disable-ipv6.conf,写入:
net.ipv6.conf.default.disable_ipv6 = 1
- 执行:
sudo sysctl --system(比-p更可靠,自动加载所有sysctl.d文件) - 注意:某些发行版(如 Ubuntu 18.04+ 使用 Netplan)可能仍会分配链路本地地址,需额外在 Netplan 配置中设
link-local: []或配合 GRUB 参数才彻底干净
关闭后务必验证是否真生效
别只信配置文件,要动手测:
-
cat /proc/sys/net/ipv6/conf/all/disable_ipv6必须是 1 -
ip a输出里不应出现inet6字样(fe80:: 可能残留,忽略) -
ping6 -c 1 ::1应报错connect: Network is unreachable -
ss -tln | grep :80类命令,如果应用监听:::80,说明上层服务还没适配,需单独调整
不复杂但容易忽略。










