ping6.net
最佳实践

IPv6 故障排除:修复常见连接问题

使用此分步指南诊断和修复 IPv6 连接问题。从「无地址」到「工作但慢」,解决实际问题。

ping6.net2024年12月14日3 min read
IPv6故障排除连接网络调试

当 IPv6 中断时,症状各不相同:没有分配地址、可以连接到某些站点但不能连接到其他站点,或者一切都有效但感觉迟缓。本指南介绍系统诊断,从最快的检查到深度网络分析。

TL;DR - 快速摘要

要点:

  • 从三个问题开始:你有地址吗?可以通过 IP 访问吗?可以本地访问吗?
  • 如果只有链路本地地址(无全局地址),检查路由器通告
  • ICMPv6 不得被阻止——它对 IPv6 操作至关重要
  • 使用 traceroute6 查找数据包停止的位置

跳转至: 本地配置 | 常见问题 | 何时联系 ISP

从三个问题开始#

在运行命令之前,缩小问题范围:

  1. **你有 IPv6 地址吗?**如果没有,问题在分配级别(DHCP、SLAAC 或路由器通告)。
  2. **你可以通过地址访问 IPv6 站点但不能通过名称访问吗?**DNS 是罪魁祸首。
  3. **你可以访问链路本地地址但无法访问其他地址吗?**路由或防火墙问题。

这三个问题消除了 80% 的故障排除路径。

检查你的本地配置#

首先验证你的设备有 IPv6 地址并知道其网关。

Linux:

ip -6 addr show
ip -6 route show

macOS:

ifconfig
netstat -nr -f inet6

Windows:

ipconfig
netsh interface ipv6 show route

查找全局单播地址(以 23 开头)。你还应该看到链路本地地址(以 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 的接口已禁用

修复:

  1. 检查路由器已启用 IPv6 并配置了前缀委派
  2. 重启网络接口:sudo ifdown eth0 && sudo ifup eth0(Linux)或切换 WiFi 关闭/打开
  3. 强制 SLAAC:sudo dhclient -6 -r && sudo dhclient -6(Linux)
  4. 在 Windows 上:netsh interface ipv6 reset 并重启

仅链路本地(无默认路由)#

**症状:**有 fe80:: 地址,可以 ping 本地链路,但没有互联网。

原因:

  • 路由器发送没有前缀信息的 RA
  • 防火墙阻止 ICMPv6
  • 静态路由配置错误

修复:

  1. 检查路由器正在委派 /64 前缀(而不仅仅是通告自己)
  2. 确保 ICMPv6 未被阻止:sudo ip6tables -L(Linux)或 Windows 防火墙设置
  3. 手动添加默认路由(临时):sudo ip -6 route add default via fe80::1 dev eth0

有地址但没有连接#

**症状:**分配了全局 IPv6 地址,路由表看起来正确,但无法访问任何东西。

原因:

  • ISP 阻止流量
  • MTU 问题(数据包分片失败)
  • 防火墙丢弃已建立的连接

修复:

  1. 与 ISP 支持热线测试(他们可能需要激活 IPv6)
  2. 降低 MTU:sudo ip link set eth0 mtu 1280(IPv6 最小值)
  3. 检查防火墙规则允许出站 IPv6
  4. 验证你不在剥离 IPv6 的 CGNAT 后面

IPv6 比 IPv4 慢#

**症状:**站点加载,但与 IPv4 相比有明显的延迟。

原因:

  • 隧道开销(6to4、Teredo、6rd)
  • 次优路由(数据包采用长路径)
  • Happy Eyeballs 超时问题

修复:

  1. 如果使用隧道,切换到 ISP 的原生 IPv6
  2. 比较 traceroute 跳:traceroute google.com vs traceroute6 google.com
  3. 如果原生可用,禁用隧道:netsh interface teredo set state disabled(Windows)
  4. 使用我们的 IPv6 Ping 工具测试基线延迟

对某些站点有效,对其他站点无效#

**症状:**可以访问 Google、Cloudflare,但许多站点失败。

原因:

  • 站点有损坏的 IPv6(配置错误的 AAAA 记录)
  • 路径 MTU 发现失败
  • 防火墙阻止特定前缀

修复:

  1. 测试站点是否实际上有 IPv6:dig AAAA example.com 或使用我们的 DNS 查找工具
  2. 如果 AAAA 记录存在但失败,站点的 IPv6 已损坏(不是你的错)
  3. 强制 IPv4:向 /etc/hosts(Linux/macOS)或 C:\Windows\System32\drivers\etc\hosts(Windows)添加条目
  4. 向站点运营商报告(他们可能不知道它已损坏)

何时联系你的 ISP#

如果出现以下情况,请致电你的 ISP:

  • 路由器显示「不支持 IPv6」或「等待前缀委派」
  • 你被分配了一个前缀,但它不可路由(使用外部 ping 测试)
  • Traceroute 显示离开你的网络后立即失败
  • 上述修复都不起作用,你的配置看起来正确

致电前,收集:

  • ip addripconfig 的输出
  • 你分配的 IPv6 前缀
  • ping6 2001:4860:4860::8888 的结果
  • Traceroute 输出显示失败发生的位置

这大大缩短了支持电话时间。

相关文章#

亲自尝试

使用我们的诊断工具验证你的设置:IPv6 PingTracerouteMTR