避免DNS污染!我的DNS解决方案--AdGuard Home
ps: 很久没写博客了,最近又折腾了不少东西,有空了慢慢写出来…
前言&科普
DNS污染
由于中国大陆较为特殊的网络环境,DNS1一直都是比较麻烦的问题。
由于DNS污染2,访问网页经常被阻。
就算通过代理连接DNS,速度也会成为问题。
当然,肯定会有同学疑惑:“诶?我不用大陆的DNS,我用8.8.8.8不就行了?“但问题在于,现在中国大陆的DNS标准端口53查询都会被ISP抢答,依然存在污染。
那么,选择一个速度足够快,且没有被污染的DNS就是一个重要的话题。
解决方法
俗话说,魔高一尺,道高一丈。当然有办法来应对这种dns劫持。两种方法最为常见:
- 用非标准端口未污染DNS3
因为非标准端口,就无法无差别抢答。缺点是…你得找到一个这样的DNS服务器。
- 使用加密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的功能很多,甚至还可以过滤广告、强制安全搜索、屏蔽NSFW…
部署平台
vps
选择一个在香港的三网直连vps,可以有效提高日后体验。
如果各位有其他适合的厂家可以在评论区留言。
树莓派&软路由
选择自己的心动设备即可。毕竟玩树莓派和软路由的一般都是大佬
NAS
AdGuard Home提供官方 Docker镜像。
没用过nas实在不知道怎么配置,请见谅~
安装AdGuard Home
一键梭哈
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s — -v
一键梭哈,绝不拖泥带水!
初始管理端口为3000,请在安装完成后及时在ip后面加:3000
进入初始化界面设置管理员账户。
Docker
官方Docker镜像的docker命令:
请对照文档自行修改配置!
Docker Run
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
Docker-compose
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服务器
由于选择的服务器位于香港🇭🇰,截至发稿日不存在DNS污染,故直接使用公共DNS即可。
我配置的请求方式为并行请求,于是每种协议都写了至少一个。列表如下:
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设置- DNS服务配置
- 速率限制: 个人使用建议设置为0
- DNSSEC: 建议启用以保证上游DNS的正确
- 弃用ipv6: 若日常使用更多为电脑,则建议关闭
设置- DNS设置-DNS缓存配置
TTL值建议设置为最小600, 最大3600以防止TTL不正常导致的性能问题。
建议选中乐观缓存。
设置- DNS设置-访问控制
打开即意味着只能使用DoH、DoT、DoQ连接(毕竟国内个人不存在静态ip)
设置- 加密设置
按照提示填写即可。
如果绑定二级域名且托管在Cloudflare上、是为Freenom免费域名,请前往Freessl按照提示获取通配符证书。6
设置- 客户端设置
设置客户端可以有效分离客户端的DNS查询和限制,也可用于前面的访问控制。
若要让客户端识别功能和DoT、DoQ搭配使用,则绑定的域名必须为二级域名7且将所有三级域名解析到此服务器,例如example.org
和*.example.org
。
家里有孩子的也可以通过这个来有效单独控制成人🔞内容和众多服务禁止。
过滤器-DNS拦截/允许列表
这个板块即为广告过滤。
过滤
我使用的清单🧾如下:
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
白名单
还有一个白名单板块,我的清单🧾如下:
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。那么,我需要在配置文件中使用:
[DNS]
prefer-doh3
doh-server=https://example.org/DNS-query/myios
doq-server=quic://myios.example.org:789
强烈建议使用DoQ,它比https快太多了!
总结
关于DNS,实在有太多可以说。这次文章自我感觉写起来有点杂,因为内容关联太多,很容易导致哪里漏掉了一些,哪里的逻辑有问题这些漏洞。如果发现有任何问题我没有写到或者错误、有补充,请在评论区评论。
最后,感谢您的阅读!