VPS 的 IPv6 地址已经配置,但访问外网超时、邻居表显示 FAILED 或始终为空时,问题不一定在 DNS。IPv6 不使用 ARP,而是依赖 ICMPv6 的邻居发现(ND)和路由器通告(RA)。应先确认地址和默认路由,再检查邻居状态、ICMPv6 过滤和云平台的 IPv6 接入方式;不要一上来反复重启网络服务。
先确认地址、接口和默认路由
把命令中的 eth0 换成实际接口。全局地址应带有 scope global,链路本地地址通常是 fe80::/10,它本身不能代替公网前缀。
ip -6 addr show dev eth0
ip -6 route show
ip -6 route get 2001:4860:4860::8888重点看三项:地址是否处于 tentative 或 dadfailed,路由表是否有 default via ... dev eth0,以及 route get 是否选中了预期接口。只有地址没有默认路由时,邻居发现即使正常也无法把流量送出。
读取邻居表,区分状态含义
ip -6 neigh show dev eth0
ip -6 neigh flush dev eth0
ping -6 -c 3 -I eth0 2001:db8::1- REACHABLE、STALE:内核已学到邻居链路层信息,STALE 不代表故障,实际发送时会重新确认。
- INCOMPLETE、FAILED:邻居解析没有收到有效的邻居通告,常见原因是网关地址、接口、VLAN 或 ICMPv6 被拦截。
- 表完全为空:可能尚未产生需要解析的下一跳,也可能默认路由没有下一跳、上游使用静态路由而不响应预期的 ND。
清空邻居表只适合做一次验证,不能当成长期修复。清空后重新访问下一跳,观察状态是否从 INCOMPLETE 变为 REACHABLE 或 STALE。
检查 RA、ND 与 ICMPv6 防火墙规则
IPv6 邻居发现依赖 ICMPv6 多种报文,不能用“只允许 ping”代替完整规则。至少核对安全组、VPS 控制台防火墙和系统防火墙是否允许必要的邻居请求、邻居通告、路由器请求和路由器通告。Linux 上先查看规则命中情况:
nft list ruleset
ip6tables -L -n -v
sysctl net.ipv6.conf.all.accept_ra
sysctl net.ipv6.conf.eth0.accept_ra作为客户端的 VPS 通常需要接收 RA;但启用转发或使用特定路由方案时,内核对 RA 的处理又可能不同。不要直接把 accept_ra 改成某个值就结束排查,应结合系统角色、云平台文档和现有网络管理工具确认。修改前保存原值,避免远程操作把自己锁在服务器外。
用抓包确认报文是否到达
当地址和路由看起来正确,抓包比猜测更快。选择实际接口,短时间运行后立即停止:
tcpdump -ni eth0 'icmp6 and (ip6[40] == 133 or ip6[40] == 134 or ip6[40] == 135 or ip6[40] == 136)'类型 133/134 分别是路由器请求和通告,135/136 是邻居请求和通告。只看到请求、看不到对应通告,说明上游没有回应或回包在安全组/系统防火墙处被丢弃;如果报文双向都有而邻居仍失败,则继续检查地址前缀、网关格式、重复地址检测和网络管理服务是否互相覆盖配置。
确认云平台的 IPv6 交付模型
不同 VPS 的 IPv6 可能是自动 RA、静态网关、路由前缀或虚拟网络接口分配。常见误区包括:把控制台显示的网关当成同一网段地址、把完整前缀误配置成主机地址、在不支持二层多播的网络中期待传统 ND,或同时运行 cloud-init、NetworkManager 和手写脚本导致配置被覆盖。
应以服务商当前控制台信息为准,记录分配的前缀、主机地址、网关形式、接口名和重启后的持久化方式。若平台明确要求静态默认路由,就按其示例配置;若平台要求 RA,则不要用手写网关替换自动发现。无法确认交付模型时,先向服务商索取 IPv6 接入方式和允许的 ICMPv6 范围,而不是盲目关闭防火墙。
修改后的验证顺序
- 重新读取
ip -6 addr和ip -6 route,确认地址不再是tentative,默认路由指向正确接口。 - 清理一次邻居表,访问明确的下一跳或 IPv6 测试地址,观察
ip -6 neigh状态。 - 先用 IPv6 字面地址测试,再测试 DNS;这样能把解析问题与 ND 问题分开。
- 分别验证重启前后配置,确认网络管理服务没有覆盖手工修改。
- 恢复最小必要的 ICMPv6 放行规则,并记录变更时间和回滚值。
常见问题
VPS 有 IPv6 地址,为什么邻居表还是 FAILED?
地址存在不代表下一跳可达。优先检查默认路由、网关形式、ICMPv6 规则和平台是否支持所需的 ND 方式。
可以直接关闭 IPv6 防火墙测试吗?
不建议长期关闭。若必须做短时隔离测试,应限定维护窗口、保存原规则并从控制台准备回滚路径,确认问题后恢复最小放行范围。
只允许 ICMPv6 Echo 就够了吗?
不够。邻居发现和路由器发现使用其他 ICMPv6 类型,单独放行 Echo 仍可能导致地址可见但下一跳解析失败。
重启后 IPv6 又失效怎么办?
检查 cloud-init、NetworkManager、systemd-networkd 及发行版网络配置的实际生效来源,保留一份持久化配置并避免多个组件同时管理同一接口。






