虽然 @kichik 的答案可能行得通,但更加优雅的方法是使用 localise-queries
指令和一个单独的 dnsmasq
服务器实例来实现同样的功能。
我假设您已经为不同接口配置了DHCP范围,并将 dnsmasq
绑定到这些范围。
将 (部分记录在案的) localise-queries
选项添加到您的 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
文件中指定地址:
一个替代方案是在dnsmasq.conf
文件中指定地址,而不是更改/etc/hosts
文件:
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, --localise-queries
返回来自/etc/hosts的DNS查询答案,这些查询答案依赖于接收查询的接口。如果/etc/hosts中的名称有多个关联地址,并且这些地址中至少有一个与发送查询的接口位于同一子网上,则仅返回该子网上的地址。这允许服务器在/etc/hosts中具有与其每个接口相对应的多个地址,并且基于它们所连接到的网络,主机将获取正确的地址。目前,此功能仅限于IPv4。