使用 dnsmasq 为多个子网提供服务

使用 dnsmasq 为多个子网提供服务

我对 dnsmasq 的使用还很陌生,我想继续在我的实验室环境中使用它。但是,作为新手,我不确定要使用哪些命令/文件。我花了两天时间研究和了解我的环境是如何配置的,现在我愿意重新做整个虚拟机。

结束状态:我想要配置运行 dnsmasq 的虚拟机,使其能够同时作为三个 VLAN 的 DNS 和 DHCP 服务器,每个 VLAN 都有自己的子网。

我的环境:

  • 带有三个虚拟网卡的 ubuntu 14.04 服务器的 VMware vm
  • 每个 NIC 都分配给一个 vmware 分布式交换机端口组,并且分布式交换机将 VLAN 中继到它
  • 每个端口组分配一个vlan
  • 三个(示例)子网分别为 10.1.1.0/24、10.2.1.0/24 和 10.2.2.0/24
  • 该路由器是 Cisco Catalyst 3560

有人能一步一步解释如何设置 dnsmasq 以达到所需的最终状态吗?这不仅对我有帮助,而且可以让其他人获得这些说明以供将来使用。

虽然我不希望有太多特定于环境的细节(以使其适用于更广泛的受众),但如果有什么需要澄清的,请告诉我。

到目前为止我已经尝试过:

  • 在 /etc/networks/interfaces 文件中声明每个网卡的 IP 地址、网络掩码、网络和广播。我在第一个接口中添加了网关和名称服务器选项,但不起作用。

  • 一个看起来很有希望的问题/答案建议我将其放入配置中:后上行路由通过 10.2.2.1 dev eth1 添加 10.2.2.10,后上行路由通过 10.1.1.1 dev eth2 添加 10.1.1.10,但这也不起作用。

  • 我在 dnsmasq 配置中尝试了两种类型的监听,一种基于我分配给 nic 的静态 IP,另一种基于接口名称,这是我目前所拥有的:

    interface=eth0 no-dhcp-interface=eth0 interface=eth1 interface=eth2 no-dhcp-interface=eth1 no-dhcp-interface=eth2

  • 我已设置选项三来指定每个网关以及每个接口的范围: dhcp-range=eth0,10.2.1.121,10.1.1.249,24h dhcp-option=eth0,3,10.2.1.1

  • 我设置了选项 6,但随后系统提示我运行该命令dnsmasq -y,但一直出现绑定错误。因此我注释掉了该选项。然而,我得到的结果是: dhcp-option=eth0,6,10.2.1.10

截至目前,如果我静态地为 10.1.1.0/24 子网上的虚拟机提供一个地址,它可以 ping 其他子网上的其他虚拟机。但是,当我尝试 ping 10.1.1.10(分配给该子网的 dnsmasq 网卡的 ip 地址)时,它无法解析。dnsmasq 服务器仍可用于为其配置的第一个子网(10.2.1.0/24),但我想让它可用于其他两个子网。

另外,需要澄清的是,当我说它不起作用时,我的意思是我在其中一个新子网上的测试虚拟机无法 ping 通其子网的 DNS 地址,也无法访问互联网。

因此,重申一下,我希望将我所拥有的达到上面描述的最终状态,虽然我认为社区将从如何为他们的工程师逐步设置这种类型的环境中受益更多,但我需要的是弄清楚我需要做什么才能将我当前的状态转移到最终状态。

我在这里先向您的帮助表示感谢!

答案1

我与一位之前处理过此类事情的朋友进行了交流,以下是我们为使环境达到最终状态所采取的措施。

首先,我从来不用 dnsmasq -y,只要我重启 dnsmasq 服务和测试虚拟机,它就能正常工作

我们做的第一件事是修复 dnsmasq 服务器。在 /etc/network/interfaces 中,指定该网卡所需的 IP 地址,使用网络掩码 255.255.255.0,并定义该网卡的网络。它看起来如下:

auto eth1
iface eth1 inet static
 address 10.2.2.10
 netmask 255.255.255.0
 network 10.2.2.0
 broadcast 10.2.2.255

唯一的变化是 eth0,其中已经有这三行。不确定是否需要它们(希望其他人可以澄清这一点),但这是我添加的内容:

up route add default gw 10.2.1.1
dns-search      my.lab
dns-nameservers <Corp-DNS-server>

我还删除了两条后向上路线,因为它们是不需要的。

最后,我需要修复 dnsmasq.conf;在这里我添加了 lo 接口并注释掉了 no-dhcp-interface:

interface=lo
interface=eth0
interface=eth1
interface=eth2
#no-dhcp-interface=eth0
#no-dhcp-interface=eth1
#no-dhcp-interface=eth2

这解决了服务器问题。要实现最终状态,下一步就是配置路由器以允许跨 VLAN 通信。在回答这个问题之前我已经这样做了,但这里有一篇文章介绍如何进行配置:http://www.cisco.com/c/en/us/support/docs/lan-switching/inter-vlan-routing/41860-howto-L3-intervlanrouting.html

最后,我发现测试虚拟机没有将名称服务器添加到其 resolv.conf 中,因此我将一个名为 tail 的文件添加到 /etc/resolvconf/resolv.conf.d/,并简单地添加了该子网的 DNS 服务器的 IP:

nameserver 10.1.1.10

完成此操作后,我就可以运行apt-get update并 ping 我的 dns 名称。然后,我还更改了测试 vm 的接口文件,以便它能够获取 dhcp 地址,并且一旦我重新启动,它就能够接收 dhcp 地址。

希望这对大家有所帮助!如果您希望我澄清,请随时发表评论。

相关内容