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