假设我在内部(10.0 或 192.168 类)LAN 上有多台机器(或虚拟机),它们需要相互通信,但我不想配置一个动态的、繁琐的、需要不断更新的 /etc/hosts 文件(因为不时会添加新的虚拟机),而是想设置一个内部 DNS 服务器。我所有的测试机器和虚拟机都运行 Linux。我在这方面有一些问题:
- 我可以设置 DNS 服务器,然后使用一个虚假域名(比如“example.com”,因为它是保留的)作为我的域名,就像在私有网络内部已知的域名一样吗?
- 我可以设置 DNS 服务器,使 /etc/resolv.conf 指向此服务器,以解析此私有/虚假域中主机的所有机器 IP 地址吗?但是,对于真实/实际存在的域,DNS 服务器应指向或从级联实际 DNS 服务器(即公共 DNS 服务器)获取已解析的 IP 地址?后者用于通过 NAT 代理从测试机器访问一般公共互联网。
- 我可以用 TinyDNS 做这种事情吗?我觉得 Bind 有点太吓人了,也许有点超出我的需要?
答案1
简短的回答是肯定的,而且您的域名是真是假并不重要。通常,最好使用您拥有的域名(或您拥有的域名的子域名)来避免将来出现潜在问题。使用您拥有的真实域名还可以获得该域名中名称的真实(公共信任)证书,而无需建立内部 PKI。
几乎任何 DNS 软件都可以支持您要执行的操作。它将充当“权威”和“递归”DNS 服务器。它将对区域example.com
(或任何区域)具有权威性,而递归是允许它不具有权威性的查询从互联网上得到解析的部分。
因此,您的客户端在其 resolv.conf 中仅指向您的 DNS 服务器。对任何内容的查询example.com
都会使用其记录进行解析。对任何其他内容的查询都会让 DNS 服务器访问互联网以获取答案,(可能)缓存它们,并将它们作为“非权威”响应返回给客户端。
答案2
我用域名系统用于类似目的。我在 Raspberry Pi 上运行它。它充当我网络的本地 DNS 服务器,因此所有客户端都会查询它。如果域不在其本地数据库或缓存中,它会向 Internet DNS 服务器进行查询(我进行了一些测试,看看哪个响应时间最快,并选择了这些服务器)。
通过此设置,您可以同时拥有真实和“虚假”域名。例如,在处理网站时,我可能会将真实域名的 IP 地址更改为 dnsmasq 服务器上的本地工作进度地址。当我完成工作并希望它访问互联网上的真实网站时,我只需删除该设置即可。(请记住,这是一个我可以完全控制的小型网络。在更复杂的情况下,您不会想这样来回更改)。
在 dnsmasq 中,您可以执行以下操作:
address=/myfakedomain.com/10.16.1.20
将对 myfakedomain.com 的查询重定向到指定的 IP 地址。您甚至可以执行以下操作:
address=/plex/10.16.1.55
使用户能够输入关键字并访问网络上的服务。
我还将它用作我的 DHCP 服务器,这是确保它作为网络主 DNS 服务器的一种方法。
答案3
尝试使用这个解决方案:https://github.com/mocktools/ruby-dns-mock 模仿任何类型的 DNS 记录都很容易!