基本上我的问题是我正在运行虚拟机来开发网站。
主机的dns指向正在运行dnsmasq的Vm,它解析了各种开发站点的地址,即test.mysite.vm等。
问题是,当我从工作网络转到我的家庭网络时,它会因为虚拟机的IP发生变化而中断。是否可以根据请求来自哪个接口提供不同的IP地址?或者我应该尝试以完全不同的方式解决这个问题?
感谢您的帮助!
事实证明,有一个更简单的方法......
我现在在VM上设置了2个接口,不需要使用dnsmasq。
第一个只是一个桥接/共享接口,它允许VM使用每次我移动办公室时重新启动网络时主机可用的互联网连接。
第二个是与我的VM主机的私有连接,它具有静态IP地址。这是我用来连接和绑定任何服务的接口,如nginx,mysql等。
答案 0 :(得分:28)
您可以运行两个dnsmasq
实例,每个实例都有一个侦听的不同接口。您可以使用--interface=X
和--bind-interfaces
选项。默认情况下,它还绑定环回设备lo
,如果两个进程尝试绑定它,则会失败。使用--except-interface=lo
来避免这种情况。
dnsmasq --interface=eth0 --except-interface=lo --bind-interfaces --dhcp-range=192.168.0.2,192.168.0.10,12h
dnsmasq --interface=eth1 --except-interface=lo --bind-interfaces --dhcp-range=10.0.0.2,10.0.0.10,12h
在测试时确保配置文件为空,因为它始终会覆盖命令行。您也可以使用--conf-file=/dev/null
。
正如我在评论中提到的,我不太确定这对你的情况有何帮助,但它可能会帮助其他试图在两个不同界面上获得两个不同地址范围的人。
答案 1 :(得分:22)
在每个参数的开头添加界面对我来说很好。 示例(在dnsmasq.conf中):
dhcp-host=eth0,00:22:43:4b:18:43,192.168.0.7
dhcp-host=eth1,00:22:43:4b:18:43,192.168.1.7
我正在使用该版本:
$ dnsmasq --version
Version de Dnsmasq 2.68 Copyright (c) 2000-2013 Simon Kelley
答案 2 :(得分:19)
虽然@ 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。
根据man page,这会做到以下几点:
-y, - locise-queries
从/ etc / hosts返回DNS查询的答案,这取决于接收查询的接口。如果/ etc / hosts中的名称具有多个与之关联的地址,并且这些地址中至少有一个与发送查询的接口位于同一子网上,则仅返回该子网上的地址。这允许服务器在/ etc / hosts中具有与其每个接口相对应的多个地址,并且主机将基于它们所连接的网络获得正确的地址。目前,该设施仅限于IPv4。
答案 3 :(得分:7)
或者,您也可以在/etc/dnsmasq.d/
下创建多个配置文件,每个接口都要为dhcp提供服务。
例如,如果您有两个名为wlan0
和wlan1
的无线接口,并且您希望通过dnsmasq为它们提供dhcp,则可以在/etc/dnsmasq.d/
下创建两个文件来配置每个接口:
/etc/dnsmasq.d/dnsmasq-wlan0.conf
:
interface=wlan0 # Use interface wlan0
listen-address=10.0.0.1 # Explicitly specify the address to listen on
bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8 # Forward DNS requests to Google DNS
domain-needed # Don't forward short names
bogus-priv # Never forward addresses in the non-routed address spaces.
dhcp-range=10.0.0.50,10.0.0.150,12h # Assign IP addresses between 10.0.0.50 and 10.0.0.150 with a 12 hour lease time
/etc/dnsmasq.d/dnsmasq-wlan1.conf
:
interface=wlan1 # Use interface wlan0
listen-address=20.0.0.1 # Explicitly specify the address to listen on
bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8 # Forward DNS requests to Google DNS
domain-needed # Don't forward short names
bogus-priv # Never forward addresses in the non-routed address spaces.
dhcp-range=20.0.0.50,20.0.0.150,12h # Assign IP addresses between 20.0.0.50 and 20.0.0.150 with a 12 hour lease time
对我而言,这是一种非常干净的配置系统的方法,并且在重新启动之间保持配置。