避免DNS污染!我的DNS解决方案--AdGuard Home

AI 摘要
本文介绍了DNS污染问题及解决方法。作者提到了使用非标准端口的DNS和加密DNS作为解决方案。文章还介绍了部署AdGuard Home的方法,并详细说明了AdGuard Home的配置步骤,包括设置上游DNS服务器、DNS服务配置、DNS缓存配置、访问控制、加密设置和客户端设置等。最后,作者提供了使用AdGuard Home的示例,并总结了整篇文章。
警告
本文最后更新于 2022-07-06,文中内容可能已过时。

ps: 很久没写博客了,最近又折腾了不少东西,有空了慢慢写出来…

由于中国大陆较为特殊的网络环境,DNS1一直都是比较麻烦的问题。

由于DNS污染2,访问网页经常被阻。

就算通过代理连接DNS,速度也会成为问题。

当然,肯定会有同学疑惑:“诶?我不用大陆的DNS,我用8.8.8.8不就行了?“但问题在于,现在中国大陆的DNS标准端口53查询都会被ISP抢答,依然存在污染。

那么,选择一个速度足够快,且没有被污染的DNS就是一个重要的话题。

俗话说,魔高一尺,道高一丈。当然有办法来应对这种dns劫持。两种方法最为常见:

  1. 用非标准端口未污染DNS3

因为非标准端口,就无法无差别抢答。缺点是…你得找到一个这样的DNS服务器。

  1. 使用加密DNS

例如DoH(DNS over HTTPS)、DoT(DNS over TLS)、DoQ4(DNS over QUIC)。三种加密DNS分别使用htrps、tls、quic协议。简单对比下,doq是截至目前最好的DNS加密方法。

这个方案需要用到一下设备或资源,不满足可能无法使用此方案。当然看看也无妨

  • 手机电脑路由器…
  • 一台低延迟vps/NAS/树莓派/软路由…
  • 一枚域名5(二级域名更好)

AdGuard将作为后端提供DNS查询。

终端还得有对应DNS的支持。截至发稿日,原生支持如下:

  • iOS: DoT和DoH
  • Android 9.0以上: 支持DoT
  • Windows11: 支持DoH
  • 路由器: 看固件

如果没有原生支持,也可以通过软件来达到。一般来讲,代理软件都会提供DNS支持。

  • iOS: Quantumult X、Surge、Stash和Shadowrocket都支持DoH和DoQ。Loon未知。
  • 安卓: Clash支持DoT和DoH
  • 其他终端上的软件过多,可谷歌一下,就不赘述了。

AdGuard Home开源地址&部署文档

AdGuard Home官方配置教程

AdGuard Home的功能很多,甚至还可以过滤广告、强制安全搜索、屏蔽NSFW…

选择一个在香港的三网直连vps,可以有效提高日后体验。

如果各位有其他适合的厂家可以在评论区留言。

选择自己的心动设备即可。毕竟玩树莓派和软路由的一般都是大佬

AdGuard Home提供官方 Docker镜像。

没用过nas实在不知道怎么配置,请见谅~

bash

curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s — -v

一键梭哈,绝不拖泥带水!

初始管理端口为3000,请在安装完成后及时在ip后面加:3000进入初始化界面设置管理员账户。

Docker文档

官方Docker镜像的docker命令:

请对照文档自行修改配置!

bash

docker run —name adguardhome\
    —restart unless-stopped\
    -v /my/own/workdir:/opt/adguardhome/work\
    -v /my/own/confdir:/opt/adguardhome/conf\
    -p 53:53/tcp -p 53:53/udp\
    -p 67:67/udp -p 68:68/udp\
    -p 80:80/tcp -p 443:443/tcp -p 443:443/udp -p 3000:3000/tcp\
    -p 853:853/tcp\
    -p 784:784/udp -p 853:853/udp -p 8853:8853/udp\
    -p 5443:5443/tcp -p 5443:5443/udp\
    -d adguard/adguardhome

yaml

version: '3.3'

services:
  adguardhome:
    image: adguard/adguardhome
    container_name: adguardhome
    restart: unless-stopped
    volumes:
      - '/my/own/workdir:/opt/adguardhome/work'
      - '/my/own/confdir:/opt/adguardhome/conf'
    ports:
      - '53:53/tcp'
      - '53:53/udp'
      - '67:67/udp'
      - '68:68/udp'
      - '80:80/tcp'
      - '443:443/tcp'
      - '443:443/udp'
      - '3000:3000/tcp'
      - '853:853/tcp'
      - '784:784/udp'
      - '853:853/udp'
      - '8853:8853/udp'
      - '5443:5443/tcp'
      - '5443:5443/udp'

