我使用阻止某些域的公共 DNS 提供商 (nextdns.io)。这些被阻止的域在dig
-ed 时会返回如下响应:
; <<>> DiG 9.16.1-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63541
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;example.com. IN A
;; Query time: 66 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Wed Jul 22 12:03:25 CDT 2020
;; MSG SIZE rcvd: 33
我在 DD-WRT 路由器上使用 dnsmasq 来处理来自本地网络上设备的所有 DNS 查询。有没有办法配置 dnsmasqNOERROR
用 0 ANSWER
/缓存这些结果AUTHORITY
?
查看日志,我可以看出我的上游 DNS 提供商继续受到我网络上的客户端试图频繁访问某些被阻止的域的攻击。
我浏览了 dnsmasq 手册页,但我看到的缓存/ttl 标志似乎对这些类型的响应没有影响,因为它们不是负面的(例如NXDOMAIN
)可缓存的,但根本没有答案。我知道我可以通过添加类似的记录来显式处理我的 dnsmasq 配置中的某些域address=/.example.com/::
,但我更愿意在我的 dnsmasq 添加一个缓存/ttl,以便在尝试从上游查询答案之前缓存 300 秒之类的没有答案再次。
NODATA
缓存方面的主要问题是,这是某种形式的损坏响应(根据建议的意图,我认为损坏了)。DNS 缓存基于一些 TTL,对于肯定响应,RRSet TTL,对于否定响应,缓存 TTL 基于
SOA
该部分中的记录AUTHORITY
(特别是使用的 TTLMIN(SOA TTL, SOA.MINIMUM)
)。无论是否定响应
NXDOMAIN
还是NODATA
(NOERROR
带空ANSWER
),这些响应类型始终在该部分中具有相关SOA
记录。AUTHORITY
如果过滤 DNS 提供商也为过滤的域提供有效响应(即,正确的
NXDOMAIN
或NODATA
响应),那当然会更好。解决这个问题并不一定很简单,因为这不是一种应该存在的响应类型,也不一定有一个选项来捕捉这种情况。
但是,您正在使用
dnsmasq
,根据dnsmasq 手册,它有一个似乎可以处理这种情况的设置: