警告:
请勿在国内机搭建对公网开放的 DNS,因为已有相关“被请喝茶”的先例。即便通过更换端口或限制访问来源 IP 来规避,依然存在安全风险。此外,国内机的 DNS 上游常遭遇劫持,难以保证纯净度。因此,本教程仅适用于海外服务器,请勿在中国大陆境内主机上部署。
在搭建前你需要准备:
- 一个 1C1G 以上的服务器,性能不需要太强
- 一个域名
选择合适的服务器
选择离自己延迟低、线路好的服务器进行搭建,如果你在华南可以选择港台机,在华东可以选择日本机,在华北/东北可以选择韩国机。当然线路要好,延迟在 60ms 以内都可以接受,越低越好。
机器性能不需要太强,1C1G 的小鸡即可
Docker 安装 Adguard Home
完成服务器的基本配置,安装好 Docker, 然后一键安装 Adguard Home
docker run --name adguardhome --restart unless-stopped -v /root/adguard/workdir:/opt/adguardhome/work -v /root/adguard/confdir:/opt/adguardhome/conf --network host -d adguard/adguardhome
Adguard Home 基本配置
使用你的服务器 IP + 3000 端口进入初始化页面,比如 http://10.10.10.10:3000/,不要修改默认端口,设置好账号密码。之后使用 IP + 80 端口进入新的配置页面,比如 http://10.10.10.10:80/,使用刚刚设置的用户名与密码登录
设置上游 DNS, 这里用 Cloudflare 和 Google 的 DNS
如果是自用,速率限制可以设置为 0, 也就是不限制
一定要开启 EDNS
如果你的机器性能比较强,缓存可以设置大一点
在 Allowed Clients 这里设置一个字符串,把这个字符串当作你的密钥,比如 abcde
跳转到过滤器设置,添加去广告规则。规则不是越多越好,规则太多容易误杀,下面是一些比较常用的规则:
https://gcore.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblockdns.txt
https://easylist-downloads.adblockplus.org/fanboy-annoyance.txt
https://anti-ad.net/easylist.txt
https://cdn.jsdelivr.net/gh/o0HalfLife0o/list@master/ad.txt
申请域名证书
这一步需要用到你的域名,假设你的域名是 example.com
先在 Cloudflare 创建两个 A 记录,全部指向服务器 IP,注意不要开启小黄云
A example.com 10.10.10.10
A *.example.com 10.10.10.10
在服务器上安装 acme.sh, 用来申请证书
curl https://get.acme.sh | sh
ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh
acme.sh --set-default-ca --server letsencrypt
mkdir /root/cert
我们计划把申请的证书保存到 /root/cert,我们需要申请泛域名证书,同时涵盖 *.example.com 和 example.com
acme.sh --issue -d example.com -d *.example.com --dns --keylength ec-256 --yes-I-know-dns-manual-mode-enough-go-ahead-please
之后会要求你添加一个 TXT 记录,添加完毕后再次输入上面的命令进行验证
申请成功后安装证书
acme.sh --install-cert -d example.com -d *.example.com --ecc --key-file /root/cert/server.key --fullchain-file /root/cert/server.crt
证书安装在 /root/cert/server.crt, 密钥在 /root/cert/server.key
Adguard Home 加密配置
下面粘贴上刚刚申请的证书和密钥
点击保存,此后,通过新的地址访问 Adguard Home 面板:https://example.com
同时会启动 DoT 和 DoQ
DoT: tls://abcde.example.com:853
DoQ: quic://abcde.example.com:853
刚刚设置的这一串 abcde 就相当于是密码,别人不知道密码就无法使用你的 DNS 服务,起到验证作用。当然,这一串 abcde 很容易就能被 ISP 等中间人获知,所以,如果你愿意承担更高延迟的代价以获得更好的安全,你可以选择 DoH,在这里就不演示了,Adguard Home 的设置里有
在客户端使用配置好的 DoT 或 DoQ, 比如 Surge
效果实测
拦截率达到了 40% 有点太高,这是因为我设置了太多拦截规则,大家可以有取舍的删掉一些
测试拦截效果: