我试图更好地理解 DNS,但我仍然没有完全获得 A 和 NS 记录。
据我所知,A 记录告诉我哪个 IP 地址属于(子)域,到目前为止我还很清楚。但据我所知,NS 记录告诉哪个名称服务器点属于(子)域,而该名称服务器应该告诉哪个 IP 地址属于(子)域。但这已经在同一个 DNS 文件的 A 记录中指定了。所以有人可以向我解释 NS 记录和名称服务器到底是做什么的,因为我可能理解错了。
编辑:据我所知,NS 记录告诉您要找到具有某个域的 A 记录的 DNS 服务器,而 A 记录告诉您哪个 IP 地址属于某个域。但是将 A 和 NS 记录放在同一个 DNS 文件中有什么用呢?如果某个域已经有 A 记录,那么为什么您需要指向另一个 DNS 服务器,它可能会给您相同的信息?
当 DNS 缓存的准确性有问题时,dig +trace
往往是确定面向 Internet 的 DNS 记录的权威答案的推荐方法。这在与 配对时似乎特别有用+additional
,这也显示了胶水记录。
有时似乎在这一点上存在一些分歧——有人说它依赖本地解析器来查找中间名称服务器的 IP 地址,但命令输出没有提供任何迹象表明这超出了 root 的初始列表名称服务器。如果目的+trace
是从根服务器开始并跟踪您的方式,那么假设情况并非如此,这似乎是合乎逻辑的。(至少如果您有正确的根名称服务器列表)
是否dig +trace
真的将本地解析器用于根名称服务器之外的任何内容?
我们的域 grahamhancock.com 被世界各地的一些人错误解析,但它对大多数人来说是正确解析的。
当我浏览免费开放 DNS 提供商的列表时,大约 90% 可以正确解析并提供与我们的区域文件一致的信息。然而,10% 的人没有,并声称 IP 地址是链接到我们过去从未拥有或使用过的某个Amazon EC2实例的地址。以下是一些提供错误信息的示例 DNS 服务器:
dig www.grahamhancock.com @173.84.127.88
dig www.grahamhancock.com @209.222.18.222
Run Code Online (Sandbox Code Playgroud)
这些服务器怎么会有错误的信息,我们如何才能重新控制局势?
这可能是恶意的,还是配置错误?我们是一个每月有 100 万点击量的网站,搜索排名很好,所以我们很可能成为恶意攻击的目标。错误服务器返回给某些人的错误 IP 地址指向 AWS EC2 实例上的某个快速致富站点。
我们应该做什么?
我一直在与某个网络供应商发生一些问题,原因是未更改的名称服务器使我的网站对他们的客户不可见。除了他们是爱尔兰最大的 ISP 之一之外,我不会感到困扰。
他们声称这些记录在我站点的旧名称服务器上仍然处于活动状态,因此在收到响应告诉他们该站点没有 dns 记录之前,他们不应更改。
我的问题是,什么是正确的行为?网络上的所有其他网络提供商、isp、dns 服务器都已更新为我的新名称服务器。
他们是否遵循了一些技术上正确但被忽略的 RFC,该 RFC 说他们不需要检查新的名称服务器,直到旧的名称服务器返回错误?
更新:
Vodafone 最终联系了我并说他们已经解决了这个问题,更重要的是现在正在将其上报给他们正确的技术人员,因此这个问题不应该影响其他任何人。希望这能解决问题。
好吧,我对 DNS 有点陌生,但我在找到这个问题的答案时遇到了一些困难。我在 google 域名注册了一个域名。与其他注册商一样,您可以访问他们的免费 DNS,虽然我知道您可以更改这些,但我也注意到为个人输入“NS”记录(与其他类型相反,例如 A、CNAME 等)的选项子域(区域?)——甚至对于裸域(例如 example.com)。这与注册商的名称服务器有何不同?如果您没有更改裸域的 NS 记录,那么输入这些记录是否会与注册商的名称服务器发生冲突?或者 NS 记录优先于注册机构记录吗?有人可以向我解释一下吗?
另外,如果我只想对一个子域使用 cloudflare,我是否可以输入 cloudflare 的 dns 服务器作为该子域的多个 NS 记录,或者我是否必须更改主 DNS 服务器(即远离 google)?非常感谢。
跟进:
我刚刚做了一个dig example.com any
,注意到注册商的名称服务器显示为裸域的 NS 记录。我认为注册商的 DNS 服务器设置在某种程度上与普通资源记录(A、CNAME 等)是分开的。我想我错了。
如果我们有example.com,我们将设置如下内容:
$ORIGIN example.com.
@ 1D IN SOA ns1.example.com. hostmaster.example.com. (
2002022401 ; serial
3H ; refresh
15 ; retry
1w ; expire
3h ; nxdomain ttl
)
IN NS ns1.example.com.
IN NS ns2.example.com.
Run Code Online (Sandbox Code Playgroud)
因为在父区域.com 中。example.com已经有 NS 记录。ns1.example.com 的子区域和 A 胶水记录。我们在子区再次声明 NS 记录的目的是什么?
此外,我们是否需要为子区域本身的名称服务器声明 A 记录?
这是我的问题:
dig +trace
忽略 Glue 记录?dig
or dig +trace
,或者递归名称服务器是否也“手动验证”它收到的粘合记录?这是更长的解释:
这是引发这些问题的 DNS 事务的完整捕获。
我正在使用 dig +trace 来跟踪 DNS 过程,以进行简单的 A 记录解析www.pizza.com
。正如预期的那样,第一个请求是发送给我的 DNS 服务器,寻找根名称服务器(数据包 #1)。然后,我的 DNS 服务器会响应所有 13 个名称服务器的列表(数据包 #2):
请注意,在 Packet#2 中,不包含任何附加记录。这会提示我的客户查找每个提供的根名称服务器的 A 记录。这发生在数据包 3 到 28 中:
到目前为止,这是预期的。但接下来就变得有趣了。
数据包 29 是我的客户端,向 192.5.5.241 (f.root-servers.net) 发出请求,查找 www.pizza.com 的 A 记录。显然,根 NS 不知道 A 记录,因此提供.com
TLD 名称服务器的 FQDN(a.gtld-servers.net、b.gtld-servers.net 等)。请注意,F 根 NS 还提供“附加记录”,即与每个 .com TLD 名称服务器 FQDN 对应的 A 记录:
接下来就是我的问题所围绕的内容。尽管我的客户收到了与 .com TLD 名称服务器相关的 A …
我目前正在将 DNS 区域从一个 DNS 服务器提供商迁移到另一个。我试图估计更改传播需要多长时间,并了解如果我选择在中途回滚可能会出现什么延迟。
以前,我认为我可以这样做:
dig example.com ns
Run Code Online (Sandbox Code Playgroud)
要查看 NS 记录上剩余的 TTL 是多少,但现在我明白此 NS 记录是区域中子域的 NS 记录,而不是源自根服务器的 NS 记录,后者是最终决定查询将发送到哪个名称服务器。
我通过在每个提供程序的区域中设置测试记录来对此进行测试:
Provider1 test.example.com 10.0.0.1
Provider2 test.example.com 192.168.0.1
Run Code Online (Sandbox Code Playgroud)
对于这两个提供商,NS 上的 TTL 记录为 0,而 TLD 注册商级别的 NS 记录指向 Provider1 的名称服务器。
当我在 Provider1 的区域中更改 NS 记录时,我几乎可以立即看到这反映在 NS 查询中(使用“dig example.com ns”)。
但是,当我发送对 A 记录的查询时,即
test.example.com
Run Code Online (Sandbox Code Playgroud)
它总是返回
10.0.0.1
Run Code Online (Sandbox Code Playgroud)
无论提供者 1 的区域中的 NS 记录设置为什么。
在此基础上,我得出结论,区域文件中的 NS 记录与迁移无关,并且只有 TLD 级别的名称服务器记录是重要的。
但是,我无法了解那里的更改可能会向前或向后传播多长时间。
对于从 TLD 根服务器发出的记录,是否可以查询正在使用的 TTL?
假设我有以下example.com
区域:
$TTL 120
@ IN SOA ns1 hostmaster (2018041509
300
150
600
60)
IN NS ns1
IN NS ns2
ns1 IN A 192.168.0.159
ns2 IN A 192.168.0.160
blah IN A 192.168.0.141
Run Code Online (Sandbox Code Playgroud)
如上所示,ns1.example.com
并且ns2.example.com
是该区域的两个权威名称服务器。其他名称服务器何时查询它们?正如我测试的那样,查询这两条记录的唯一时间是当我使用 DNS 查找实用程序请求NS
记录时192.168.0.159
,即dig @192.168.0.159 -t NS example.com
.
www.duckdns.org 的 DNS 查找需要 10 多秒。这是我的互联网提供商的 DNS 问题吗?这是使用我的提供商 DNS 和 Google DNS 的主机命令的输出:
$ 时间主机 www.duckdns.org www.duckdns.org 的地址为 50.112.156.11 ;; 连接超时; 无法访问任何服务器 www.duckdns.org 邮件由 50 www.duckdns.org 处理。 真正的 0m10.767s 用户 0m0.016s 系统 0m0.012s
$ 时间主机 www.duckdns.org 8.8.8.8 使用域服务器: 名称:8.8.8.8 地址:8.8.8.8#53 别名: www.duckdns.org 的地址为 54.148.234.172 找不到主机 www.duckdns.org:2(SERVFAIL) www.duckdns.org 邮件由 50 www.duckdns.org 处理。 真实 0m0.546s 用户 0m0.020s 系统 0m0.008s
$ 时间主机 www.google.com www.google.com 的地址是 62.168.125.25 www.google.com 的地址为 62.168.125.29 www.google.com 的地址为 62.168.125.30 www.google.com 的地址为 62.168.125.34 www.google.com 的地址为 62.168.125.35 www.google.com 的地址是 62.168.125.39 www.google.com 的地址为 …
glue-record ×3
nameserver ×3
dig ×2
networking ×2
ns-record ×2
dns-hosting ×1
dns-zone ×1
subdomain ×1