测试了几家主流 DNS 的 ECS 功能

19 天前
 baraja
这几天折腾了一下自建 AdGuard Home 的上游 DNS ,发现某些号称支持 ECS 的 dns 比如 nextdns 、cloudflare-gateway 都不太适合作为 AGH 的上游。因为一旦这么设置了,AGH 的根据 subnet 来进行缓存的功能无法生效,反而会认为这些 dns 不支持 ECS ,继而使用通用的缓存策略。这样移动/联通/电信/海外发过去的请求会一致得到缓存里的应答,这样的 ECS 名存实亡。

我一开始以为这是 AGH 的 bug ,去 issue 里面找到了这个类似问题,看他们扯皮半天 AGH 一口咬定这不是 bug
https://github.com/AdguardTeam/AdGuardHome/issues/5757
而是认为 cloudflare-gateway dns 的应答里面缺少下述的 CLIENT-SUBNET 信息,所以不知道怎么根据 subnet 来缓存
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
; CLIENT-SUBNET: 192.0.0.0/16/16

不过我尝试搭建 unbound 之后,发现 unbound 对 cf-gateway nextdns 上游的 ecs 缓存策略也是一样的,看来也许是某些宣称支持 ECS 的 dns 有点不完美

经过一番测试,我锁定了几个完美支持 ECS 的 dns ,具体测试结果如下:


- 完美支持 ECS:

alidns (建议开通阿里云的免费版,每月 1000 万次查询)
dnspod (建议开通 dnspod 的免费版,每月 300 万次查询,比公共的免费版快得多了去了)
google ( doh dot 国内较难连上,需要走隧道,也可以在海外 vps 上 unbound 自建来转发 ecs )
quad9 的 9.9.9.9.11 或 9.9.9.12 (作为上游偶尔会抽风不支持 ECS 的缓存……不知何故)
adguard dns (注意不是 adguard home 自建,而是去 adguard-dns.io 免费开通)
使用 unbound 自建的 dns (上游需要使用前述几家之一)

以上这些均完美支持 ECS ,因为
1. 根据 AGH 使用它们作为上游,根据 subnet 缓存请求的功能均一切正常
2. 请求直接发到这几家 dns ,ecs 的缓存策略也完美


- 不完美支持 ECS:
360dns
nextdns
cloudflare-gateway
AdGuard Home 自建 dns (这里应该是 AGH 自己的 bug 了,下游的 AGH 无法识别到 subnet 来缓存 ecs 请求)

以上几家不适合作为 AGH/unbound 的上游,但直接发请求过去是可以正常根据 subnet 来缓存的


- 废柴般支持 ECS:
cisco opendns (根据客户端 IP 来缓存,而无视客户端传过来的 subnet )
2989 次点击
所在节点    DNS
28 条回复
baraja
18 天前
@fanxasy 阿里完美支持 ECS 的,https://v2ex.com/t/963505 这个帖子有提到“阿里只是在三大运营商网内的后端不支持 ECS (即不会向权威提交 ECS 地址解析准确度全靠后端在国内覆盖地区的数量)但入口是支持的,假如你提交的 IP 不属于三大运营商阿里就会转发到支持 ECS 后端进行查询”
我写的命令错了,linux 下面要--subnet 而不是/subnet
q A www.iqiyi.com --subnet 210.5.157.0/24 @https://1.12.12.12:443/dns-query 电信
q A www.iqiyi.com --subnet 139.226.196.0/24 @https://1.12.12.12:443/dns-query 联通
q A www.iqiyi.com --subnet 211.136.112.0/24 @https://1.12.12.12:443/dns-query 移动
可以看到三次结果 IP 都不同
fanxasy
18 天前
@baraja #21 感谢,成功复现了

还想问下目前国内的 ecs 只能根据运营商去响应吗,可不可以根据省市地域响应最近的结果
TanKuku
17 天前
阿里云的账号绑定的 doh ,请求一次使用明细里面的抵扣量就几千上百了,不清楚计算方式
baraja
17 天前
@fanxasy 是响应离自己最近的,但是公共 dns 效果肯定不如当地运营商效果好,毕竟阿里腾讯没在每个省都部署 dns
baraja
17 天前
@TanKuku 具体确实不明,但目前看起来正常使用不会超,而且 AGH 有缓存
HalloCQ
15 天前
感谢测试,很有参考价值
hiyoi
14 天前
请教一下 ADH cache 设置,最小 TTL 和最大 TTL 怎么设置比较好?
baraja
13 天前
@hiyoi 开乐观缓存就好,这个可以不用改

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

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

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

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

© 2021 V2EX