1268 字
6 分钟
Pari Public DNS 更新

5年!#

Pari Public DNS 不知不觉已经运营了5年,直至今日,已经为数以万计的用户提供服务,每个月的查询量 2亿+ 次,感谢大家的支持与信任

过去有什么问题#

在过去的一段时间里,Pari DNS 一直在使用 AdGuardHome 提供广告过滤与响应缓存服务,规则集来源于 Cats-Team/AdRules ,上游使用企业版 Cloudflare Gateway (支持 EDNS) + Fallback 递归DNS的方案

这个旧方案体验反馈良好,响应速度快 (平均<5ms) ,解析结果基本正确,但仍然存在诸多问题:

  1. AdGuardHome 的 CacheKey 配置简单,无法根据不同的 ECS 分发响应的缓存,即便在使用支持 EDNS 的上游,也会导致缓存串扰,不同的客户端对于同一域名会收到相同结果,使得连接到的地区或 ISP 不同造成实际体验下降
  2. 对于广告过滤方法,AdGuardHome 原生提供的方式只有返回错误的 IP 地址 / NXDOMAIN / REFUSED ,无法返回 NOERROR ,若返回错误的 IP ,可能会导致等待超时造成延迟,若返回 NXDOMAIN/REFUSED ,可能会导致回退到其它可用 DNS 并解析出正确结果
  3. 广告过滤规则不够全面,如现在有非常多的应用程序内置 HTTPDNS 等绕过系统 DNS 进行查询,应用内置类 PCDN 泛滥,需要自行构建更全面好用的过滤规则
  4. AdGuardHome的部分实现过于简单,性能低下,仅适合自用部署,应该有更好的方式来进行查询和提供公共服务
  5. 只要有可靠上游 DNS 并可信,额外的回退递归服务器与检查 DNSSEC 似乎用处不大
  6. DoH 不支持 DNS-over-HTTP/3,AdGuardHome 更新缓慢,新特性支援差,滞留问题多

总体而言,AdGuardHome 的确非常 “Home”

TIP

对于本服务的一切数据分析基于匿名化的 IP

这次升级解决了什么#

NLnetLabs/unbound 可以提供基于 ECS 的缓存规则,配置全面,适合作为最底层提供查询和缓存服务的上游 DNS,根据基于前期对各大 DNS ECS 支持与准确性的分析,在 unbound 中,使用转发到 Cloudflare Gateway / Google Public DNS / 递归 DNS 查询 的方案,转发 ECS 并进行缓存,这样可以不浪费查询的同时提高可用性

仍然使用 AdGuardHome 进行广告过滤,创建了一个新的规则过滤库,合并了多个上游和自行收集的域名规则,并为 AdGuardHome 特别生成了一个 dnsrewrite 版本,将广告过滤方式修改为返回 NOERROR,这样可以有效地避免上述问题2和3

Natsuki-Kaede
/
Natsuki-List
Waiting for api.github.com...
00K
0K
0K
Waiting...

配置 unbound 作为 AdGuardHome 的上游,在这里我发现 unbound 本身转发速度比较慢,同时由于 ECS 分别缓存所以缓存命中里极低,因此整体响应速度偏慢,为了解决这个问题,创建了一个 cloudflared 代理的 Cloudflare Gateway,作为 AdGuardHome 的第二个上游,并发地请求它们,这样如果能够命中缓存,unbound 可以返回更快更准确的结果,若无缓存,也能够保证及时响应,同时在 unbound 中缓存一份结果以便下次取用,彻底解决问题1和4

使用 openresty 对外提供性能更好更标准的 DoH 服务,并支援 gzip/brotli/zstd 压缩,可以提供压缩后的响应,并支援 HTTP/3 ,同时可以为以后的扩容与分流预留可配置空间

因为需要根据 ECS 精细地缓存,在这个方案部署的初期,查询响应速度可能会略微下降,但可以收到较为准确的结果,整体网络体验应是更好的,后期缓存命中率提高后,响应速度理论上会较旧方案提高

还有问题?#

  • 需要运行的服务太多了,服务器配置低内存小,可能挤占缓存空间
  • 维护难度上升
  • ECS 缓存命中率低,需要后续观察
  • 每次重新查询的开销大同时导致响应速度变慢,要先观察缓存情况

以后的事情#

  • 考虑自己实现一个 DNS 服务器来满足上述需求,便于维护和管理
  • 扩容服务器,但目前看来暂时不需要,也没有钱
  • 多点部署,不久后会增加欧洲与北美服务器

加密DNS的提供方式(升级后)#

Origin:#

直接从源服务器提供的服务

不同域名的服务均相同,只是为了防止部分地区可能阻断/污染

DNS-over-HTTPS (:443, HTTP/2, HTTP/3):#

https://dns.flymc.cc/dns-query
https://doh.flymc.cc/dns-query
https://resolver.flymc.cc/dns-query

DNS-over-TLS (:853):#

tls://dns.flymc.cc
tls://dot.flymc.cc

DNS-over-QUIC (:853):#

quic://dns.flymc.cc

CDN:#

通过 Cloudflare CDN 提供服务,适合全球使用(尤其是在实现多点部署后)(仅支持 DoH)

DNS-over-HTTPS (:443, HTTP/2, HTTP/3):#

https://dns.pari.network/dns-query
https://doh.pari.network/dns-query

Finally#

从 AdGuardHome 的日志来看,响应速度是不错的,广告过滤也全部重写为了 RCODE:0 NOERROR

如有任何反馈和建议,欢迎联系我!

Pari Public DNS 更新
https://flymc.cc/posts/brand-new-paridns/
作者
natsuki
发布于
2025-10-19
许可协议
CC BY-NC-SA 4.0