IPv6 故障排除:修复常见连接问题
使用此分步指南诊断和修复 IPv6 连接问题。从「无地址」到「工作但慢」,解决实际问题。
当 IPv6 中断时,症状各不相同:没有分配地址、可以连接到某些站点但不能连接到其他站点,或者一切都有效但感觉迟缓。本指南介绍系统诊断,从最快的检查到深度网络分析。
从三个问题开始#
在运行命令之前,缩小问题范围:
- **你有 IPv6 地址吗?**如果没有,问题在分配级别(DHCP、SLAAC 或路由器通告)。
- **你可以通过地址访问 IPv6 站点但不能通过名称访问吗?**DNS 是罪魁祸首。
- **你可以访问链路本地地址但无法访问其他地址吗?**路由或防火墙问题。
这三个问题消除了 80% 的故障排除路径。
检查你的本地配置#
首先验证你的设备有 IPv6 地址并知道其网关。
Linux:
ip -6 addr show
ip -6 route showmacOS:
ifconfig
netstat -nr -f inet6Windows:
ipconfig
netsh interface ipv6 show route查找全局单播地址(以 2 或 3 开头)。你还应该看到链路本地地址(以 fe80:: 开头)。如果你只有链路本地,你的主机没有收到正确的 IPv6 前缀。
验证路由器通告#
大多数 IPv6 网络使用 SLAAC(无状态地址自动配置),路由器广播它们的存在和网络前缀。如果你的设备没有全局地址,路由器通告可能没有到达你。
检查 RA 接收(Linux):
sudo rdisc6 eth0检查 RA 接收(macOS/Windows): 使用 Wireshark 或 tcpdump 捕获 ICMPv6 类型 134(路由器通告)数据包:
sudo tcpdump -i en0 'icmp6 and ip6[40] == 134'如果 30 秒后看不到 RA,要么你的路由器没有通告,要么有东西在过滤它们。首先检查你的路由器的 IPv6 设置。
测试链路本地连接#
链路本地地址在没有任何路由器配置的情况下工作。如果这些失败,你有第 2 层问题。
找到你的网关的链路本地地址:
# Linux
ip -6 route show default
# macOS/Windows
# 使用路由表中显示的网关使用指定的接口 ping 它:
# Linux
ping6 -c 4 fe80::1%eth0
# macOS
ping6 -c 4 fe80::1%en0
# Windows
ping -6 fe80::1%12将 fe80::1 替换为你的实际网关地址,将 eth0/en0/12 替换为你的接口名称/编号。如果这失败,请检查电缆、交换机和 WiFi 连接。
测试互联网连接#
使用已知良好的 IPv6 地址完全绕过 DNS。
# Cloudflare DNS
ping6 2606:4700:4700::1111
# Google DNS
ping6 2001:4860:4860::8888
# ping6.net
ping6 2a07:8dc0:18:0:78:47ff:fe6e:da5a如果这些工作,你的 IPv6 栈是功能性的,DNS 是问题(跳过)。如果它们失败,测试问题是本地还是上游。
检查 DNS 解析#
许多「IPv6 不工作」报告实际上是 DNS 问题。你的设备可能有连接但无法解析 AAAA 记录。
测试 AAAA 记录查找:
# 使用系统解析器
nslookup -type=AAAA google.com
# 使用特定 DNS 服务器
dig @2001:4860:4860::8888 AAAA google.com
# Windows
nslookup -type=AAAA google.com 2001:4860:4860::8888如果 AAAA 查询失败但 A 查询(IPv4)成功,你的 DNS 服务器可能没有 IPv6 连接或未配置为处理 AAAA 记录。尝试更改为 Cloudflare(2606:4700:4700::1111)或 Google(2001:4860:4860::8888)DNS 服务器。
验证 DNS 服务器可通过 IPv6 访问:
ping6 2606:4700:4700::1111如果无法访问,要么配置支持 IPv6 的 DNS 服务器,要么你的网络正在阻止到它的出站连接。
分析路径#
当你可以 ping 某些目的地但不能 ping 其他目的地时,使用 traceroute 查找数据包停止的位置。
# Linux/macOS
traceroute6 google.com
# Windows
tracert -6 google.com查找:
- **跳 1-2 的超时:**本地网络问题(网关、防火墙)
- **几跳后超时:**ISP 路由问题
- **非对称路由或循环:**BGP 配置错误(联系 ISP)
你还可以使用我们的 Traceroute 工具查看逐跳延迟并识别数据包被丢弃的位置。
常见问题和修复#
未分配 IPv6 地址#
**症状:**仅显示 fe80:: 链路本地地址。
原因:
- 路由器未发送 RA
- DHCPv6 服务器无法访问
- IPv6 的接口已禁用
修复:
- 检查路由器已启用 IPv6 并配置了前缀委派
- 重启网络接口:
sudo ifdown eth0 && sudo ifup eth0(Linux)或切换 WiFi 关闭/打开 - 强制 SLAAC:
sudo dhclient -6 -r && sudo dhclient -6(Linux) - 在 Windows 上:
netsh interface ipv6 reset并重启
仅链路本地(无默认路由)#
**症状:**有 fe80:: 地址,可以 ping 本地链路,但没有互联网。
原因:
- 路由器发送没有前缀信息的 RA
- 防火墙阻止 ICMPv6
- 静态路由配置错误
修复:
- 检查路由器正在委派 /64 前缀(而不仅仅是通告自己)
- 确保 ICMPv6 未被阻止:
sudo ip6tables -L(Linux)或 Windows 防火墙设置 - 手动添加默认路由(临时):
sudo ip -6 route add default via fe80::1 dev eth0
有地址但没有连接#
**症状:**分配了全局 IPv6 地址,路由表看起来正确,但无法访问任何东西。
原因:
- ISP 阻止流量
- MTU 问题(数据包分片失败)
- 防火墙丢弃已建立的连接
修复:
- 与 ISP 支持热线测试(他们可能需要激活 IPv6)
- 降低 MTU:
sudo ip link set eth0 mtu 1280(IPv6 最小值) - 检查防火墙规则允许出站 IPv6
- 验证你不在剥离 IPv6 的 CGNAT 后面
IPv6 比 IPv4 慢#
**症状:**站点加载,但与 IPv4 相比有明显的延迟。
原因:
- 隧道开销(6to4、Teredo、6rd)
- 次优路由(数据包采用长路径)
- Happy Eyeballs 超时问题
修复:
- 如果使用隧道,切换到 ISP 的原生 IPv6
- 比较 traceroute 跳:
traceroute google.comvstraceroute6 google.com - 如果原生可用,禁用隧道:
netsh interface teredo set state disabled(Windows) - 使用我们的 IPv6 Ping 工具测试基线延迟
对某些站点有效,对其他站点无效#
**症状:**可以访问 Google、Cloudflare,但许多站点失败。
原因:
- 站点有损坏的 IPv6(配置错误的 AAAA 记录)
- 路径 MTU 发现失败
- 防火墙阻止特定前缀
修复:
- 测试站点是否实际上有 IPv6:
dig AAAA example.com或使用我们的 DNS 查找工具 - 如果 AAAA 记录存在但失败,站点的 IPv6 已损坏(不是你的错)
- 强制 IPv4:向
/etc/hosts(Linux/macOS)或C:\Windows\System32\drivers\etc\hosts(Windows)添加条目 - 向站点运营商报告(他们可能不知道它已损坏)
何时联系你的 ISP#
如果出现以下情况,请致电你的 ISP:
- 路由器显示「不支持 IPv6」或「等待前缀委派」
- 你被分配了一个前缀,但它不可路由(使用外部 ping 测试)
- Traceroute 显示离开你的网络后立即失败
- 上述修复都不起作用,你的配置看起来正确
致电前,收集:
ip addr或ipconfig的输出- 你分配的 IPv6 前缀
ping6 2001:4860:4860::8888的结果- Traceroute 输出显示失败发生的位置
这大大缩短了支持电话时间。
相关文章#
- 如何在 Windows、macOS、Linux 和路由器上启用 IPv6 - 了解如何正确配置 IPv6 以避免常见问题。
- IPv6 安全:威胁、缓解措施和最佳实践 - 确保你的 IPv6 网络安全配置并防止漏洞。
亲自尝试
使用我们的诊断工具验证你的设置:IPv6 Ping、Traceroute 和 MTR。