我在一家小公司工作,拥有几个公共 URL。DNS 由一家大型 ISP 托管,并且拥有几个 A 和 CNAME 记录。
在我们的私有网络中,我们有许多相互连接的服务器和主机。我使用 yp/nis 发布它们的名称。当 Linux 工作站配置到 nis 域并设置 nsswitch.conf 文件时,我就可以使用这些名称。
Windows 工作站必须手动更新其主机文件。
简单来说,我想做的是拥有一个本地 DNS 服务器来扩展域company.com
,但只用于我的内部系统。例如,我将在 IP 10.10.10.10 上运行绑定。我的本地系统将获得额外的条目,但 10.10.10.10 不会尝试将有关 company.com 的任何内容传递到上游。
www.company.com
- 地球上每个人都可以看到
ralph.company.com
- 仅对使用 10.10.10.10 的内部系统可见
这可能吗?或者 10.10.10.10 必须定义一个子域。
www.company.com
ralph.sandbox.company.com
答案1
它会按预期工作,如果您将区域添加到内部 DNS 解析器,则可以屏蔽您的公共域。如果您使用 ISP 的 DNS 解析器,则必须按照问题中提到的方式设置自己的解析器。
您的内部 DNS 解析器必须添加到resolv.conf
网络上每台机器上的文件(或 Windows 上的等效文件)中,并且必须允许递归查询,否则您的主机将无法解析任何公共名称。
这样,您内部网络上的主机将看到 的本地版本company.com
,而世界其他地方将看到公共 ISP 托管的版本。
但是有一个问题:本地区域内不存在的任何记录company.com
都不会被内部网络上的任何机器看到,因为内部 DNS 不会将任何*.company.com
查询转发到外部世界。因此,为了让您的内部网络能够访问,www.company.com
您必须将记录添加到内部 DNS 服务器中的该区域。
答案2
首先:是的,这是可能的。
一种方法是实施水平分割 DNS, 哪个
是域名系统 (DNS) 实现的功能,用于提供不同的 DNS 信息集,通常由 DNS 请求的源地址选择。
但是,如果您的域名的权威名称服务器由您的提供商托管,则这将不起作用。
因此,我想到两种可能性,但还有更多(DNS 非常复杂,因此至少对我来说,不可能写出一个一刀切的答案):
自行托管名称服务器,例如使用绑定。
让您的提供商继续托管权威名称服务器。在您的私有网络内设置另一个(这次是递归)名称服务器,例如未绑定. 将您的客户端指向该服务器以进行域名解析。
将您私有网络内需要的记录放入配置中,例如通过:
local-data: "ralph.company.com A 10.10.10.10" local-data-ptr: "10.10.10.10 ralph.company.com"
将请求转发到
unbound
可公开访问的 DNS 解析器,例如通过forward-zone: name: "." forward-addr: ${RESOLVER_IP_1} forward-addr: ${RESOLVER_IP_2}
编辑:采用第二种方法可以防止您遇到 André Fernandes 的回答中提到的“陷阱”。