HTTP 代理可以把请求送达 DNS-over-HTTPS 服务。对于 Google Public DNS 的 JSON 接口,一次显式查询可以是:

curl --fail --proxy http://proxy.example.net:8080 --noproxy "" \
  --get --data-urlencode "name=example.net" \
  --data-urlencode "type=A" \
  https://dns.google/resolve

代理把 HTTPS 连接送达 dns.google。HTTP 代理列表 是在允许使用公共代理访问的前提下,为这次公开查询挑选候选的一个地方。Google 的解析器负责回答 name 参数。这既不是要求代理返回它自己的 DNS 缓存,也不是改动其他应用所使用的 DNS 配置。

要读取 JSON 中的 Status 和返回的记录,而不只是 HTTP 状态。一个成功送达的 HTTP 响应也可能描述一次 DNS 失败。把 type 改成所需的记录类型,例如 AAAA 或 MX;一次 A 查询并不覆盖全部记录类型。

该端点的 JSON 格式是有文档的 Google API。标准的 DoH 线格式客户端改用 DNS 消息和 application/dns-message。普通的 nslookup 调用并不会仅仅因为设置了 HTTPS_PROXY 就获得这两个 HTTP 接口中的任何一个。

相关文章