我查看了手册页,但找不到 dnsmasq 缓存 DNS 的时间。缓存和过期的规则是什么?
我遇到一个问题,发送到外部服务的请求有时需要 5 到 10 秒才能进行名称查找。我可以将外部服务 ip 保存到 /etc/hosts,但我担心 ip 会发生变化。安装 Dnsmasq 可以改善名称查找,但名称查找缓慢的情况仍然会以较少的频率发生。
一个解决方案是在 cron 作业中设置一个简单的 ping,但我需要先找出到期时间。
谢谢。
更新
添加 dig 输出
; <<>> DiG 9.8.1-P1 <<>> api.mch.weixin.qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45012
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;api.mch.weixin.qq.com. IN A
;; ANSWER SECTION:
api.mch.weixin.qq.com. 0 IN A 140.207.69.102
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jul 17 19:24:36 2015
;; MSG SIZE rcvd: 55
更新2
之前的 dig 输出包含 TTL 为 0,这具有误导性。我已发布另一个 dig 输出。
; <<>> DiG 9.8.1-P1 <<>> api.mch.weixin.qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60900
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;api.mch.weixin.qq.com. IN A
;; ANSWER SECTION:
api.mch.weixin.qq.com. 181 IN CNAME forward.qq.com.
forward.qq.com. 181 IN A 101.226.90.149
forward.qq.com. 181 IN A 101.226.129.200
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jul 21 12:01:54 2015
;; MSG SIZE rcvd: 99
答案1
DNSmasq 使用 DNS TTL 值来确定缓存期限。您可以使用该dig
命令查询该域的 DNS 服务器的当前 TTL。
答案2
您需要为 dnsmasq 设置的选项是--min-cache-ttl
,该值以秒为单位。
根据 dig 的输出,TTL 为 0,如果你将其设置为,--min-cache-ttl=600
那么 dig 将返回的 TTL 值将为 600。api.mch.weixin.qq.com
我所在位置的 TTL 是 600,因此自己将其设置为 600 秒应该是相当安全的,可以避免错过任何 IP 更改。(我猜你在中国。)
这将导致所有 DNS 记录在 10 分钟内被视为有效。
查看 dnsmasq邮件列表消息详细介绍该功能。
答案3
问:超时是基于客户端的最后一次引用(“命中”)还是最后一次对 DNS 服务器的真正查找?如果客户端经常命中缓存(“命中”),并且这会更新最后一次引用的时间,那么对 DNS 服务器的真正查找将永远不会发生。假设客户端不断进行 getaddinfo() 调用,我们是否可以将 --min-cache-ttl 设置为 30,每 30 秒左右强制对服务器进行一次真正查找?谢谢