公共域的 Intranet 名称服务器

公共域的 Intranet 名称服务器

我已注册域名 domain.co,并拥有一个用于处理查询的内联网 DNS 服务器 (BIND)。我希望网络中的任何人都可以发现此域名和 DNS,而无需对其系统进行任何更改。

因此,我有另一个域 example.com,其中我添加了指向 ns1.example.com -> 10.10.0.1 和 ns2.example.com -> 10.11.0.1 的 A 记录

现在我已将 domain.co 的名称服务器更改为 ns1.example.com、ns2.example.com

但当我尝试解析域名时,出现服务器故障。[注意:DNS 已传播]

$ dig stage.domain.co

; <<>> DiG 9.9.5-3-Ubuntu <<>> stage.domain.co
;; global options: +cmd
;; connection timed out; no servers could be reached

但是 dig stage.domain.co@ns1.example.com 可以正确返回。

$ dig stage.domain.co @ns1.example.com

; <<>> DiG 9.9.5-3-Ubuntu <<>> stage.domain.co @ns1.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17613
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;stage.domain.co.       IN  A

;; ANSWER SECTION:
stage.domain.co.    86400   IN  A   10.11.8.35

如果我更新 /etc/resolv.conf 以指向我的 dns 服务器,它就会正常工作,并且一切正常。我想要实现的是,它正常工作,而无需对 resolv.conf 进行任何更改,我网络中的机器可以直接查询我的内联网 dns 服务器。

为什么直接查询域名时会抛出服务器故障?是因为它的内网 IP 吗?我希望这些只能解析到我的内网机器。

编辑:找出原因,正如 falcon 所建议的那样,本地系统不递归解析 DNS,而是查询提供商提供的递归 DNS 解析器(如 google dns/open dns),它们将无法访问内联网名称服务器,因此失败。当部署本地递归 DNS 解析器并将其用作 DNS 源时,它会起作用。

答案1

不,您不应将 RFC1918 IP 地址添加到公共 Glue 记录中。原因如下:

  • 如果您的内部主机使用 LAN 之外的 DNS 服务器,而 RFC1918 寻址的权威名称服务器位于该 LAN 之外,则出于显而易见的原因会导致 SERVFAIL
  • 它会将垃圾添加到胶水记录集中
  • 如果不同 LAN 中的解析器实际上可以联系到指定 RFC1918 地址上的 DNS 服务器,并且存在恶意的 DNS 服务器,则会产生意想不到的后果
  • 它可能提供了你不希望看到的网络信息

你确实可以做两件事之一。

典型的解决方案是在您的内部网中使用的 DNS 服务器上设置条件转发器(并且不要与注册商设置粘合记录)。无论如何您都应该运行一个,以便您可以利用缓存。

另一种解决方案是使用一对公共路由 IP 地址并在其上托管 DNS 服务器,但使用 ACL 使得只有来自 LAN 的主机才允许查询它们,并确保它们只能从您的内部网访问。此方法适用于 IPv6 环境,但在 IPv4 中不太适用。

值得注意的是,大多数计算机都不是递归 DNS 解析器;只有递归 DNS 解析器才会查看胶合记录或根。除非计算机正在运行 DNS 守护程序(如 bind),否则它很可能不是递归解析器,而只是将其查询发送到已配置的 DNS 服务器。这就是为什么这个系统不像你想象的那样工作。

相关内容