建立名称服务器后,谷歌不会识别我们的记录吗?

建立名称服务器后,谷歌不会识别我们的记录吗?

我们正在使用标准 dnslib 库在 Python 中构建一个实验性的名称服务器。

它似乎起作用了,我们已经将一个测试子域 midsummer.beltaine.co.uk 委托给它,它为其配置文件中的记录提供了预期的答案。

使用久负盛名的 squish.net DNS 检查器显示没有错误,解析完美。其他主要 DNS 测试工具也报告子域名一切正常。

当被要求时,Cloudflare 的公共解析器 1.1.1.1 很乐意为我们提供记录。

但是,Google 的公共 DNS 8.8.8.8 / 8.8.4.4 对子域的所有查询都返回空白记录。

使用提供的测试工具https://dns.google,如果我尝试查找 NS 记录,它显示的是这样的 - 它似乎认为没有返回任何答案。

{
  "Status": 0 /* NOERROR */,
  "TC": false,
  "RD": true,
  "RA": true,
  "AD": false,
  "CD": false,
  "Question": [
    {
      "name": "midsummer.beltaine.co.uk.",
      "type": 2 /* NS */
    }
  ],
  "Comment": "Response from 195.82.107.179."
}

然而,当我对该 IP(即主机 two.beltaine.co.uk,子域的两个权威服务器之一)进行挖掘时,返回了预期的数据:

:~> dig @195.82.107.179 midsummer.beltaine.co.uk ns

; <<>> DiG 9.9.4-rpz2.13269.14-P2 <<>> @195.82.107.179 midsummer.beltaine.co.uk ns
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15616
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;midsummer.beltaine.co.uk.      IN      NS

;; ANSWER SECTION:
midsummer.beltaine.co.uk. 3600  IN      NS      one.beltaine.co.uk.
midsummer.beltaine.co.uk. 3600  IN      NS      two.beltaine.co.uk.

;; Query time: 17 msec
;; SERVER: 195.82.107.179#53(195.82.107.179)
;; WHEN: Sat Jul 08 15:40:27 BST 2023
;; MSG SIZE  rcvd: 78

委托正在进行,并附有胶水记录,这是正常的:

:~> dig @d.ns.as8401.net midsummer.beltaine.co.uk a

;; QUESTION SECTION:
;midsummer.beltaine.co.uk.      IN      NS

;; AUTHORITY SECTION:
midsummer.beltaine.co.uk. 3600  IN      NS      one.beltaine.co.uk.
midsummer.beltaine.co.uk. 3600  IN      NS      two.beltaine.co.uk.

;; ADDITIONAL SECTION:
one.beltaine.co.uk.     1812    IN      A       212.85.249.179
two.beltaine.co.uk.     1812    IN      A       195.82.107.179

我猜测服务器无法设置或提供某些功能,但不确定是什么?

答案1

发现问题并找到解决方案。

事实证明,Google 的 DNS 在权威服务器上查找答案时会随机将 DNS 查询中的字母大写。这意味着当通过挖掘或使用我们接口的测试要求输入“midsummer.beltaine.co.uk”时,他们实际上要求我们的服务器输入的是(例如)“mIdsUMmer.beLtAINe.Co.uK”。我知道 DNS 不区分大小写,但我们忘记将传入的查询改为小写,因此当脚本将其收到的数据与其配置中的数据(小写)进行比较时,没有匹配。

将代码添加到小写接收的查询解决了问题,并且测试子域现在可以正确提供服务。

这是缺失的代码:

qname = str(request.q.qname).lower()  # Convert to lowercase

这表明在假设某些深奥的事情发生之前,总是要检查基本情况。问题是通过对传入接口和端口执行 tcpdump 发现的,它显示了随机大写的查询。

相关内容