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

22 天前
 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 )
3139 次点击
所在节点    DNS
30 条回复
baraja
22 天前
当然 ECS 现在看起来就是个鸡肋功能。
最佳的策略还是用域名分流,国内用运营商 dns ,国外反正都走代理了,解析连接都交给远端就没有 ECS 什么事了
baraja
22 天前
遗漏了几个测试结果:

完美支持的还有:字节 dns
支持有问题的还有:mosdns 自建
crysislinux
22 天前
ecs 兜底很有用
gentrydeng
22 天前
AdGuard DNS 的 ECS 可用?
使用中国电信网络请求的 ECS 会被替换为中国电信南非 IP 地址段,而且这是他们的预期实现,不会更改。
dalaoshu25
22 天前
这是我的 AdGuard Home 用的上游:

208.67.220.220
[2620:119:35::35]
tls://8.8.8.8
https://doh.pub/dns-query
[/docker.io/] tls://1.1.1.1

当然了,我的 AGH 运行在境外的 VPS 上,家里路由器通过 DoH 访问过去,不开不加密的 53 UDP 什么的。
baraja
22 天前
@gentrydeng AdGuard DNS 的 ECS 对国外的还可以,对国内的简直就是鸡肋。他们的实现为了隐私做了模糊处理( nextdns 亦如此),精确度很差。论精确度可能还是 google 最好,quad9 和 nextdns 稍差,AdGuard DNS 最次
但是 AdGuard DNS 的 ECS 功能实现是完整的
baraja
22 天前
@dalaoshu25 208.67.220.220 opendns 的 ECS 形同虚设,我正文里写了。不过不图它 ECS 功能的话就无所谓了。
WAHSUN
22 天前
我也发现了,所以准备自建 DNS 系统!
https://pkg.labs.nic.cz/doc/?project=knot-dns
52acca
22 天前
但是 adguard 的 quic dns 差不多是唯一可以直连的
XiLingHost
22 天前
用 dnsdist 自建的 dns 也能支持 ecs ,前提是配置正确
baraja
22 天前
@52acca quad9 的 doh ,nextdns 的 doq doh3 ,cf-gateway 的 doh 以及 opendns 的 doh 国内都可以直连,只是延迟和稳定性欠佳。如果你的线路是 cn2 9929 cmin2 这种精品网,那延迟和稳定性会好不少
loveqianool
21 天前
一直用的 rethinkdns ,不知道支持不。
fanxasy
21 天前
怎么看 adg home 请求的上游 dns 服务是否支持 ecs 呢,在 adg home 前端面板没找到
baraja
21 天前
@loveqianool 完全不支持 ECS ,q TXT o-o.myaddr.l.google.com @tls://max.rethinkdns.com ,应答里没有 subnet 信息
rethink 还支持在 cf 上自建,我测试同样也不支持
baraja
21 天前
@fanxasy 安装 q: https://github.com/natesales/q/releases

1. q TXT o-o.myaddr.l.google.com @https://xxxxxx.com/dns-query 看应答里有没有类似 edns0-client-subnet 0.0.0.0/24 的信息,这是第一步,但还不够。cf-gateway nextdns 以及 opendns 这里都是通过的,但第二步通过不了

2. 向自建 agh 发送请求,看上游有没有正确传 subnet 给 agh
q A www.iqiyi.com /subnet 电信的某 subnet @agh 的 dns
q A www.iqiyi.com /subnet 联通的某 subnet @agh 的 dns
完美支持 ECS 的 dns 应该是显示不同 ip 的,比如 alidns quad9 等
而不完美支持 ECS 的 dns ,联通再过去请求时得到的却是电信的 IP ,agh 的日志里显示命中缓存了,而这是错误的。workaround 是禁用 agh 的缓存功能,这样每次查询 ecs 才能发挥作用
52acca
21 天前
@baraja 刚才确认了一下 quad9 的 doh 和 dot 的确都是可以直连的,解析速度比 adguard 还少快点,直连的就换成这个了。
ddczl
21 天前
请问一下阿里云的免费版如何对接 ADG ?感觉它的 JSON API 还要代理一层加密功能
fanxasy
21 天前
@baraja #15 试了下

$ q TXT o-o.myaddr.l.google.com @https://1.12.12.12:443/dns-query
o-o.myaddr.l.google.com. 1m TXT "157.255.7.44"
o-o.myaddr.l.google.com. 1m TXT "edns0-client-subnet x.x.x.x/24"

$ q TXT o-o.myaddr.l.google.com @https://223.5.5.5:443/dns-query
o-o.myaddr.l.google.com. 1m TXT "39.97.162.23"

看上去阿里的 dns 并不支持 ecs?
fanxasy
21 天前
@baraja #15 另外我尝试用各种不同的运营商跑这两条命令

q A www.iqiyi.com /subnet 不同运营商的 subnet @https://1.12.12.12:443/dns-query
q A www.iqiyi.com /subnet 不同运营商的 subnet @https://223.5.5.5:443/dns-query

结果都是千篇一律的
ipv6-static.dns.iqiyi.com. 4m14s A 220.181.184.12
ipv6-static.dns.iqiyi.com. 4m14s A 220.181.184.20
ipv6-static.dns.iqiyi.com. 4m14s A 220.181.184.24
ipv6-static.dns.iqiyi.com. 4m14s A 220.181.184.25
ipv6-static.dns.iqiyi.com. 4m14s A 220.181.184.40
www.iqiyi.com. 4m14s CNAME ipv6-static.dns.iqiyi.com.

是我哪里没操作对?
baraja
21 天前

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

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

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

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

© 2021 V2EX