在回答这个问题时,我故意没有指定我的平台,但我会说我“感兴趣的平台”是 Linux 和 Windows 10。
假设我有 N 个 NIC。每个 NIC 都连接到单独的网络,其中一个网络通过默认网关提供 Internet 访问。其他网络都是私有的,没有通往 Internet 或彼此的路径。所有网络都使用 RFC 1918 地址空间。主机是不是设置为在网络间进行路由。
每个私有网络都有一个与之关联的唯一域名,并运行自己的私有权威 DNS 服务器,为该唯一域名提供 DNS 记录。这些名称不是全球 DNS 的一部分。(我通过将它们设置为我已注册的域名的子域名来确保这一点,并且我为该域名运行公共权威 DNS 服务器,不为所提及的子域名提供记录。
假设网络号和关联域名如下:
- 我的唯一子域名-1.我的唯一域名.com
- 主人居住在10.0.1.0/24
- 我的主机有 IP 地址10.0.1.1在界面上eth1
- DNS 服务器位于10.0.1.253和10.0.1.254
- 我的唯一子域名-2.我的唯一域名.com
- 主人居住在10.0.2.0/24
- 我的主机有 IP 地址10.0.2.1在界面上eth2
- DNS 服务器位于10.0.2.253和10.0.2.254
- ...
- 我的唯一子域名-N.我的唯一域名.com
- 主人居住在10.0.N.0/24
- 我的主机有 IP 地址10.0.N.1在界面上乙腈
- DNS 服务器位于10.0.N.253和10.0.N.254
如上所示,我的主机有两个 DNS 服务器(主 DNS 服务器和辅助 DNS 服务器)与每个接口相关联。这些可以通过 DHCP 或手动分配;其实这并不重要。我的 ISP 的 DNS 服务器将与可以访问 Internet 的网络接口相关联。我的专用网络的专用 DNS 服务器将与其他网络接口相关联。
我很难理解我的主机如何知道使用哪个 DNS 服务器来解析给定的域名。任何实际定义的给定 FQDN 都只能通过一个网络接口进行解析 --- 要么通过适当的私有 DNS 服务器,要么通过公共 DNS 服务器(如果没有适用的话)。要知道要使用哪个 DNS 服务器,主机必须知道被查询的主机位于哪个网络号上,但要知道这一点,它必须先进行 DNS 查询!这里似乎有一个先有鸡还是先有蛋的问题。
假设我想解决foo.我的唯一子域名-3.我的唯一域名.com。我的主机如何确定它需要将查询发送到10.0.3.253或者10.0.3.254?
答案1
我将列出三种可能的解决方案,一种适用于 Windows,另外两种适用于与平台无关的解决方案。当然,该列表并不详尽。
- 最简单的解决方案(Windows 和 Linux):
在 PC 上编辑该hosts
文件。在 Linux 中,它类似于/etc/hosts
;在 Windows 中,它通常是c:\windows\system32\drivers\etc\hosts
。请注意,您必须分别处于root
或Administrator
状态才能编辑它,而在 Windows 下,您可能需要暂时禁用病毒扫描程序才能执行此操作。
hosts 文件用于在没有 DNS 服务器的情况下提供 DNS 解析。它通常包含永远不会改变的条目。对于格式,请查看操作系统上已存在的相应文件。它非常容易理解。
- 一个简单但几乎不为人知的解决方案(仅限 Windows)
Windows 提供NRPT
(名称策略解析表)。它完全满足您的需求:您可以根据要解析的名称使用不同的名称服务器。由于它允许在配置中使用通配符,因此配置起来非常容易;配置是通过 GUI 完成的,在您的情况下,每个子网一行即可。
缺点是 GUI 配置是通过组策略进行的,因此您无法在 Windows Home 中轻松完成。在研究 NRPT 时,不要担心复杂的东西;大多数文章都集中在其用于直接访问、DNSSEC 和其他方面。但您真的可以忘记它(如果您不需要它),并仅将 NRPT 用作您想要的目的,如上所述。
这里是关于此事的一个起点。
- 一个好的,但不那么容易的通用解决方案(Windows 和 Linux)
虽然此解决方案是通用的(适用于任何操作系统),但实际实施步骤不仅因操作系统而异,而且因所用软件而异。因此,我将使用 Linux 和 进行解释bind9
,但您可以轻松地将该方法转移到其他环境中。
基本思路是在您的主机上安装一个额外的、完全可配置的 DNS 服务器(或只是一个解析器),并配置您的主机网络以使用该 DNS 服务器(或解析器)来解析所有名称。然后,配置 DNS 服务器/解析器以相应地转发 DNS 查询。
在过去的几年里,Unbound
它获得了很多关注,但我不知道,所以我将解释它如何在 Linux / 中工作bind9
。我将让您在其手册页和参考手册中查找配置语法详细信息,并仅显示关键步骤。
首先,安装bind9
,最好使用 Linux 发行版的数据包管理器。将其配置为监听所有网络接口,包括127.0.0.1
。然后,在主机的网络配置中,输入127.0.0.1
DNS 服务器。
然后,在bind
的区域配置中,放置如下代码片段
zone "my-unique-subdomain-1.my-unique-domain.com" {
type forward;
forward only;
forwarders { 10.0.1.253; 10.0.1.254 };
};
当尝试解析主机名时,主机将查询自身(即bind9
DNS 服务器)。bind9
将确定主机名的区域,查找相应的区域配置(如果存在)并将查询转发到为该区域配置的转发器。
您可以在 Windows 下使用适当的软件执行相同的操作,但由于 ,这通常不是必需的NRPT
。
最后需要注意的是,您当然可以只bind9
监听127.0.0.1
(而不是监听所有网络接口),这样可以确保其他主机无法访问它。根据您的情况,这可能是理想的,也可能不是理想的。