如何测试代理链路中的 DNS HTTPS 与 SVCB 记录

现代连接建立过程可能不只使用 A 和 AAAA 记录。DNS HTTPS 与 SVCB 记录可以公布备选端点、应用协议、端口和地址提示。代理请求表面正常时,客户端与代理链路仍可能做出不同的服务发现决策。

全球互联网线路经过代理与解析器节点,并由大型检查透镜验证多个备选服务端点

本指南提供一套用于已授权代理评估的可复现方法。并非所有客户端都实现 HTTPS 或 SVCB;除非书面需求明确要求,否则缺少支持不应自动判定为缺陷。

公开来源说明:RFC Editor,RFC 9460《Service Binding and Parameter Specification via the DNS》,2023 年 11 月;另参考 IETF 2026 年 7 月互联网草案《HTTP Header Fields for Proxying DNS SVCB Information》。互联网草案仍在演进,不能当作正式标准。

先确定谁负责解析

测试前明确由哪个组件解析源站、哪个组件选择备选端点:

链路常见解析责任方必须观察的证据
客户端直连本地客户端与配置的解析器查询类型、目标、端口和 ALPN
HTTP CONNECT通常由代理解析 CONNECT authority,但客户端实现可能不同发送给代理的 authority、代理侧解析证据、最终 TLS 端点
SOCKS 本地 DNS客户端解析后发送地址本地 HTTPS/SVCB 行为和选中地址
SOCKS 远程 DNS代理侧解析器接收域名远端记录支持、端点选择和回退
浏览器自动化浏览器、操作系统、安全 DNS 策略和代理栈可能分担浏览器网络日志、解析器与代理证据

不要根据产品名称猜测责任方。命令行参数、浏览器策略、库版本、PAC 规则或容器解析器都可能改变路径。

建立已授权测试域

使用自有域名和端点。发布包含两个 ServiceMode 选择和安全默认回退的 HTTPS 或 SVCB 记录。每个端点返回相同无害测试对象,并带不同端点标记。

保存完整配置:

fixture_revision
owner_name
record_type
ttl
priority
target_name
svc_params
address_records
certificate_names
endpoint_marker
published_at_utc

证书必须对原始源站名称有效;备选端点不会改变 HTTPS 源站身份。不要使用生产主机,避免失败实验影响真实流量。

建立链路矩阵

使用同一客户端构建测试:

  1. 直连对照;
  2. 使用域名 authority 的 HTTP CONNECT;
  3. 已验证本地解析的 SOCKS;
  4. 已验证远程解析的 SOCKS;
  5. 相同代理产品与会话策略下的各目标地区。

保持 URL、方法、请求头、浏览器配置、账号状态、时间窗口和重试预算不变。请求头完整性测试可排除请求画像变化造成的内容差异。

每次记录观察时间、链路类型、出口地区、解析器身份、查询类型、答案摘要、TTL、选中目标与端口、提供和协商的 ALPN、连接地址摘要、证书结果、HTTP 状态、端点标记、回退原因及耗时。

不需要原始地址时只保存摘要。不得记录代理凭据、授权头、Cookie、令牌或个人数据。

执行四个受控阶段

1. 无服务绑定答案的基线

确认所有链路可通过普通地址记录到达默认 authority,证明后续故障来自发现行为,而不是基础认证、路由或 TLS。

2. 发布兼容答案

增加一个受支持备选端点,等待文档化 TTL 边界后复测。支持该机制的客户端应按算法选择公布端点;不支持的客户端应安全使用默认端点。

3. 加入不支持的 mandatory 参数

在受控区域发布一条包含客户端不支持 mandatory 参数的记录。客户端应忽略整条不兼容记录,而不是部分应用。验证回退并保存原因。

4. 调整优先级并让旧答案过期

将首选服务切换到第二端点,在 TTL 到期前后分别测试,以区分正常 DNS 缓存、卡住的解析器与从不刷新的代理路径。相邻故障恢复可参考负面 DNS 缓存恢复指南

不只验证 DNS 答案

正确答案并不保证最终连接正确。还要确认:

  • 目标和端口来自可用的 ServiceMode 记录;
  • 协商 ALPN 确实受端点支持;
  • TLS 对原始源站名验证成功;
  • 端点标记与选中目标一致;
  • 回退不会静默改变地区或账号上下文;
  • 重定向及应用内容仍有效。

若链路协商了不同协议,应单独执行TLS 会话恢复测试,不要把发现兼容性与连接复用性能混成一个分数。

精确分类

  • 支持且已选择: 使用兼容记录且连接验证通过;
  • 支持但发生回退: 理解记录,备选失败,文档化回退成功;
  • 安全忽略: 客户端不支持或记录不兼容,默认路径成功;
  • 选择陈旧: 超出允许缓存窗口仍使用旧端点;
  • 参数丢失: 看到了答案,但没有应用必需目标、端口或协议;
  • 身份失败: 备选连接不能验证原始源站身份;
  • 链路不一致: 直连与代理使用不同解析责任方或策略;
  • 无法判断: DNS、代理、TLS 或端点证据不足。

不同不等于故障。远程解析器可能合理获得不同地区答案,应按需求和端点标记判断。

常见误区

  • 只看 A/AAAA: 无法证明客户端是否处理 HTTPS/SVCB 参数。
  • 认为 CONNECT 必然等于远程 DNS: 浏览器和库的发现行为不同,必须观察最终端点。
  • 用公共域名测试: 未知 CDN 变化无法与代理不兼容区分。
  • 把地址提示当成权威地址: 提示用于加速,不能替代协议规定的解析与验证。
  • 每次都清空缓存: 会掩盖真实 TTL 行为;应分别标记冷启动和热缓存阶段。

验收清单

  • 每条链路的解析责任方均已记录。
  • 测试域具有有效证书与无害端点标记。
  • 直连、CONNECT、SOCKS 本地 DNS 和远程 DNS 分开测试。
  • 保存查询类型、答案摘要、TTL、目标、端口、ALPN、TLS 与回退结果。
  • 兼容记录按需求工作或回退。
  • 不支持的 mandatory 参数被安全忽略。
  • 旧选择在允许缓存窗口内消失。
  • 地区差异得到解释而非被平均掩盖。
  • 凭据、Cookie、令牌、用户数据和不必要地址已脱敏。

常见问题

每种住宅代理都必须支持 HTTPS 与 SVCB 吗?

不必。需求取决于哪个组件负责 DNS 和服务选择,应测试完整的客户端—解析器—代理路径。

不同 ALPN 是否证明代理改变了 DNS?

不能。客户端能力、端点可用性、TLS 策略和回退都可能影响协商。

可以用第三方生产网站测试吗?

不建议。使用已授权测试域才能控制记录版本、端点标记、证书和故障阶段。

可以把互联网草案视为最终标准吗?

不能。草案可能变化或失效,只应用于跟踪新实现;规范性预期应基于已发布标准和产品文档。

合规说明

只测试你获准使用的域名、解析器、代理账号、端点和地区。遵守合同、访问控制、隐私要求、DNS 与 HTTP 速率限制及供应商规则。不得篡改第三方 DNS、绕过限制或把实验流量导向无权使用的基础设施。