我有一个 TLD,其中包含一系列公共子域名,例如*.example.com
。我还有一个用作 SVN 存储库的私有服务器,我希望在 上可用svn.example.com
,但仅限于私有网络上。目前,我已通过创建区域文件并使用以下声明实现了此svn.example.com.zone
目标:
zone "svn.example.com" IN {
type master;
file "/etc/named/svn.example.com.zone";
};
在区域文件中:
@ IN NS svn.example.com.
svn.example.com. IN A 10.200.1.1
所有其他域名都转发到公共名称服务器。这可行,但并不理想,因为如果我想添加新的私有子域,就需要创建一个全新的区域。如果我将此区域设为整个 TLD 的主记录example.com
,那么我认为对当前公共的请求*.example.com
将不再适用于使用私有 DNS 的客户端(除非它们在私有 DNS 的区域文件中重复)。
有没有办法让我提供一个区域文件,该文件指定一个或多个私有子域,但仍会转发无法解析到公共名称服务器的请求?我尝试使用forward
区域类型,但我无法指定自己的区域文件,它只能转发。
更新
火箭科学家的 DNS 第 6 章给出了以下 DNS 配置示例内部网络上的隐形 DNS 服务器。这似乎与我想要实现的目标相当吻合,并且特别建议在私有 DNS 区域中复制公共 DNS 记录。显然,我想要解决的问题是记录重复,所以这更像是一种变通方法。
答案1
实现此目的的典型方法是:
- 拆分 DNS - 在内部 DNS 服务器上拥有不同的 DNS 记录...但内部 DNS 服务器必须具有全部记录,并需要在内部和外部服务器之间同步
- 委派 - 创建 svn.example.com 区域,并让您的 example.com DNS 服务器在 svn.example.com 上查找与 *.svn.example.com 相关的任何内容(包括 svn.example.com 本身)
一种方法是将“internal.example.com”之类的子域名委托给您的 LAN 的 DNS 服务器。在这些 DNS 服务器上,您可以为 internal.example.com(或 i.example.com(如果您希望更短))配置一个区域,并添加所需的任何记录。
您可能能够自动同步您的内部和公共 DNS 服务器以使用拆分 DNS,具体取决于您在每个服务器上使用的软件。
第三个选项是将内部 IP 地址放入公共 DNS 中。这可能存在安全隐患(如果您不在 LAN 上,有人可能会利用它诱骗您连接到他们的服务器),但应该可行,而且设置起来非常简单。
答案2
最终我选择了这里描述的解决方案:http://www.zytrax.com/books/dns/ch6/#stealth。 那是:
- 设置一个隐身 DNS 服务器,其中包含以下记录公共和私人主机
主要原因是,根据我所在组织的需求,复制少量公共 DNS 记录可带来以下好处:
- 容易明白
- 快速初始设置
主要缺点是冗余以及需要手动将隐形服务器与我们的公共 DNS 同步。
答案3
解决这个问题最简单的方法是将所有内部地址放在内部子域下,例如*.internal.example.com
。这还可以消除任何歧义,即您访问的主机名仅限于内部,并且不会从外部解析。
答案4
阅读有关绑定视图的内容。例如:http://oreilly.com/pub/a/oreilly/networking/news/views_0501.html。您可以限制谁(源 IP)有权访问哪个区域,并且可以拥有给定区域的多个版本。