我和一小群开发人员刚刚搬到新办公室,我想在我们的开发服务器上设置 dnsmasq,这样当我们在那里部署 Web 应用程序时,我们就不必编辑自己的主机文件了。我们的路由器地址为 192.168.3.1,但我们无法访问它。我想我会在开发机上安装一个 DNS 服务器,我们都将其 IP 记录为辅助 DNS 服务器。不幸的是,我很难做到这一点。
开发服务器的名称是 devbox,它的 IP 是 192.168.3.99,它运行的是最新的 Ubuntu Server(Karmic)
我的电脑正在运行 Ubuntu 桌面(Karmic)
我想要实现的目标
假设我在开发环境中运行三个网站,分别是 website1、website2、website3。我想通过以下 URL 访问它们:
http://website1.devbox
http://website2.devbox
http://website3.devbox
因此,我在开发箱中配置了 Apache,安装了 dnsmasq,并将以下几行放入其 hosts 文件中:
192.168.3.99 website1.devbox
192.168.3.99 website2.devbox
192.168.3.99 website3.devbox
并编辑我自己的 resolv.conf 文件以将 devel box 作为名称服务器包含在内:
nameserver 192.168.3.99
它运行良好,我可以访问网站。问题是它的扩展性不好。我希望所有以 .devbox 结尾的域名都转发到开发箱,而这正是我所苦苦挣扎的。
我曾尝试过
192.168.3.99 devbox
进入 hosts 文件,并编辑 dnsmasq.conf 中的行:
# Add local-only domains here, queries in these domains are answered
# from /etc/hosts or DHCP only.
local=/devbox/
但我无法让它工作。如果我尝试任何未明确出现在开发箱的 hosts 文件中的 URL,DNS 查找就会失败。
本地指令是否用于其他目的?我是不是看错了地方?
答案1
请参阅DNSmasq 文档,尤其是域名系统手册页和示例配置文件。 这当地的关键字告诉 DNSmasq 使用本地数据执行这些域查找。这会影响发送到 DNSmasq 的请求foo.本地网络和本地网络例如。我不认为这是你想要的。
# Add local-only domains here, queries in these domains are answered
# from /etc/hosts or DHCP only.
local=/localnet/
要强制主机/子域名查找解析到特定地址,您可能需要使用地址关键字。下面的第二个示例应该允许web1.devbox和web2.devbox和web73872.devbox全部解析到指定的地址。
# Add domains which you want to force to an IP address here.
# The example below send any host in doubleclick.net to a local
# webserver.
address=/doubleclick.net/127.0.0.1
# for your example
address=/devbox/192.168.3.99
我在家里使用 DNSmasq 来处理 LAN 的简单 DNS 内容;在这种情况下,当地的以及相关领域和扩展主机关键字是合适的。DNSmasq 服务器是我的主名称服务器,因此所有请求都通过它;任何非本地地址都会传回 ISP 的名称服务器。如果可能,您可以考虑该配置。
答案2
您还可以在/etc/hosts
192.168.3.99 website1
192.168.3.99 website2
192.168.3.99 website3
192.168.3.100 website4
并告诉 dnsmasq 将所有名称扩展/etc/hosts
至.devbox
域中。
local=/localnet/
expand-hosts
domain=devbox
website3.devbox
应该可以解决。
这使您能够/etc/hosts
仅通过它来定义 DNS 名称,我发现这比 dnsmasq 条目更方便address=
。
这种方法的缺点是,所有以这种方式管理的名称都必须位于同一个域中。