2012-02-17 182 views
18

基本上我的问题是,我运行VM开发网站。的dnsmasq,服务于不同的IP地址的基础上使用的接口

该主机具有其DNS在其运行的dnsmasq从而解决各种开发网站的地址指向虚拟机,即test.mysite.vm等

的问题是,当我从我的工作网络去我的家庭网络全部因为虚拟机IP改变而中断。是否可以根据请求来自哪个接口来提供不同的IP地址?或者我应该试图以完全不同的方式解决这个问题?

感谢您的帮助!

+0

不同界面在哪里起作用?你的家庭网络和工作网络使用两种不同的接口吗?为什么虚拟机的IP更改? – kichik 2012-11-08 18:59:49

+0

是的,它是2个不同的家庭(192.168.0。*)和工作(10.0.0。*)接口。工作IP和家庭IP之间的变化。 – 2012-11-13 10:10:00

回答

23

您可以用不同的接口,它监听上运行的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

正如我在评论中提到的,我也不太清楚如何帮助您的情况,但它可能会帮助别人谁试图让两个不同的接口,两个不同的地址范围。

+0

真的没有办法让2个网络没有运行多个实例吗?这确实使事情变得复杂 – TheLQ 2012-12-11 15:43:50

+3

您可以在同一个命令中实际使用'--dhcp-range ='多次来让它为两个网络服务。这也可能对原始问题起作用。它可能会根据接口的IP地址推断正确的IP范围。 – kichik 2012-12-11 20:11:06

+0

确保配置选项'listen-address = 0.0.0.0'在配置文件中被注释掉。例如'#listen-address = 0.0.0.0' – 2016-04-24 01:02:24

13

虽然@ 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 

如b A结果超视距情况下,dnsmasq将只能是该接口的针对特定接口上收到的查询IP地址和子网掩码相匹配的IP。

按照man page,该执行以下操作:

-y,--localise查询

返回答案,从/ etc/hosts中的DNS查询依赖的接口在其上查询已收到。如果/ etc/hosts中的名称具有多个与之关联的地址,并且这些地址中的至少一个与发送查询的接口位于同一子网上,则只返回该子网上的地址(es) 。这允许服务器在每个接口对应的/ etc/hosts中有多个地址,并且主机将根据它们所连接的网络来获取正确的地址。目前该设施仅限于IPv4。

16

在每个参数的开头添加接口对我来说工作正常。 例子(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 
+1

当使用'dhcp-range'而不是'dhcp-host'时也适用于我。这应该是当前dnsmasq版本的可接受解决方案。 – Dyna 2015-04-06 10:17:56

+0

@Dyna它的作品,但它没有记录或我错过了什么? – Murmel 2016-03-18 09:05:36

+1

@ user1885518我一直在努力解决同一个问题,直到我在[man page]中找到它(http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html):'The tag“bootp “被设置为BOOTP请求,并且名称是请求到达的接口的名称的标签也被设置。所以总是有一个以请求到达的接口命名的标签。对于多vlan dhcp非常有用。 – GnP 2016-08-01 19:51:02

4

另外,您还可以创建多个配置文件/etc/dnsmasq.d/,一个是你要投放的每个接口DHCP。

例如,如果你有一个名为wlan0wlan1两个无线接口,并且要服务于他们DHCP感谢的dnsmasq,您可以/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 

对我牛逼帽子是配置系统的一种非常干净的方式,并且配置在重新启动之间保持不变。

+0

你能帮我解决类似的情况吗?我无法破解解决方案。 http://serverfault.com/questions/825601/dnsmasq-config-for-captive-portal – 55597 2017-02-15 14:14:00

+0

这是行不通的,因为dnsmasq只是按顺序读取这些文件,并且/etc/dnsmasq.d/中的所有文件都被认为是单一配置。 – Dingo 2017-04-20 01:00:38

+0

@MariusMatutiae同意,一个非常好的答案 – KGCybeX 2017-07-04 18:50:08