【问题标题】:Client cannot resolve my DoH server response客户端无法解析我的 DoH 服务器响应
【发布时间】:2021-10-21 02:10:46
【问题描述】:

我正在制作一个自定义 DoH 服务器,它应该以不同方式解析某些 TLD。我正在使用 NodeJS 来实现它。对于大多数域,它只是将它们代理到 Google 的 DoH 并且它可以工作。但是当我尝试解析一些自定义域时,例如

mydomain.customtld

我希望它指向

bafybeie5nqv6kd3qnfjupgvz34woh3oksc3iau6abmyajn7qvtf6d2ho34.ipfs.dweb.link

我尝试自己格式化 DNS 响应,但失败了。 因此,我求助于通过 Google DoH 或其他 DoH 服务器解析上述链接(即 bafybeie5nqv6kd3qnfjupgvz34woh3oksc3iau6abmyajn7qvtf6d2ho34.ipfs.dweb.link)并将其作为响应转发给客户端。

所以,我做了以下事情:

  • 我使用 dohjs nodejs 库
  • 我这样解决提到的链接:
const doh = require('dohjs');
const resolver = new doh.DohResolver('https://dns.google/dns-query');

let dnsAnswer = await resolver.query(`bafybeie5nqv6kd3qnfjupgvz34woh3oksc3iau6abmyajn7qvtf6d2ho34.ipfs.dweb.link`, 'A');

我得到以下回复:

{
  id: 0,
  type: 'response',
  flags: 384,
  flag_qr: true,
  opcode: 'QUERY',
  flag_aa: false,
  flag_tc: false,
  flag_rd: true,
  flag_ra: true,
  flag_z: false,
  flag_ad: false,
  flag_cd: false,
  rcode: 'NOERROR',
  questions: [
    {
      name: 'bafybeie5nqv6kd3qnfjupgvz34woh3oksc3iau6abmyajn7qvtf6d2ho34.ipfs.dweb.link',
      type: 'A',
      class: 'IN'
    }
  ],
  answers: [
    {
      name: 'bafybeie5nqv6kd3qnfjupgvz34woh3oksc3iau6abmyajn7qvtf6d2ho34.ipfs.dweb.link',
      type: 'A',
      ttl: 59,
      class: 'IN',
      flush: false,
      data: '209.94.90.1'
    }
  ],
  authorities: [],
  additionals: []
}

这似乎是一个有效的 DNS 数据包,但在对其进行编码并将其转发到客户端(本例中为 Chrome)后,它无法解析它。

我唯一能想到的是响应缺少附加信息,但我不确定...我得到的具体错误是 DNS_PROBE_FINISHED_NXDOMAIN。

那么,我该如何解决呢?

【问题讨论】:

  • “我尝试自己格式化 DNS 响应,但失败了。” +“这似乎是一个有效的 DNS 数据包”不,不是,因为您显示了一些 JSON 值。 DOH 默认不使用 JSON,交换的仍然是 DNS 消息,因为它们发生在端口 53 上的核心 DNS 协议的线路上。要进一步了解,您需要显示 1) 准备回复的特定代码和 2 ) 您执行的特定测试,例如使用 dig 测试您的端点。
  • “我唯一能想到的就是响应缺少附加内容” 这肯定不是您的问题所在。正如该部分的名称所说,这只是为了帮助解析器采取一些捷径,但因此不需要/不是答案的一部分(否则它将在 ANSWER 部分中),因此它们的缺席永远不会触发错误。

标签: node.js dns doh dns-over-https


【解决方案1】:

所以,事实证明,我的 DNS 响应数据包是有效的。问题是浏览器 URL 栏中的 URL 与 DNS 数据包的问答部分中返回的 URL 不同,这给浏览器带来了问题。这可能是出于安全考虑,但是当我在答案和问题部分更改名称时,我的 DNS 数据包被浏览器接受了。这个问题肯定是错误的并且不合时宜,但我会保留它,因为这个答案可能会帮助在编写自定义 DoH 以供浏览器使用时遇到同样问题的人。

干杯并感谢 cmets 的帮助,最终帮助我弄清楚数据包没问题,问题出在其他地方

【讨论】:

    猜你喜欢
    • 2019-12-18
    • 2013-05-01
    • 1970-01-01
    • 2013-02-17
    • 2022-06-21
    • 1970-01-01
    • 2019-08-01
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多