我们的域名注册商允许我们使用自己的 DNS 服务器,也可以使用他们的 DNS 服务器(在他们的 Web 界面中配置 DNS 条目);我想这是一种常见的情况。
我们选择设置自己的 DNS 服务器。现在,注册商的 DNS 服务器(不再具有权威性)返回的响应包含A
指向其提供的网络托管服务的“入门”网页的记录等条目。因此,实际上他们的 DNS 服务器返回了错误的信息。
DNS 查询和答案示例
为了使这一点更容易理解,我们假设:
- 我已
example.com
在 MyRegistrar.com注册 - 我已经将其设置
ns1.mydomain.com
为example.com
ns1.myregistrar.com
是 MyRegistrar.com 的名称服务器之一- 我
example.com
在服务器上托管该网站,地址为1.2.3.4
- MyRegistrar.com 的“入门”登录页面来自
9.8.7.6
预期的有效响应dig -t any example.com
如下(节略):
;; ANSWER SECTION:
example.com. 99999 IN A 1.2.3.4.
;; AUTHORITY SECTION:
example.com. 9999 IN NS ns1.mydomain.com.
;; ADDITIONAL SECTION:
ns1.mydomain.com. 99999 IN A 1.2.3.1.
但是,当使用查询MyRegistrar.com时dig -t any @ns1.myregistrar.com example.com
,我收到以下无效响应:
;; ANSWER SECTION:
example.com. 99999 IN SOA ns1.myregistrar.com. 1 14400 3600 604800 3600
example.com. 9999 IN A 9.8.7.6.
example.com. 99999 IN NS ns1.myregistrar.com.
;; ADDITIONAL SECTION:
ns1.myregistrar.com. 600 IN A 9.8.7.1.
当专门使用 查询MX
记录时dig -t mx @ns1.myregistrar.com example.com
,我甚至在响应中得到了一个权威部分(由于没有MX
记录,所以答案部分是空的):
;; QUESTION SECTION:
;example.com. IN MX
;; AUTHORITY SECTION:
example.com. 3600 IN SOA ns1.myregistrar.com. 1 14400 3600 604800 3600
包起来...
当然,这在实践中没有问题,因为正常的 DNS 查询不会针对ns1.myregistrar.com
。但有趣的是,MyRegistrar.com 的名称服务器是否按照 RFC 运行?
我浏览了文档和 RFC,以了解 DNS 服务器需要/允许在其响应中包含哪些信息(特别是如果允许它们完全偏离权威响应),但未能找到任何相关信息。如能提供任何指示,我将不胜感激。
答案1
除非实施 DNSSEC,否则无法证明任何 DNS 响应包含准确的数据。
“权威”是以下各项的组合:
- 服务器认为它拥有 DNS 区域的完整副本(即它是该区域的主服务器或从服务器,而不仅仅是递归缓存)
- 父 DNS 区域将您的 DNS 区域/域的权限委托给您的服务器(这是您的注册商的 Web 界面控制的)
- 区域本身包含指向该服务器的 SOA 记录
- 包含主服务器和从服务器的 NS 条目的区域,其中托管该区域的完整副本
如果服务器认为它具有权限,但是 DNS 基础设施没有该区域该服务器的任何记录,则不应对其进行任何查询 - 因此不正确的记录并不重要 - 只要您不使用该提供商内的任何托管,这些托管可能会被硬配置为使用他们自己的 DNS 服务器。