同一个业务域名同时返回A与AAAA记录,Windows浏览器访问却比正常状态多等约6秒,Linux终端甚至一直停在Connecting阶段。表面上,这是“双栈站点不可用”;实际上,也可能是IPv6数据到达服务器后被防火墙丢弃,客户端完成失败地址回退才重新连接IPv4。若只反复刷新或更换浏览器,很容易把服务器配置问题误判成运营商链路故障。
如果你正在选机器,或者想先把线路和配置跑通再谈长期方案,可以先看看这几家的线路说明和技术参数:alphavps(海外服务器),先看清带宽线路、流量策略和退款条款,再决定要不要迁。
DNS返回的A记录代表IPv4地址,AAAA记录代表IPv6地址。客户端拿到两组结果后,并不会简单按记录顺序串行连接。常见实现会执行地址族竞速:优先启动首选地址族的TCP连接,同时在数百毫秒后尝试另一地址族,谁先完成连接建立时序就使用谁。操作系统、运行库和浏览器的策略并不完全一致,因此同一故障在curl、浏览器与业务程序中可能出现不同耗时。

问题常被放大在AAAA地址“可解析但不可达”的环境中。若IPv6数据包在最后一跳被静默丢弃,没有ICMP拒绝报文,客户端可能一直等待TCP重传;若IPv6立即返回“网络不可达”,回退反而会很快。另一种情况是NAT64:运营商DNS64把A记录合成为AAAA地址,客户端看到的是IPv6目标,实际仍需经过运营商的IPv4出口。NAT64路径验证因此必须区分“有AAAA记录”与“存在原生IPv6链路”。
还要留意IPv4映射地址、临时地址变化和DNS轮询。多条AAAA可能对应不同接入节点,不能仅凭一次ping判断整站状态;ping被限速或禁答,也不能证明TCP端口不可达。
第一步固定变量,分别使用curl -4 -v --connect-timeout 6 URL与curl -6 -v --connect-timeout 6 URL测试。若IPv4快速成功、IPv6稳定超时,再用dig A 域名和dig AAAA 域名核对地址来源,并检查结果是否属于NAT64合成地址。测试时应绕过代理、负载均衡与缓存,避免上游环境掩盖本机路径差异。

第二步判断服务器配置。在服务器上执行ss -lntp,确认Web进程是否监听IPv6地址或通配地址;随后检查IPv6防火墙、主机策略及TLS配置。即使监听正常,错误的路由、源地址过滤或只允许固定来源网段,也会形成“握手前超时”。在服务器端同时抓取IPv4与IPv6的入站TCP包,是确认数据包有没有真正到达主机的关键动作。
第三步检查中间链路。对AAAA地址使用traceroute -6或mtr -6观察路径,在客户端和服务器端抓包比较SYN、重传及响应。链路中途丢包与服务器主动拒绝的抓包特征不同:前者通常只有客户端重传,后者能看到服务器返回的RST。排查移动网络、无线接入或云环境时,还应使用双栈可用性探测记录每个地址族的连接耗时,而不是只记录HTTP结果。
最后再验证NAT64。确认本地没有原生IPv6路由时,检查合成地址前缀、运营商DNS64和IPv4出口状态,并从同一网络连续测试多轮。涉及公网暴露或节点巡检时,可借助“随身服务器”从另一网络建立IPv4、IPv6对照连接,以排除本地宽带的偶然故障。每次只改变地址族、路径或监听配置,并保存命令、时间戳和抓包文件,才能得到可复现的结论。
双栈客户端拿到 A/AAAA 后,通常不会同时建立两条连接,而是按地址族竞速以短暂错峰启动 IPv6 与 IPv4。这个错峰间隔必须大于本地 IPv6 路径的常见 SYN 丢失窗口,否则“IPv6 优先”只是在放大首包被丢弃的概率。排查时应把连接建立时序拆成 DNS 查询、路由选择、SYN/SYN-ACK、TCP 建连和 TLS 握手;若应用总超时小于 TCP 重传预算,客户端即使具备回退能力,也可能来不及尝试下一地址。
所谓失败地址回退也不是捕获任何异常就重试。DNS 无结果属于解析问题,没有可回退地址;明确的“网络不可达”可立即换族;连接被拒绝说明目标已经响应,不能据此认定地址族失效;一旦 TCP 已建立或 TLS 数据已交换,盲目换族可能绕过证书校验、代理策略或服务端语义。更稳妥的做法是仅对建连前的临时失败回退,并短暂缓存失败结果,避免每个请求都重复走坏路径。负缓存需要设置短过期时间,接口变化、路由更新或 VPN 切换后应立即失效。

1. 核对解析:使用 dig A 域名、dig AAAA 域名并更换递归服务器交叉验证,确认是否返回 NAT64 合成地址。2. 分开测路径:用 curl -4、curl -6访问同一域名,并通过 ip route get、ip -6 route get检查选路;ping 只能说明 ICMP 可达,不能证明 TCP 端口可用。3. 验证 NAT64:核对合成地址是否位于运营商前缀内,确认 DNS64 和 NAT64 网关可达,再用 openssl s_client -connect [地址]:443 -servername 域名排除地址可达但虚拟主机不匹配。
4. 抓取建立过程:在客户端抓包,记录每次尝试的地址族、目标地址、源地址及耗时,定位问题发生在 IPv6 路由、NAT64 转发,还是 TCP/TLS 阶段。5. 开展双栈可用性探测:分别记录“解析成功”和“连接成功”,区分 IPv4、IPv6、NAT64 三条路径;探测必须错峰、限频并缓存,不能因一次 IPv6 失败就永久禁用 IPv6。
最终应把 DNS、路由、TCP 和 TLS 分层设监控:只有当 IPv6 路径在多个目标上持续失败、IPv4 路径稳定成功时,才考虑临时降级。这样既保留双栈优先与快速恢复能力,也能避免把偶发丢包误判为地址族不可用。