客户端无法解析我的DoH服务器响应



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

mydomain.customtld

我希望它指向

bafybeie5nqv6kd3qnfjupgvz34woh3oksc3iau6abmyajn7qvtf6d2ho34.ipfs.dweb.link

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

所以,我做了以下操作:

  • 我使用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响应数据包是有效的。问题是浏览器URL栏中的URL与DNS数据包的问答部分返回的URL不一样,这给浏览器带来了一个问题。可能是出于安全考虑,但是当我在答案和问题部分更改名称时,我的DNS数据包被浏览器接受了。这个问题绝对是错误的,但我会保留它,因为这个答案可能会帮助那些在为浏览器编写自定义DoH时遇到同样问题的人。

干杯,感谢你的有益的评论,最终帮助我弄清楚数据包是好的,问题是在其他地方

最新更新