看到fe80::/10地址不代表ipv6已启用,需同时满足:内核模块已加载(lsmod | grep ipv6有输出)、sysctl net.ipv6.conf.all.disable_ipv6=0、网络服务正确配置;缺一不可。

ip -6 addr show 看到 fe80::/10 地址,不代表 IPv6 能用。真正启用需要内核模块、sysctl 开关、网络服务三者同时就位。
确认 IPv6 协议栈是否真启用
很多用户误以为看到链路本地地址就是 IPv6 已就绪,其实不是。
-
lsmod | grep ipv6必须有输出(说明内核模块已加载) -
sysctl net.ipv6.conf.all.disable_ipv6输出必须是0(不是1) -
cat /proc/sys/net/ipv6/conf/all/disable_ipv6也得是0 - 如果其中任一为
1,需编辑/etc/sysctl.conf,确保这三行存在且值为0:net.ipv6.conf.all.disable_ipv6 = 0net.ipv6.conf.default.disable_ipv6 = 0net.ipv6.conf.lo.disable_ipv6 = 0
然后运行sysctl -p
临时加 IPv6 地址(重启失效,适合调试)
不用改配置文件,快速验证通路是否走通。
- 添加地址:
sudo ip -6 addr add 2001:db8::100/64 dev eth0 - 加默认路由(注意:IPv6 默认不从 DHCP 获取网关,常需手动加):
sudo ip -6 route add default via fe80::1 dev eth0(若网关是链路本地地址)或sudo ip -6 route add default via 2001:db8::1 dev eth0 - 删错的地址:
sudo ip -6 addr del 2001:db8::100/64 dev eth0 - 检查结果:
ip -6 addr show dev eth0和ip -6 route show
永久配置 IPv6(按发行版区分)
写死在配置文件里,重启后仍有效。关键点是:别只配地址,漏掉 IPV6INIT=yes 或网关会导致静默失败。
-
CentOS/RHEL 7/8(使用 network-scripts):
编辑/etc/sysconfig/network-scripts/ifcfg-eth0,追加:IPV6INIT=yesIPV6ADDR=2001:db8::100/64IPV6_DEFAULTGW=2001:db8::1
保存后执行sudo systemctl restart NetworkManager或sudo systemctl restart network(取决于你用哪个服务) -
Ubuntu/Debian(Netplan):
编辑/etc/netplan/*.yaml,确保包含:network:version: 2renderer: networkdethernets:eth0:addresses: [2001:db8::100/64]gateway6: 2001:db8::1
然后运行sudo netplan apply -
通用替代方案(nmcli):
sudo nmcli connection modify eth0 ipv6.addresses 2001:db8::100/64 ipv6.method manualsudo nmcli connection modify eth0 ipv6.gateway 2001:db8::1sudo nmcli connection up eth0
云服务器特别注意:公网能力需单独开通
即使你成功配出一个全局单播地址(如 240e::/32 段),默认它只有私网通信能力——不能访问外网,也不能被外网访问。
- 阿里云、腾讯云等平台分配的 IPv6 地址,需在控制台为该地址绑定「弹性公网 IPv6」才具备公网能力
- 控制台修改后,云服务器内要触发刷新:
sudo dhclient -6 -r && sudo dhclient -6(仅对支持 DHCPv6 的镜像有效) - 工具配置方式(如
config_ipv6或enable_ipv6)比纯手工更可靠,尤其 CentOS 7.5+ 和 Ubuntu 18.04+ 用户应优先查表选用对应工具
ip -6 route show 确认默认路由是否存在,再查云平台控制台是否勾选了公网出口。











