为什么 dnsmasq 返回不同的第一个答案

为什么 dnsmasq 返回不同的第一个答案

dnsmasq我正在运行带有和 的本地服务器unboundunbound正在监听127.0.0.1:5300服务器上的network.localdnsmasq正在监听0.0.0.0:53并且有一个配置行说明server=127.0.0.1#5300

如果我在服务器上unbound直接查询,每次都会得到相同的答案(由于缓存,TTL 会发生变化)。这包括权限部分:

# dig @127.0.0.1 -p 5300 tomshardware.com

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @127.0.0.1 -p 5300 tomshardware.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60324
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tomshardware.com.              IN      A

;; ANSWER SECTION:
tomshardware.com.       60      IN      A       52.25.172.230
tomshardware.com.       60      IN      A       54.69.85.242
tomshardware.com.       60      IN      A       54.187.95.69

;; AUTHORITY SECTION:
tomshardware.com.       172800  IN      NS      ns-1533.awsdns-63.org.
tomshardware.com.       172800  IN      NS      ns-1591.awsdns-06.co.uk.
tomshardware.com.       172800  IN      NS      ns-185.awsdns-23.com.
tomshardware.com.       172800  IN      NS      ns-840.awsdns-41.net.

;; Query time: 1 msec
;; SERVER: 127.0.0.1#5300(127.0.0.1)
;; WHEN: Mon Apr 11 14:54:54 CEST 2016
;; MSG SIZE  rcvd: 230

而且无论我进行多少次查询,这个答案都是一样的。询问dnsmasq将得到不同的第一个答案。特别是,它剥离了权限部分。

# dig @127.0.0.1 tomshardware.com

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @127.0.0.1 tomshardware.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30492
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tomshardware.com.              IN      A

;; ANSWER SECTION:
tomshardware.com.       2074    IN      A       54.69.85.242
tomshardware.com.       2074    IN      A       52.25.172.230
tomshardware.com.       2074    IN      A       54.187.95.69

;; AUTHORITY SECTION:
tomshardware.com.       125528  IN      NS      ns-1533.awsdns-63.org.
tomshardware.com.       125528  IN      NS      ns-1591.awsdns-06.co.uk.
tomshardware.com.       125528  IN      NS      ns-185.awsdns-23.com.
tomshardware.com.       125528  IN      NS      ns-840.awsdns-41.net.

;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Apr 11 14:56:20 CEST 2016
;; MSG SIZE  rcvd: 230

请注意上面的当前权限部分。再次运行完全相同的查询会得到较少的答案。

# dig @127.0.0.1 tomshardware.com

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @127.0.0.1 tomshardware.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48837
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tomshardware.com.              IN      A

;; ANSWER SECTION:
tomshardware.com.       2073    IN      A       54.187.95.69
tomshardware.com.       2073    IN      A       52.25.172.230
tomshardware.com.       2073    IN      A       54.69.85.242

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Apr 11 14:56:21 CEST 2016
;; MSG SIZE  rcvd: 93

为什么是这样?

似乎是 pr. 客户端。因此,在运行上述操作后(仍然没有得到完整的答案),我仍然可以在桌面上获取权限部分 - 只是第二次不行。

答案1

我一直在寻找这个问题的答案,但没有找到官方解释或文件来解释为什么第一个答复不同。

根据我的测试,Dnsmasq 的第一个答案似乎始终是直接从上游收到的 DNS 回复,并且如果上游 DNS 服务器提供,则可以包含扩展的AUTHORITY SECTION和:ADDITIONAL SECTION

Dnsmasq 第一个答案

接下来的回复来自 Dnsmasq 缓存,通常只包含ANSWER SECTIONIP 或 CNAME:

Dnsmasq 第二个答案

它会持续给出较短的 DNS 答案,直到缓存 TTL 过期。之后,它会显示一个包含扩展部分的回复。

似乎没有办法强制 Dnsmasq 始终使用来自缓存的“更干净”的 DNS 回复进行回答(至少我所知道的)。

然而,现在 Dnsmasq 的新版本中有一个选项可以作为解决方法:

--use-stale-cache

这样,即使缓存已过期,Dnsmasq 也能显示来自缓存的答案。

这仍然会在该域的第一个查询中给出不同的扩展第一个答案,但之后它似乎会返回更短的“更干净”的 DNS 回复,即使缓存 TTL 已过期。

来源:https://thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html

相关内容