Dnspod 附带国内 edns 时,但有时候仍然会解析到国外的 cdn 节点

2022-03-26 00:09:57 +08:00
 loukky

使用的 adguard ,已经开启 edns 选项。上游设置为 dot.pub 。机器在国外
www.jd.com 为例。
如图:
正确解析到国内 CDN: 不正确解析到了国外 CDN: @johnjiang85 麻烦反应下相关同学

3561 次点击
所在节点    DNS
14 条回复
ZE3kr
2022-03-26 08:41:47 +08:00
大多数权威 DNS 的 edns 有设置白名单,只有 Google 、114 等常用 DNS 请求才认 edns ,自己搭建的 dns (非权威)解析服务器的 edns 是被忽略的。
ZE3kr
2022-03-26 08:50:31 +08:00
https://gist.github.com/ZE3kr/210fc3bc6a1318ef1e60d15cbe38119c

破案了,是 JD 的权威服务器不支持 ENDS 。这个锅 DNSPod 不背
loukky
2022-03-26 09:37:50 +08:00
@ZE3kr 但大部分时候是正常的,包括使用谷歌 DNS 解析
loukky
2022-03-26 10:31:34 +08:00
johnjiang85
2022-03-26 20:46:34 +08:00
DNSPod 目前的 DoT 解析结果完全以权威返回结果为准,国内下周将切换到正式环境
johnjiang85
2022-03-26 20:51:24 +08:00
正式环境的 120.53.53.53 和 1.12.12.12 将增加一层缓存,谷内到省级运营商,国外到国家级,对于普通域名不会再按照网段缓存结果,即同时受 dot.pub 和权威的 IP 库准确度影响。
海外的切换会晚一些时间,未切换前还是完全以权威返回为准,按照网段缓存结果,完全依赖于权威的 IP 库准确度,如果权威的 IP 库不准,那就会解析错误。
国内目前的权威 DNS IP 库准确度比较高的是我们 DNSPod 和 51dns ,部分对比结果可以参照公众号“老高的互联网杂谈”
johnjiang85
2022-03-26 21:03:25 +08:00
京东的权威 DNS 对 ECS 的只是不完整或不同服务器数据不一致,可以看以下返回,有时候可以返回非 0 的 scope mask ,有时候返回 0 的 scope mask ,0 表示不支持 ecs 或者没有分线路解析,解析结果将按照全局缓存。

dig @ns1.jdcache.com www.jd.com +subnet=119.6.6.6

; <<>> DiG 9.10.6 <<>> @ns1.jdcache.com www.jd.com +subnet=119.6.6.6
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59784
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; CLIENT-SUBNET: 119.6.6.6/32/24
;; QUESTION SECTION:
;www.jd.com. IN A

;; ANSWER SECTION:
www.jd.com. 120 IN CNAME www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com. 60 IN CNAME www.jdcdn.com.
www.jdcdn.com. 720 IN CNAME img20.360buyimg.com.s.galileo.jcloud-cdn.com.

;; Query time: 114 msec
;; SERVER: 111.13.28.10#53(111.13.28.10)
;; WHEN: Sat Mar 26 21:00:02 CST 2022
;; MSG SIZE rcvd: 168

dig @ns1.jdcache.com www.jd.com +subnet=119.6.6.6

; <<>> DiG 9.10.6 <<>> @ns1.jdcache.com www.jd.com +subnet=119.6.6.6
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45079
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; CLIENT-SUBNET: 119.6.6.6/32/0
;; QUESTION SECTION:
;www.jd.com. IN A

;; ANSWER SECTION:
www.jd.com. 120 IN CNAME www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com. 60 IN CNAME www.jdcdn.com.
www.jdcdn.com. 720 IN CNAME img20.360buyimg.com.s.galileo.jcloud-cdn.com.

;; Query time: 124 msec
;; SERVER: 111.13.28.10#53(111.13.28.10)
;; WHEN: Sat Mar 26 21:00:11 CST 2022
;; MSG SIZE rcvd: 168
johnjiang85
2022-03-26 21:09:26 +08:00
当某个海外的 IP 先请求了该域名,且返回了海外的结果之后,如果返回的 scope mask 为 0 ,即作为全局缓存,那么后面其他的任意 Ip 再请求也都会拿到海外的结果,权威的错误返回如下所示(。-> .)。

dig @ns1 。jdcache 。com www 。jd 。com +subnet=8 。8 。8 。8

; <<>> DiG 9 。10 。6 <<>> @ns1 。jdcache 。com www 。jd 。com +subnet=8 。8 。8 。8
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50719
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; CLIENT-SUBNET: 8 。8 。8 。8/32/0
;; QUESTION SECTION:
;www 。jd 。com 。 IN A

;; ANSWER SECTION:
www 。jd 。com 。 120 IN CNAME www 。jd 。com 。gslb 。qianxun 。com 。
www 。jd 。com 。gslb 。qianxun 。com 。60 IN CNAME jd-abroad 。cdn20 。com 。

;; Query time: 137 msec
;; SERVER: 111 。13 。28 。10#53(111 。13 。28 。10)
;; WHEN: Sat Mar 26 21:05:49 CST 2022
;; MSG SIZE rcvd: 119
loukky
2022-03-27 00:35:13 +08:00
@johnjiang85 所以等 dnspod 国外版更新以后,这个错误的缓存就会得到解决了吗?
johnjiang85
2022-03-27 09:36:39 +08:00
@loukky 可以解决。但是只是顺带的,毕竟这不是 dot.pub 的问题,是京东权威的问题。
loukky
2022-03-27 20:03:07 +08:00
@johnjiang85 其实不仅仅是京东的域名出现这个问题,谷歌的也会。我觉得你们要缓存的话应该以分成以国内和国外的结果分别缓存。而且像请求的时候附带子网这种应该还是比较好来分开缓存的
bclerdx
2022-04-05 22:24:46 +08:00
@johnjiang85 您说的 scope mask 非 0 和 0 是是指您这段命令中的:CLIENT-SUBNET: 119.6.6.6/32/24 和 CLIENT-SUBNET: 119.6.6.6/32/0 中的 [/24 ,即非 0] 和 [/0 ,即 0]

您说的:只是,应该是支持吧?

以上我的理解没有错误吧?

另外,啥叫:按照全局缓存?没有理解这层含义?麻烦童学解释一下,谢谢。
bclerdx
2022-04-05 22:28:04 +08:00
@johnjiang85 现在是不是已经切刀了正式环境了?
johnjiang85
2022-04-06 10:40:07 +08:00
@bclerdx 可以看下 ECS 的 RFC 或者 Google 的开发者文档,返回 scope mask 为 0 表示匹配后续所有网段过来的请求,即任何 IP 过来请求都可以直接应答,就相当于没有设置分线路解析。

doh 国内已经切换了大部分,dot 暂时还没有,这几天吧。海外切换还没有具体时间。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842964

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX