域名可以没有分配 IP 地址(A 记录)并且子域名可以存在吗?

域名可以没有分配 IP 地址(A 记录)并且子域名可以存在吗?

我在子域上运行了一台专用服务器。我想将子域配置为 DNS。基本上,我使用 example.com 作为我的主要公司域。我可能会有多个专用服务器,并希望它们如此s1s2等等。

server.example.com通过 NS 条目重定向到另一个 DNS 提供商
server.example.com NS ns1.hostingcompany.example.com
server.example.com NS ns2.hostingcompany.example.com

我在那里设置了以下条目:

servers.example.com     NS  ns1.hostingcompany.example.com.
servers.example.com     NS  ns2.hostingcompany.example.com.

s1.servers.example.com  NS  ns1s1.servers.example.com.
s1.servers.example.com  NS  ns2s1.servers.example.com.
ns1s1.servers.example.com   A   192.0.2.1
ns2s1.servers.example.com   A   192.0.2.2
s1.servers.example.com  A   192.0.2.1

但是,servers.example.com没有 A 记录。我跳过了它,因为我只想将其用作分组DNS 条目。

一切似乎都正常,除了我公司本地的绑定服务器。它无法识别s1.servers.example.com任何子域。当我切换到 Google DNS 时,它似乎运行正常。

问题是,这个设置是否合适并且可以工作?

注意:也许我不明白 NS 条目是如何工作的,据我所知,当 NS 服务器存在于域条目中时,指向其他 DNS 服务器,它被认为是“不要问我,问另一台服务器”,并且此链中不需要 A 记录。

答案1

记录通常不是强制性的,但最好至少保留它,以便在子域名的情况下提示如何访问它(您需要知道在哪里ns1.sub.example.com正在处理示例.com- 您知道先有鸡还是先有蛋吗?/ 如果您还不知道 example.com,那么您就无法请求 ns1.sub.example.com :-) 。

必须有 SOA(年代f 区A权威)记录,并且至少有 NS(英文年代服务器)记录。从技术上讲,与其他子域相关的委派需要 NS,因为该区域的“重要”NS 记录位于上层区域(如果您请求 NS,则您最终会直接在区域上请​​求,但要到达它,您需要使用上层区域的 NS)。

为了想象,我们假设这种结构(example.com、example.net 和 192.0.2.0/24 用于文档目的,其余部分在 DNS 系统中是真实的 - 当然减少到众多记录之一...):

. (e.g. a.root-servers.net. - 198.41.0.4 ):
  . IN SOA ...
  . IN NS a.root-servers.net.
  a.root-servers.net. IN A 198.41.0.4 ( <= this is HINT - how to reach it)
  ...
  com. IN NS a.gtld-servers.net.
  a.gtld-servers.net. IN A 192.5.6.30  ( <= this is HINT - how to reach it)
  a.gtld-servers.net. IN AAAA 2001:503:a83e::2:30 ( <= this is HINT - how to reach it)
  ...

com. (e.g. a.gtld-servers.net. - 192.5.6.30 ) :
  com. IN SOA ...
  com. IN NS a.gtld-servers.net.
  ...
  example.com. IN NS ns1.example.com.
  ns1.example.com. IN A 192.0.2.10  ( <= this is HINT)
  ...

example.com ( ns1.example.com. - 192.0.2.10 ) :
 example.com. IN SOA ...
 example.com. IN NS ns1.example.com.
 ns1.example.com. IN A 192.0.2.10
 ...
 www.example.com. IN A 192.0.2.20
 sub.example.com. IN NS ns1.sub.example.com.
 ns1.sub.example.com. IN A 192.0.2.30 ( <= HINT to where to find NS server)
 ...
 sub2.example.com. IN NS ns1.example.net. ( no HINT needed as it point out to other zone)
 ...

在此示例中,区域中直接和上层区域中存在针对 example.com 的 NS 委派的一致信息。

 example.com. IN NS ns1.example.com.
 ns1.example.com. IN A 192.0.2.10

如果不同,这不是问题,但对于查找权威服务器,将使用来自上层区域 (com.) 的服务器,但在常规递归的情况下,将直接返回来自区域的记录...因此可以显示除技术上使用的内容之外的其他内容。如果您将区域迁移到其他 DNS 服务器,这可能是一个问题 - 在以前的 DNS 服务器启动之前,一切都正常并且看起来不错,但一旦关闭电源,区域就无法访问...

