在数据中心的专用服务器上运行 Debian 13(Trixie),发现 IPv6 完全不通。IPv4 一切正常,但 IPv6 ping 任何地址都是 100% 丢包。本文记录了从现象到根因的完整排查过程,希望能帮到遇到类似问题的朋友。
环境信息
- 操作系统:Debian 13 (Trixie)
- 服务器类型:数据中心专用服务器
- 网络接口:
enp0s17 - IPv4:正常工作
IPv6:完全不通
第一步:排除内核层面禁用
首先确认 IPv6 是否在内核层面被关闭:
sysctl net.ipv6.conf.all.disable_ipv6 sysctl net.ipv6.conf.default.disable_ipv6两项均返回
0,说明内核没有禁用 IPv6,排除。第二步:检查接口地址和路由
CodeBlock Loading...发现接口上已经有通过 SLAAC 自动获取的全局 IPv6 地址和链路本地地址,默认路由也存在,指向网关的链路本地地址。表面上看一切正常。
第三步:测试连通性
CodeBlock Loading...结果:
Destination unreachable: Address unreachable——包发不出去,提示地址不可达。第四步:排查网关可达性
CodeBlock Loading...关键发现:
- ping 网关:
Destination unreachable: Address unreachable 邻居缓存:网关状态为
FAILED这说明 NDP(邻居发现协议)无法解析网关的 MAC 地址。手动使用ndisc6发送邻居请求也超时无响应。第五步:排除防火墙问题
CodeBlock Loading...检查 UFW 的 IPv6 规则,ICMPv6 type 135/136(Neighbor Solicitation / Neighbor Advertisement)均已放行,防火墙配置没有问题。
第六步:检查二层链路
CodeBlock Loading...IPv4 网关可以正常 ping 通,ARP 表中 IPv4 网关的 MAC 地址也是正常的。这排除了物理链路问题。
同时注意到一个重要细节:IPv6 网关的链路本地地址是从 IPv4 网关的 MAC 地址按 EUI-64 规则派生的——说明它们是同一台设备,但该设备不响应 IPv6 的 NDP 请求。
第七步:手动绑定网关 MAC
既然知道了网关的 MAC 地址(从 IPv4 ARP 表获取),可以手动创建静态邻居条目:
CodeBlock Loading...绑定后再次 ping,不再报
Address unreachable,但仍然 100% 丢包。traceroute 显示第一跳就全是*——包到了网关,但网关没有转发。第八步:发现真正的根因——源地址被过滤
数据中心环境下,很多提供商只允许分配给你的特定 IPv6 地址通信。SLAAC 自动生成的地址(从网卡 MAC 派生)并不在允许列表中,会被上游路由器静默丢弃。
通过系统日志找到了关键线索:
CodeBlock Loading...日志中出现了一条 UFW BLOCK 记录:
SRC=2607:xxxx:xx:xx::1 DST=2607:xxxx:xx:xx::47 PROTO=ICMPv6 TYPE=135网关
::1在向::47发送 NDP 请求——这意味着::47是提供商实际分配给这台服务器的 IPv6 地址!第九步:配置正确的地址
CodeBlock Loading...添加后发现地址状态为
dadfailed——DAD(重复地址检测)失败了,因为网关发送的 NDP 探测被误判为地址冲突。解决方法是禁用 DAD:
CodeBlock Loading...测试:
CodeBlock Loading...终于通了!
CodeBlock Loading...第十步:持久化配置
将配置写入
/etc/network/interfaces,确保重启后依然生效:CodeBlock Loading...同时持久化 sysctl 设置:
CodeBlock Loading...问题总结
这次 IPv6 故障涉及三个叠加的问题:
问题 原因 解决方案 NDP 解析失败 网关不响应 IPv6 邻居请求 手动绑定网关 MAC 为静态邻居 源地址被过滤 提供商只允许分配的 IPv6 地址通信,SLAAC 地址被丢弃 使用提供商分配的静态地址 DAD 误判冲突 网关的 NDP 探测触发了重复地址检测失败 禁用 DAD( accept_dad=0)经验与建议
对于数据中心/托管服务器用户:不要依赖 SLAAC 自动配置 IPv6。很多提供商在上游进行源地址过滤,只有分配给你的地址才能通信。务必登录控制面板确认分配的 IPv6 地址,并进行静态配置。
排查技巧:当 SLAAC 获得了地址但无法通信时,检查系统日志中的 NDP 相关记录(ICMPv6 type 135/136)。网关主动发送的 Neighbor Solicitation 目标地址,往往就是分配给你的真实地址。
关于 DAD:在某些网络环境下,DAD 会产生误判。如果你确定地址是正确分配给你的,可以安全地禁用 DAD。
本文基于真实排查过程整理,IP 地址和 MAC 地址等隐私信息已做脱敏处理。