IPv6未彻底关闭需检查三项:lsmod | grep ipv6、/proc/sys/net/ipv6/conf/all/disable_ipv6值、ss -tuln | grep :22是否含tcp6或:::22;临时关闭用sysctl禁用all和default,永久关闭需修改/etc/sysctl.conf并配合服务级(如sshd_config)和网卡级配置。

关 IPv6 不是改一个配置就能完事的,必须分层处理——否则你会看到 ip addr 没有 inet6,但 ss -tuln 里依然有 :::22 这种“关了又没完全关”的现象。
怎么确认 IPv6 实际还在运行
别只看 ip -6 addr show 有没有输出。链路本地地址 fe80::/64 是内核 fallback 行为,即使协议栈被禁用也可能出现。真正要查的是这三项:
-
lsmod | grep ipv6—— 有输出说明模块已加载 -
cat /proc/sys/net/ipv6/conf/all/disable_ipv6—— 必须为0才算启用 -
ss -tuln | grep :22—— 若含tcp6或:::22,说明应用仍在监听 IPv6
任一为真,就代表 IPv6 没关干净。
临时关闭:命令行立即生效,重启即恢复
适合快速验证或排除故障,不改任何文件:
- 禁用所有接口(含回环):
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 - 禁用默认模板(防止新接口自动启用):
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1 - 验证是否生效:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6应返回1
注意:这不会卸载 ipv6 模块,lsmod | grep ipv6 仍可能有输出;SSH 等服务若未额外配置,仍可能继续监听 :::22。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
永久关闭:sysctl 方式最稳妥,新手首选
修改 /etc/sysctl.conf 是兼容性最好、可逆性最强的方式:
- 编辑文件:
sudo nano /etc/sysctl.conf - 在末尾添加两行:
net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1 - 立即加载:
sudo sysctl -p - 重启后仍有效;想恢复?删掉这两行再跑一次
sysctl -p
这个方式不影响内核模块加载,也不动 NetworkManager 或 systemd-networkd 的行为,但必须配合下一步才能让服务不监听 IPv6。
关键补充:服务级和网卡级配置不能漏
只靠 sysctl 关不彻底。常见遗漏点:
-
SSH 仍监听 :::22:编辑
/etc/ssh/sshd_config,确保有AddressFamily inet(只用 IPv4) -
网卡重启后又出现 IPv6 地址:检查
/etc/sysconfig/network-scripts/ifcfg-eth0(RHEL/CentOS)或对应 Netplan YAML(Ubuntu),设IPV6INIT=no;NetworkManager 用户用nmcli connection modify "System eth0" ipv6.method disabled -
某些旧服务启动失败:如 vsftpd 默认启用了
listen_ipv6=YES,需手动关掉
最彻底的方案是加内核参数 ipv6.disable=1 到 GRUB,但这会让 /proc/sys/net/ipv6/ 目录消失,部分依赖该路径的监控脚本或容器运行时会报错——除非你明确需要“从根上移除”,否则不建议新手走这步。

