“上部”区域通过注册商(通常是某种网络表单)进行维护,但直接区域(您的区域)在您指向 NS 记录的任何地方进行维护(注册商服务器、第三方服务器或您自己的 DNS 服务器)。

要查看上部区域中的记录,您可以使用此命令(如果是 example.com,则为 com. 的 DNS 服务器):

dig +norec NS example.com @a.gtld-servers.net.

要获取区域 example.com 的内容,您可以使用(例如询问公共 google DNS 服务器):

dig NS example.com @8.8.8.8

如果委派在一般情况下有效但在本地无效,我猜您已经在本地为 example.com 定义了 DNS 区域(例如,获取内部 IP 而不是公共 IP),因此即使您已经为子域进行了 NS 委派,您的本地 DNS 区域 example.com 实例也对此一无所知 - 您也需要在那里添加它。

其次,您不需要为每个子域进行额外的 NS 委派。如果您不需要额外的子域 DNS 服务器,那么“主”DNS 服务器也可以处理它。

这是 example.com 区域的有效内容

example.com IN SOA ...
example.com. IN NS ns1.example.com.
ns1.example.com. IN A 192.0.2.10
...
www.example.com. IN A 192.0.2.20
s1.servers.example.com. IN A 192.0.2.30
s2.servers.example.com. IN A 192.0.2.40
s3.servers.example.com. IN A 192.0.2.50
...

如果您需要委派,只需服务器“级别”就足够了:

example.com :
 example.com IN SOA ...
 example.com. IN NS ns1.example.com.
 ns1.example.com. IN A 192.0.2.10
 ...
 www.example.com. IN A 192.0.2.20
 servers.example.com. IN NS ns1.servers.example.com.
 ns1.servers.example.com. IN A 192.0.2.15
 ...

servers.example.com ( ns1.servers.example.com. - 192.0.2.15 ) :
 servers.example.com. IN SOA ...
 servers.example.com. IN NS ns1.servers.example.com.
 ns1.servers.example.com. IN A 192.0.2.15
 ...
 s1.servers.example.com. IN A 192.0.2.30
 s2.servers.example.com. IN A 192.0.2.40
 s3.servers.example.com. IN A 192.0.2.50
 ...

因此,如果您不需要在 s1.servers.example.com 上直接为某些特殊目的使用额外的 DNS 服务器,那么问题中的这条记录实际上并不是必需的:

s1.servers.example.com  NS  ns1s1.servers.example.com.

答案2

您的配置是正确的,除了:

s1.servers.example.com  A   192.0.2.1

由于您已将域名委托s1.servers.example.com给其他名称服务器,因此定义此条目是它们的工作。例外情况是胶水记录,必须位于父区域中。您可以使用它们为委托的名称服务器提供更合理的名称:

s1.servers.example.com  NS  ns1.s1.servers.example.com.
s1.servers.example.com  NS  ns2.s1.servers.example.com.
ns1.s1.servers.example.com   A   192.0.2.1
ns2.s1.servers.example.com   A   192.0.2.2

答案3

除非我犯了严重错误,否则我发现这里有两个问题。

第一个问题很简单。我写这个答案时,您已经发布了这个问题几个小时。这意味着新的 DNS 配置可能还没有传播到整个 DNS 系统。根据域配置中的各种 TTL 条目,这可能需要一天时间。此过程的一个典型阶段是,一些 DNS 服务器已经提供新信息,而其他 DNS 服务器则提供旧信息。

第二个是您的配置。我不明白为什么您有以下条目:

s1.servers.example.com  NS  ns1s1.servers.example.com.
s1.servers.example.com  NS  ns2s1.servers.example.com.
ns1s1.servers.example.com   A   192.0.2.1
ns2s1.servers.example.com   A   192.0.2.2

据我理解,你的问题s1.servers.example.com不是子域,但只是一个主机。但是您将其视为子域,因为您明确将其委托给名称服务器。这非常不寻常,您可能应该省略这四行。基本结构应如下所示:

  • 告诉世界哪些名称服务器负责/有权解析servers.example.com命名空间中的所有名称。您已通过代码框中发布的前两行完成了此操作。

  • 然后只需将所有主机的条目(A 记录)添加到这些名称服务器的配置中。除非这些名称服务器相互复制,否则您应该将相应的条目添加到两个都其中。您s1已通过第二个代码框中发布的最后一行完成了此操作。

应该没什么可做的了。就我个人而言,我会为其添加一个额外的条目servers.example.com,也许只是指向它s1.servers.example.com,因为经验表明,人们将要尝试该主机名,如果无法解析则会担心。

相关内容