如何强制dnsmasq仅将上游dns服务器用于某些指定的域名?


16

现在,我在dnsmasq.conf中具有以下行,该行可以很好地处理所有请求(/#/匹配任何域;这是必需的):

address=/#/127.0.0.1

但是,有些域需要解析为IP地址,而不是127.0.0.1

作为临时解决方案,它们已添加到/etc/hosts

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

不幸的是,这是一个非常临时的解决方案:任何目标域的IP地址更改后,它将停止工作。

我的问题是:如何强制dnsmasq使用上游dns服务器来解析某些(指定)域名的IP地址?

Answers:


29

您可以使用server=指令来做到这一点,例如

server=/ajax.googleapis.com/8.8.8.8

会类似地向Google公共DNS服务器查询ajax.googleapis.com域。

server=/amazonaws.com/209.244.0.3

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

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

server=/co.uk/com/8.8.4.4

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

您也可以有多个server=指令

-S,-server = [/ [<域>] / [域/]] [<ipaddr> [#<端口>] [@ <源> [#<端口>]]]]

直接指定上游服务器的IP地址。设置此标志不会抑制对/etc/resolv.conf的读取,请使用-R做到这一点。如果给出一个或多个可选域,则该服务器仅用于那些域,并且仅使用指定的服务器查询它们。这是供私人名称服务器使用的:如果您的网络上有一个名称服务器,其名称格式为xxx.internal.thekelleys.org.uk,地址为192.168.1.1,则给出标志-S /internal.thekelleys.org.uk/ 192.168.1.1会将对内部计算机的所有查询发送到该名称服务器,其他所有内容将发送到/etc/resolv.conf中的服务器。一个空的域规范,//的特殊含义是“仅非限定名称”,即名称中没有任何点。可以使用#字符将非标准端口指定为IP地址的一部分。

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

@字符后的可选第二个IP地址告诉dnsmasq如何设置查询到此名称服务器的源地址。它应该是运行dnsmasq的计算机的地址,否则将记录该服务器行,然后将其忽略。对于指定了源地址的任何服务器,都将忽略query-port标志,但是可以直接将端口指定为源地址的一部分。


我认为他不需要多server行:无论他想解决的地址是什么(127.0.0.1),他都可以用address行添加它们;其他情况,DNSMasq将查询server。可以肯定,这就是我的设置方式。
gravyface

1
@gravyace:我读这个问题是想使所有内容都解析为127.0.0.1,但有些例外,他想使用DNS来解决地址更改的情况,因为我看到这样做的方法是使用服务器指令。
user9517 2012年

哦,也许吧。谁知道。无论哪种方式,这都应该使他继续前进。
gravyface

奇迹般有效!
nrph 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.