IPv6¶
一、disable¶
0) 先确认当前状态¶
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
# 0 = 启用, 1 = 禁用
ip -6 addr
lsmod | grep ipv6
1) 推荐:用 sysctl 禁用(最通用、最干净)¶
A. 立即生效(临时)¶
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
可再加一条让路由也别尝试:
sudo sysctl -w net.ipv6.conf.all.accept_ra=0
sudo sysctl -w net.ipv6.conf.all.autoconf=0
B. 写入配置(重启仍生效)¶
创建 /etc/sysctl.d/99-disable-ipv6.conf:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
应用:
sudo sysctl --system
缺点:
lo(localhost)上的::1会消失;个别程序若 硬编码 localhost=::1 可能会报错(通常改/etc/hosts即可)。
2) 更“彻底”:GRUB / kernel boot 参数(适合服务器/云镜像)¶
编辑 grub 配置(按发行版二选一):
- Debian/Ubuntu:
/etc/default/grub - RHEL/Rocky/Alma/CentOS 7+:
/etc/default/grub
在 GRUB_CMDLINE_LINUX里追加:
ipv6.disable=1
例如变成类似:
GRUB_CMDLINE_LINUX="... ipv6.disable=1"
然后更新 grub 并重启:
# Debian/Ubuntu
sudo update-grub
# RHEL/Rocky/Alma(UEFI 常见于 /boot/efi/EFI/…)
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# 或
sudo grub2-mkconfig -o /boot/efi/EFI/$(ls /boot/efi/EFI)/grub.cfg
重启后验证:
lsmod | grep ipv6 # 通常看不到;ip -6 addr 几乎为空
ipv6.disable=1会把 IPv6 模块都禁掉,比 sysctl 更强;但某些云/容器环境不一定喜欢。
3) 如果你用的是 NetworkManager(桌面/很多服务器也会装)¶
NetworkManager 有时会“顶着 sysctl”再打开 IPv6,建议顺手关掉:
# 对所有连接(示例:先用 nmcli c 看名字)
nmcli c show
# 假设连接叫 eth0 / Wired\ connection\ 1
nmcli c modify "Wired connection 1" ipv6.method ignore
nmcli c up "Wired connection 1"
# 或者 system-wide 禁止自动建 IPv6 地址(不保证 100%干掉)
nmcli c modify "Wired connection 1" ipv6.addr-gen-mode stable-privacy
4)常见坑:localhost / ::1 相关报错¶
如果 lo的 IPv6 被禁用后,有服务启动失败/报 cannot bind ::1 80:
- 检查
/etc/hosts,确保至少保留:
127.0.0.1 localhost
必要时把 ::1 localhost那一行注释掉(不推荐长期,但能救急)。
- 有些服务配置里显式写了监听
::,改成0.0.0.0或127.0.0.1。