有一个具有相同域的内部 DNS 和一个外部 DNS。

有一个具有相同域的内部 DNS 和一个外部 DNS。

是否有可能为一个域设置一个内部 DNS,其中包含所有内部 IP(如 192.168.0.0/24),并为同一个域设置一个外部 DNS。

我希望 bind 能够解析所有内部地址,如果找不到记录,则将其转发到外部 DNS。

让我举例说明。

域名 mydomain.com 由 Gandi 托管,并采用 Gandi 外部 DNS。它具有邮件、www 等记录。可从任何地方访问。

另一方面,我有一个内部 DNS,它与 nas、raspberry pi 等内部机器具有相同的域。

如果我想从内部网络连接到 nas,我会输入 nas.mydomain.com,它将由内部 dns 解析,但如果我想连接到 webmail,我会转到 mail.mydomain.com。此记录在内部 dns 上不存在。然后它应该将查询转发到外部 dns

我已将 bind 配置为具有一个区域“mydomain.com”的缓存/转发服务器,但如何转发在内部 DNS 中未找到任何记录的 mydomain.com 的所有查询

答案1

这个概念的名字确实是分割 DNS或者DNS 视图view(因为 BIND 使用语句配置它们[文档])。但是,仅凭这一点并不能回答您的问题,因为如果内部视图中不存在记录,您希望将查询从内部视图转发到外部视图。我认为这是不可能的。(我也相信这个确切的问题之前在 ServerFault 上已经被问过很多次了,所以你应该做更好的搜索。但由于我自己无法快速找到类似的问题,我会原谅你并再次在这里回答这个问题)。

拆分 DNS 并不完全符合您所问的问题,因为它假设您将设置单个 DNS 服务器,该服务器将根据哪个客户端(源 IP 地址)提出问题提供不同的答案。您需要两个 DNS 服务器,并在它们之间进行转发。所以让我们试一试。

您的内部 DNS 服务器将成为所有内部记录的主服务器所有外部记录。您的外部 DNS 服务器(托管在 DMZ 中)将仅是外部记录的主服务器。为了避免必须在两个 DNS 服务器上输入外部记录,您应该将它们放在单独的文件中,同步两个 DNS 服务器之间的该文件,以及$INCLUDE[文档; 在两个区域文件中搜索“INCLUDE”。然后内部服务器将如下所示:

/etc/bind/named.conf.local

zone "example.com" {
   type master;
   file "/etc/bind/db.example.com";
};

/etc/bind/db.example.com(在内部 DNS 服务器上)

example.com.   SOA   ns1.example.com. hostmaster.example.com. (
                            2017030300 ; serial
                            3600       ; refresh
                            1800       ; retry
                            604800     ; expire
                            600 )      ; ttl
               NS   ns1.example.com.
               NS   ns2.example.com.
ns1            A    192.168.0.53
ns2            A    192.168.0.153

$INCLUDE /etc/bind/db.example.com.external

internal1      A    192.168.0.5
internal2      A    192.168.0.12
client5        A    192.168.0.23

/etc/bind/db.example.com.external

该文件需要在两个 DNS 服务器之间手动同步或通过 cron 同步。

example.com.   A    203.0.113.80
               MX   10 mail.example.com.
mail           A    203.0.113.25
www            A    203.0.113.80

需要记住的是,SOA 和 NS 记录需要在两个 DNS 服务器上定义,并且需要特定于内部或外部区域。因此,声明上方的所有内容都$INCLUDE需要针对每个 DNS 服务器进行自定义。接下来,内部和外部 DNS 服务器都包含外部条目。最后,只有内部服务器指定内部记录。

一个小问题是您无法覆盖条目。因此,如果您有一个公共条目(例如指向 203.0.113.80 的 www.example.com),但您想覆盖该条目,以便内部 DNS 服务器指向 192.168.0.80,则需要通过不在共享文件中列出该条目,而是在$INCLUDE两个服务器上的语句下单独指定该条目来完成此操作。

答案2

是的,您可以在内部 DNS 和外部 DNS 中使用相同的域(但 DNS 服务器不同)。此配置称为裂脑 DNS。

请检查

相关内容