如何测试代理链路中的 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 源站身份。不要使用生产主机,避免失败实验影响真实流量。
建立链路矩阵
使用同一客户端构建测试:
- 直连对照;
- 使用域名 authority 的 HTTP CONNECT;
- 已验证本地解析的 SOCKS;
- 已验证远程解析的 SOCKS;
- 相同代理产品与会话策略下的各目标地区。
保持 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、绕过限制或把实验流量导向无权使用的基础设施。