采取以下设置:
- 我在 NAT 路由器后面运行私有网络
- 私有网络上的系统可以连接到互联网上的任何资源,因此需要对任何互联网资源进行 DNS 名称解析
- 我拥有一个域名(例如,
example.com
),它在互联网上有资源,并且由提供商管理的名称服务器。 - 提供商管理公共资源,并可能更新 DNS 记录以反映变化。也就是说,域名
MX
明天example.com
可能会指向不同的服务器,或者域名的 IP 地址www.example.com
可能会在一夜之间发生变化,而我却不会收到通知。 - 我想对我的内部网络上的资源使用相同的域名;内部资源位于子域名上(例如
fileserver.internal.example.com
)。但是,我不想将这些 DNS 记录暴露给互联网。
最后一项意味着我需要在内部运行自己的 DNS 服务器,并让它回答我区域的查询。但是,我需要确保任何公共资源的查询都由提供商的 DNS 服务器回答。
到目前为止,我一直在使用 pfSense 中的 DNS 转发器功能,它完全满足了我的需求。我可以为内部系统添加记录(甚至可以让 DHCP 服务器自动将其插入到它授予的任何租约中),如果 DNS 服务器收到对其中任何一个的请求,这些记录就会返回。任何其他请求都将转发到相应的外部名称服务器。
现在,我正尝试使用 Linux 服务器实现相同的功能,可能使用 BIND。我设想的设置如下:
- 将 BIND 配置为以递归/缓存模式运行,就像 ISP DNS 一样。
- 将其设置为 的权威名称服务器
internal.example.com
。 - 为区域内的内部系统配置RR
internal.example.com
。
如果外界没有人知道该internal.example.com
区域,那么这是否能按预期工作?BIND 是否会优先考虑其具有权威性的任何区域(而不是首先通过查询根区域来尝试找到它),或者是否可以将其配置为这样做?
答案1
当配置为递归服务器时,BIND 将首先使用它具有权威性的区域,然后再从根开始遍历整个 DNS 树。因此,只要您的专用网络上的名称位于其自己的区域中,上述配置就会起作用。
您甚至可以创建多个区域;唯一的限制是您需要维护您创建的区域中的所有记录并确保它们是最新的。它们可以引用 Internet 上的服务器,但您需要手动镜像托管提供商所做的所有更改,否则您的公共服务可能无法再从您的内部网络访问。
关于这个话题,有一篇很好的文章https://gist.github.com/Nilpo/1a70ebca988ad0743ea533d747445148。我在 Ubuntu 18.04 上做了测试,BIND 包预先配置为缓存名称服务器,因此您需要做的就是根据需要添加和填充区域文件,重新加载配置并将系统指向该服务器。