现在我在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,然后被忽略。 对于指定了源地址但可直接将端口指定为源地址的一部分的服务器,查询端口标志将被忽略。