Dnsmasq 2.86及以上版本如何配置返回NXDOMAIN以拦截所有域名
Dnsmasq 2.86及以上版本如何配置返回NXDOMAIN以拦截所有域名
我完全懂你的烦恼!Dnsmasq 2.86版本更新后,之前好用的address=/#/语法确实失效了,换成address=/#/#又只会返回0.0.0.0这种空地址,根本达不到你想要的直接返回NXDOMAIN拦截所有查询的效果。
我整理了两个亲测有效的方案,帮你解决这个问题:
方案一:利用本地域名规则强制返回NXDOMAIN
把所有域名标记为本地域名,同时禁用hosts文件读取和上游DNS查询,让Dnsmasq直接返回NXDOMAIN。在dnsmasq.conf里添加以下配置:
local=/#/ no-hosts no-resolv
local=/#/:告诉Dnsmasq所有域名都属于本地范围,不会转发到外部DNSno-hosts:关闭系统hosts文件的读取,避免某些本地记录意外生效no-resolv:不使用/etc/resolv.conf里的上游DNS服务器,确保所有查询都由Dnsmasq自己处理
方案二:转发到无效端口触发NXDOMAIN
配置Dnsmasq把所有查询转发到一个不存在的本地端口,当连接失败时,Dnsmasq就会返回NXDOMAIN。配置代码如下:
server=/#/127.0.0.1#9999 no-resolv
server=/#/127.0.0.1#9999:将所有域名查询转发到本地9999端口(这个端口默认没有任何服务在运行)no-resolv:防止查询被转发到其他上游DNS,确保所有请求都走这个无效端口
配置完成后,记得重启Dnsmasq服务生效。你可以用nslookup example.com或者dig test.com测试一下,应该就能看到返回的NXDOMAIN结果了。
备注:内容来源于stack exchange,提问作者stargazer
相关产品推荐
相关产品推荐

