虽然@kichik 的回答可能会奏效,但实现同样效果的更优雅的方法可能是使用localise-queries
指令和单个dnsmasq
服务器实例。
我假设您已经为不同的接口配置了 DHCP 范围,并且已经绑定dnsmasq
到这些接口。
将(部分记录的)localise-queries
选项添加到您的dnsmasq.conf
文件中。
# /etc/dnsmasq.conf
localise-queries
然后,确保dnsmasq
为您的主机读取的文件之一(例如/etc/hosts
)包含两个网络的 IP 地址条目,如下所示:
# /etc/hosts
127.0.0.1 dev-vm
192.168.1.1 dev-vm
10.0.0.1 dev-vm
更改/etc/hosts
文件的另一种方法是指定文件中的地址dnsmasq.conf
:
# /etc/dnsmasq.conf
localise-queries
host-record=dev-vm,127.0.0.1
host-record=dev-vm,192.168.1.1
host-record=dev-vm,10.0.0.1
因此,在这两种情况下,dnsmasq
将只提供与接口的 IP 和网络掩码匹配的 IP,用于在该特定接口上接收到的查询。
根据手册页,它执行以下操作:
-y,--本地化查询
从 /etc/hosts 返回 DNS 查询的答案,这取决于接收查询的接口。如果 /etc/hosts 中的一个名称有多个与之关联的地址,并且这些地址中至少有一个与发送查询的接口位于同一子网上,则仅返回该子网上的地址. 这允许服务器在 /etc/hosts 中拥有与其每个接口对应的多个地址,并且主机将根据它们所连接的网络获得正确的地址。目前,此设施仅限于 IPv4。