如何强制dnsmasq为某些主机使用dns?

现在我在dnsmasq.conf中有通配符,可以处理所有请求(这是必需的):

address=/#/127.0.0.1 

然而,有一些域需要正确的IP地址,而不是127.0.0.1。

作为临时解决scheme,他们已经被添加到/ etc / hosts文件中:

 209.85.148.95 ajax.googleapis.com 207.97.227.245 underscorejs.org 72.21.194.31 s3.amazonaws.com 

不幸的是,这是一个非常临时的解决scheme – 只要ip发生变化就会停止工作。

我的问题是:如何强制dnsmasq使用DNS来parsing某些域名的IP?

你可以通过使用server=指令例如

 server=/ajax.googleapis.com/8.8.8.8 

将类似地查询谷歌公共DNS服务器的ajax.googleapis.com域

 server=/amazonaws.com/209.244.0.3 

会查询Level3的公共DNS服务器的amazonaws.com域。

您可以将多个域组合在一起

 server=/co.uk/com/8.8.4.4 

将8.8.4.4发送.co.uk和.com域到DNS服务器

你也可以有多个server=指令

-S,–server = [/ [<domain>] / [domain /]] [<ipaddr> [#<port>] [@ <source> [#<port>]]]]

直接指定上游服务器的IP地址。 设置这个标志不禁止读取/etc/resolv.conf,使用-R来做到这一点。 如果给出一个或多个可选域,则该服务器仅用于这些域,并且仅使用指定的服务器查询。 这是专用于名称服务器:如果你的networking上有一个名称服务器,它处理的forms是xxx.internal.thekelleys.org.uk,名字是192.168.1.1,然后给出标志-S /internal.thekelleys.org.uk/ 192.168.1.1会把所有内部机器的查询发送到这个名字服务器,其他的一切都会去/etc/resolv.conf中的服务器。 一个空的域名说明//具有“非限定名称”的特殊含义,即名称中没有任何点。 可以使用#字符将非标准端口指定为IP地址的一部分。 允许多个-S标志,并根据需要重复使用域名或ipaddr部分。

同样允许的是一个给出一个域但是没有IP地址的-S标志; 这告诉dnsmasq一个域是本地的,它可以回答来自/ etc / hosts或DHCP的查询,但不应该将该域上的查询转发到任何上游服务器。 本地是服务器的一个同义词,在这种情况下使configuration文件更清晰。

@字符后的可选第二个IP地址告诉dnsmasq如何将查询的源地址设置给这个名称服务器。 它应该是一个属于dnsmasq正在运行的机器的地址,否则这个服务器行将被logging,然后被忽略。 对于指定了源地址但可直接将端口指定为源地址的一部分的服务器,查询端口标志将被忽略。