linux中ip -6 addr仅用于查看或临时增删ipv6地址,真正激活依赖ipv6栈启用、接口up及ra/dhcpv6就绪;生产环境应优先通过slaac或dhcpv6自动获取带生命周期的global地址,避免手动添加导致冲突。

ip -6 addr 是 Linux 系统中管理 IPv6 地址的核心命令,但在双栈环境中,它本身不负责“配置并激活”标准 IPv6 地址,而是用于查看、添加或删除地址——真正的“激活”依赖于网络层的正确启用与上游路由通告(RA)或 DHCPv6 服务是否就绪。直接用 ip -6 addr add 手动添加地址虽能生效,但通常不符合生产环境规范,也容易被覆盖或失效。
以下是实际可行、符合标准运维逻辑的操作路径:
✅ 确保 IPv6 协议栈已启用
系统默认可能禁用 IPv6 转发或接口 IPv6 功能:
# 全局启用 IPv6(若被禁用) sysctl -w net.ipv6.conf.all.disable_ipv6=0 sysctl -w net.ipv6.conf.default.disable_ipv6=0 # 对特定接口(如 eth0)启用 IPv6 sysctl -w net.ipv6.conf.eth0.disable_ipv6=0
⚠️ 注意:这些设置重启后失效,需写入
/etc/sysctl.conf持久化。
✅ 启用接口 IPv6 并等待自动配置
大多数双栈环境(如企业网、云平台)依赖 SLAAC(无状态地址自动配置) 或 DHCPv6(有状态):
- 确保物理/虚拟接口已启用且链路 UP
- 不需手动加地址,只需保证:
- 接口已
up(ip link set eth0 up) -
ipv6 enable已生效(现代内核默认开启) - 路由器发送了合法的 RA(Router Advertisement)报文
- 接口已
此时运行:
ip -6 addr show dev eth0
你会看到类似:
inet6 2001:db8:abcd::1234/64 scope global dynamic noprefixroute inet6 fe80::a00:27ff:fe12:3456/64 scope link
✅ global dynamic 表示该地址已通过 SLAAC 正确获取并激活;fe80::/64 是链路本地地址,始终存在。
✅ 必要时手动添加(仅限测试或特殊场景)
如果 RA/DHCPv6 不可用,且你拥有合法前缀(如 /64),可临时添加:
# 添加全局地址(不推荐长期使用,无生命周期管理) ip -6 addr add 2001:db8:abcd::100/64 dev eth0 # 添加后需确认路由(SLAAC 会自动加,手动加需补) ip -6 route add default via fe80::1 dev eth0 metric 100
⚠️ 手动地址不会随 RA 更新而刷新,也不会自动过期,易与自动配置冲突,生产环境应避免。
✅ 验证是否真正“激活”
光有地址不够,还需确认:
- 能 ping 通本地链路地址:
ping6 fe80::1%eth0(注意%eth0指定出口) - 能收到路由器通告:
rdisc6 eth0或tcpdump -i eth0 icmp6 and ip6[40] == 134 - 有默认路由:
ip -6 route | grep default - DNS 可解析(IPv6 域名):
dig AAAA google.com @2001:4860:4860::8888
不复杂但容易忽略











