首页/网络/IP 与子网速查/双栈部署:A/AAAA 并存与 Happy Eyeballs
IPv6 与下一代网络42 条

双栈部署:A/AAAA 并存与 Happy Eyeballs

双栈=同一主机/服务同时跑 IPv4 与 IPv6:DNS 同时有 A 与 AAAA 记录,客户端按 RFC 6724 优先 IPv6;为避免“IPv6 不通时卡首连”,浏览器用 Happy Eyeballs(RFC 8305)并行探测快速回退。

IP 与子网速查网络更新于 2026-10-13

双栈是什么

双栈指同一台主机、同一个服务同时具备 IPv4 与 IPv6 能力:DNS 里同时有 A 与 AAAA 记录,服务监听双栈套接字,客户端按 RFC 6724 的地址选择规则优先尝试 IPv6。风险在于 IPv6 还不完善时用户会卡在首连超时上,因此浏览器普遍实现了 Happy Eyeballs,用并行探测与短超时快速回退到 IPv4。

基本信息

DNS 记录A 与 AAAA 需要同时存在,缺一方即放弃那部分用户
服务监听Linux 上监听 [::] 通常同时覆盖 IPv4 与 IPv6
地址选择RFC 6724 规定默认优先 IPv6 与同前缀地址
回退机制RFC 8305 Happy Eyeballs,并行发起并采用先成功者
常见坑只有 AAAA 却无可用 IPv6 路径,首连延迟明显上升
迁移顺序先保证 IPv6 端到端可达,再发布 AAAA 记录

检查清单

检查清单
dig +short AAAA example.com     # 确认 AAAA 是否发布
dig +short A example.com        # 确认 A 记录仍在
ss -lntp | grep -E '0.0.0.0|\[::\]'   # 确认监听面覆盖两种协议
curl -6 -sS -o /dev/null -w '%{http_code}\n' https://example.com   # 强制走 IPv6 验证
curl -4 -sS -o /dev/null -w '%{http_code}\n' https://example.com   # 强制走 IPv4 对照

典型使用场景

  • 网站开启 IPv6 前先在测试环境验证 AAAA 可达性,避免上线后部分用户首连变慢
  • 纯 IPv6 内网服务对公网发布时,用双栈反向代理转换协议,不给后端增加复杂度
  • 排查“某些网络打不开网站”:可能是 AAAA 已发布但该网络 IPv6 出口存在黑洞
  • 移动应用接入双栈后统计首包时延,用数据判断是否需要调整 AAAA 发布策略
  • 容器与云环境核对安全组,IPv6 规则常常独立于 IPv4 单独配置,容易漏放行
只发布 AAAA 而 IPv6 路径不可用,比完全不支持 IPv6 更糟:用户要等首连超时后才回退到 IPv4,体验明显下降。不确定时先不发布 AAAA。
服务端只监听 0.0.0.0 时 IPv6 用户连不上;监听 [::] 在 Linux 默认开启双栈映射,可同时服务两类客户端,这是最省事的配置。
防火墙与安全组要分别核对:不少云平台的 IPv6 规则是独立列表,只放行了 IPv4 的 443,IPv6 侧仍然全封,表现为“v4 能开、v6 超时”。

易错点

  • 把 AAAA 当成“越早发布越好”:路径未打通就发布,用户首连超时,等于给部分用户降速
  • 应用里硬编码 IPv4 字面量:双栈环境下绕过 DNS 直接连 v4,IPv6 能力形同虚设
  • 只验证 ping6 通不通:ICMPv6 放行不等于 TCP 端口可达,需用 curl 或 nc 验证真实业务端口
  • 忽略客户端地址选择的隐私扩展影响:源地址会轮换,按地址做的访问控制与审计需要按前缀而非 /128 设计

数据来源与参考

  • RFC 4213(双栈与隧道基础)
  • RFC 6724(默认地址选择)
  • RFC 8305(Happy Eyeballs v2)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