禁用Linux IPv6协议栈需四层协同:内核启动参数(ipv6.disable=1最彻底)、sysctl配置、网络接口(如IPV6INIT=no)及服务(如SSH设AddressFamily inet),缺一将导致ss仍监听:::22等矛盾现象。

禁用 Linux 的 IPv6 协议栈不能只改一个地方,必须从内核加载、网络栈、接口配置、服务依赖四个层面协同处理。否则会出现 ip addr 看不到 IPv6 地址,但 ss -tuln 仍显示 :::22 监听的矛盾现象。
通过内核启动参数彻底禁用(推荐)
这是最可靠、最彻底的方式,让内核启动时就不加载 IPv6 模块,连 /proc/sys/net/ipv6/ 目录都不会存在。
- 编辑
/etc/default/grub,在GRUB_CMDLINE_LINUX行末尾添加ipv6.disable=1(注意:不是GRUB_CMDLINE_LINUX_DEFAULT) - 执行命令更新 GRUB 配置:
RHEL/CentOS/Fedora/openEuler:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Debian/Ubuntu:sudo update-grub - 重启系统后验证:
lsmod | grep ipv6应无输出cat /proc/sys/net/ipv6/conf/all/disable_ipv6应报错 “No such file or directory”
通过 sysctl 临时禁用协议栈(常用但不彻底)
该方式仅关闭 IPv6 协议栈功能,内核模块仍被加载,部分服务(如 SSH、vsftpd)可能继续监听 IPv6 端口。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 向
/etc/sysctl.conf或新建/etc/sysctl.d/99-disable-ipv6.conf中写入三行: net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1net.ipv6.conf.lo.disable_ipv6 = 1- 执行
sudo sysctl -p生效 - 验证:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6返回1,但lsmod | grep ipv6仍有输出
同步调整网络接口和服务配置
仅改内核或 sysctl 不足以让所有组件停止使用 IPv6,还需配套修改:
-
NetworkManager 连接:运行
nmcli connection modify "连接名" ipv6.method ignore,再nmcli connection down && up -
传统 ifcfg 脚本(RHEL/CentOS):在
/etc/sysconfig/network-scripts/ifcfg-*中添加IPV6INIT=no和IPV6_AUTOCONF=no -
SSH 服务:编辑
/etc/ssh/sshd_config,确保含AddressFamily inet(强制仅用 IPv4) -
全局网络开关(可选):在
/etc/sysconfig/network中添加NETWORKING_IPV6=no
验证是否真正禁用成功
不要只看 ip -6 addr 是否有地址,要综合检查四项:
-
lsmod | grep ipv6—— 应为空(内核参数方式)或模块引用数为 0(sysctl 方式) -
cat /proc/sys/net/ipv6/conf/all/disable_ipv6—— 应为1(sysctl)或报错(内核参数) -
ss -tuln | grep ':22'—— 不应出现:::22,只留*:22 -
ping6 -c1 ::1或curl -6 -I https://ipv6.google.com—— 应失败

















