为本地网络设置 dnsmasq

为本地网络设置 dnsmasq

我和一小群开发人员刚刚搬到新办公室,我想在我们的开发服务器上设置 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.devboxweb2.devboxweb73872.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=

这种方法的缺点是,所有以这种方式管理的名称都必须位于同一个域中。

相关内容