![主机文件中的所有子域名都指向一个IP吗?](https://linux22.com/image/483792/%E4%B8%BB%E6%9C%BA%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E5%AD%90%E5%9F%9F%E5%90%8D%E9%83%BD%E6%8C%87%E5%90%91%E4%B8%80%E4%B8%AAIP%E5%90%97%EF%BC%9F.png)
我有一个运行仅主机网络的 VirtualBox VM。此 VM 正在运行 Apache,我想在其中设置一组基于名称的虚拟主机,这些虚拟主机可以通过主机上的 Web 浏览器进行访问。
问题是,每次我为虚拟主机添加新的子域时,我都必须将其添加到 hosts 文件中。现在我有这样的内容:
192.168.56.3 vm site1.vm site2.vm site3.vm site4.vm ...
我想要达到同样的效果
192.168.56.3 vm *.vm
我知道 * 在 hosts 文件中不能用作通配符。除了运行实际的 DNS 服务器之外,还有其他方法可以实现所需的结果吗?我是否应该忍气吞声并继续手动添加到 hosts 文件中?
答案1
没有通配符的方法可以做到这一点 - 您要么实现 DNS 服务器,要么继续向 hosts 文件中添加条目。
如果您确实要安装 DNS 服务器,则无需安装bind
- 您可以安装一个简单的缓存 DNS 服务器,如totd
、dnsmasq
或maradns
。
无论您做什么,您都需要确保resolv.conf
包含新的 DNS 服务器,并且必须在其中出现以下条目(在此示例中,DNS 服务器安装在 localhost 上)...
nameserver 127.0.0.1
答案2
您可以使用dnsmasq
它,只需在配置文件中添加:
地址=/.vm/192.168.56.3
答案3
这是一个有趣的问题。正如您所提到的,主机文件本身不支持通配符。在 apache 机器上设置 bind 并让其成为 auth dns 服务器并正确指向 *.vm 是相当容易的,但这是一种解决方法(即使它是“正确”的解决方案)。
一定有办法欺骗 nscd,但我还没想出来。再给我点时间,我会更新这个答案
编辑
好吧,最好的选择是使用此漏洞来毒害 nscd 缓存,而无需诉诸于用大量虚拟主机填充主机文件这样的简单任务,也无需诉诸为该域配置绑定到身份验证这样的稍微复杂的任务:http://linuxgazette.net/154/misc/lg/conspire_dns_vulnerability_details.html
至少,今天我只能讲这么多了。也许如果我稍后觉得无聊,我会检查 nscd 的源代码,弄清楚如何直接注入信息。