公共域的内网名称服务器

-2 domain-name-system bind internal-dns nameserver

我已经注册了一个域名 domain.co 并且有一个 Intranet 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
Run Code Online (Sandbox Code Playgroud)

但是 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
Run Code Online (Sandbox Code Playgroud)

如果我更新 /etc/resolv.conf 以指向我的 dns 服务器并且一切正常,它就会起作用。我要实现的是,在我的网络中的resolv.conf机器没有任何变化的情况下,它可以正常工作,可以直接查询我的内网dns服务器。

为什么直接查询域名会抛出server-fault?是因为它的内网ip吗?我希望那些只能解析到我的 Intranet 机器上。

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

Fal*_*mot 6

不,您不应将 RFC1918 IP 地址添加到公共胶水记录。这有几个原因:

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

你真的可以做两件事之一。

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

另一种解决方案是使用一对公开路由的 IP 地址并在其上托管 DNS 服务器,但使用 ACL 以便仅允许来自您 LAN 的主机查询它们,并确保它们只能从您的 Intranet 访问。这种方法适用于 IPv6 环境,但不适用于 IPv4。

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