由于AdGuard Home全部中文化且UI设计合理,本文只简述部分值得关注的配置。

由于选择的服务器位于香港🇭🇰,截至发稿日不存在DNS污染,故直接使用公共DNS即可。

我配置的请求方式为并行请求,于是每种协议都写了至少一个。列表如下:

text

8.8.8.8
8.8.4.4
1.1.1.1
1.0.0.1
quic://DNS.adguard.com
156.154.70.1
tls://1dot1dot1dot1.cloudflare-DNS.com
84.200.69.80
1.2.4.8

如果你设置的方式并非"并行请求”,请注意控制列表内上游DNS数量和质量以保证最优的速度。

DNS服务配置

  • 速率限制: 个人使用建议设置为0
  • DNSSEC: 建议启用以保证上游DNS的正确
  • 弃用ipv6: 若日常使用更多为电脑,则建议关闭

DNS缓冲配置

TTL值建议设置为最小600, 最大3600以防止TTL不正常导致的性能问题。

建议选中乐观缓存。

打开即意味着只能使用DoH、DoT、DoQ连接(毕竟国内个人不存在静态ip)

按照提示填写即可。

注意
请更改DoT和DoQ的端口以防被统一屏蔽!

如果绑定二级域名且托管在Cloudflare上、是为Freenom免费域名,请前往Freessl按照提示获取通配符证书。6

设置客户端可以有效分离客户端的DNS查询和限制,也可用于前面的访问控制。

若要让客户端识别功能和DoT、DoQ搭配使用,则绑定的域名必须为二级域名7且将所有三级域名解析到此服务器,例如example.org*.example.org

家里有孩子的也可以通过这个来有效单独控制成人🔞内容和众多服务禁止。

这个板块即为广告过滤。

我使用的清单🧾如下:

text

AdGuard DNS filter
https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt

CHN: anti-AD
https://anti-ad.net/easylist.txt

大圣净化
https://raw.githubusercontent.com/jdlingyu/ad-wars/master/hosts

EasyList China+EasyList
https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt

EasyPrivacy
https://easylist-downloads.adblockplus.org/easyprivacy.txt

Halflife
https://cdn.jsdelivr.net/gh/o0HalfLife0o/list@master/ad.txt

还有一个白名单板块,我的清单🧾如下:

text

Anti-ad白名单
https://raw.githubusercontent.com/privacy-protection-tools/dead-horse/master/anti-ad-white-list.txt

filter_whitelist
https://raw.githubusercontent.com/hl2guide/Filterlist-for-AdGuard/master/filter_whitelist.txt

原生使用详见AdGuard Home中的设置向导8

同时,设置向导中也有众多各终端通过软件实现DNS设置的方法。

这方面的太多了,我就只举个iOS上Quantumult X的例子🌰

我创建了一个myios的客户端id,使用的二级域名为example.org,quic端口为789。那么,我需要在配置文件中使用:

text

[DNS]
prefer-doh3
doh-server=https://example.org/DNS-query/myios
doq-server=quic://myios.example.org:789

强烈建议使用DoQ,它比https快太多了!

关于DNS,实在有太多可以说。这次文章自我感觉写起来有点杂,因为内容关联太多,很容易导致哪里漏掉了一些,哪里的逻辑有问题这些漏洞。如果发现有任何问题我没有写到或者错误、有补充,请在评论区评论。

最后,感谢您的阅读!


  1. 什么是DNS?Cloudflare Blog ↩︎

  2. 不特指GFW。相关研究 ↩︎

  3. 截至发稿日,有一个公益项目"iQDNS” 提供国内可访问的无污染DNS。tg频道 网页 ↩︎

  4. AdGuard是第一个支持DoQ的DNS解析器。AdGuard博客 ↩︎

  5. 请注意,若域名托管于Cloudflare则须关闭代理(小云朵),仅使用DNS查询 ↩︎

  6. letsencrypt的通配符证书需要DNS验证。但Cloudflare的api拒绝为.ml .tk .ga .cf .gqTLD的域名验证,只能使用其他通配符证书。 ↩︎

  7. 如若不愿付钱购买域名,可以到Freenom免费注册.ml .tk .ga .cf .gqTLD的域名。注册前请一定要谷歌一些教程以防入坑! ↩︎

  8. 设置向导中有很多种终端。在最右侧"DNS隐私"页面的最下面可找到通过描述文件实现DoT/DoH原生支持的板块。 ↩︎

相关内容