前言
我尝试过别人的私人 dns,但是发现一是速度慢,二是部分广告规则影响了我的正常使用。故希望自己配置,能够自己管理规则,隐私也有更高的安全性。
部分小伙伴不清楚 ad Home 的作用,这里简要说明一下:
AdGuard Home 的作用:
- 主要还是去广告,对我来说,移动端的广告太多了:能够去掉大量 APP 的开屏广告、网页广告、公众号广告等等,只要是涉及域名解析的都能去掉大部分。
- 避免 dns 劫持和污染,能够一定程度上避免这个问题;
- 当然还有一些其他的功能,比如重定向等等,对我来说用不到。
我的环境说明:
云服务器
系统 Ubuntu
部署有宝塔面板,方便一些配置的可视化操作
安装好 Docker,就可以开始了。
部署 AdGuard Home
-
找一个你存放 adguard 的文件夹,建议新建一个 adguard 的文件夹,新建一个 docker 的部署 yaml: docker-compose.yml
version: "3.9" services: adguardhome: image: adguard/adguardhome:latest restart: always container_name: adguardhome2 ports: - 53:53/tcp - 53:53/udp - 3000:3000/tcp - 3000:3000/udp - 801:80/tcp - 801:80/udp - 4431:443/tcp - 4431:443/udp - 853:853/tcp - 853:853/udp volumes: - ./workdir:/opt/adguardhome/work - ./confdir:/opt/adguardhome/conf
说明:
- 53 端口:默认 dns 端口,关于 53 端口,国内 ip 的服务器不允许在未备案的情况下进行 dns 解析服务。参考:相关政策法规要求 (tencent.com)
- 3000 端口:AdGuard Home 的默认安装端口
- 80 端口:前端 WebUI 的端口,这里由于我的宿主机 Nginx 已经占用了这个端口,所以我使用 801:80 的方式将宿主机的 801 端口映射到容器 adguardhome 的 80 端口上。
- 443 端口:doh 的默认端口,由于我 443 宿主机已经有服务使用了 443,所以用宿主机的 2345 进行映射
- 853 端口:dot 的默认端口
- volumes:主要是容器持久化数据到本地的目录映射,这里放在了当前目录下的两个目录中
-
到目录部署 docker 容器:
docker-compose up -d
端口问题:如果提示端口被占用,请关闭该端口所在的服务,或者强制停止该进程即可。
Ubuntu 关闭 53 端口的进程参考:systemd-resolved 服务占用端口使用第一部分,如果是别的进程占用了 53 端口,就杀掉进程。
#永久停止该服务 systemctl stop systemd-resolved systemctl disable systemd-resolved vim /etc/systemd/resolved.conf #修改dns字段,建议国内的随便一个公共dns即可114.114.114.114 ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf #查看53端口的进程PID sudo lsof -i :53 或 netstat -lnpt|grep 53 # 杀掉该进程 kill pid数字
提示 started,就说明运行成功了。
宝塔面板中也可以查看到
安装
-
访问 ip:3000 端口进行安装
-
端口配置:这里是根据你的 docker-compose.yaml 来进行配置即可,也就是 docker 容器的端口。这里是
801:80
,宿主机是 801,docker 中是 80,所以就不用改。
-
用户名看你自己配置
-
配置完成后会自动跳转到前端 WebUI 端口,docker-compose 中配置的是 801,所以我们访问 ip:801 即可
WebUI 前端配置
常规设置
路径:「设置」→「常规设置」
- 安全配置看你自己需求,〖家长控制〗不建议开启,国内环境似乎会出现 dns 解析问题;
- 统计配置和日志配置的保留时间看需求,如果不是公开给别人使用,不用保留很久也行。
DNS 设置
此选项卡中,设置一个版块就保存一个版块,避免有的保存不上。
路径:「设置」→「常规设置」
-
「上游 DNS 服务器」,上游 DNS 很大程度上决定了你的查询速度,策略选择均衡负载即可,或者根据自己的服务器的位置自定义查询快的。
不建议使用纯数字的 DNS,用加密的,不然 DNS 依旧会被污染和劫持推荐使用如下:
tls://dns.pub https://dns.pub/dns-query tls://dns.alidns.com https://dns.alidns.com/dns-query
-
「Bootstrap DNS 服务器」:Bootstrap DNS 服务器里填你最快的 DNS 服务器用于解析上面的 DoT/DoH,建议使用本地运营商 DNS,或者百度下载一个 DNS 优选软件(来自 52pojie 分享),测试一下你最快的 DNS 填入即可。测试正常后,保存
推荐使用如下:
9.9.9.10 149.112.112.10 2620:fe::10 2620:fe::fe:10
-
「DNS 服务配置」:
- 「启用 EDNS 客户端子网」:启用。前面提及的上游 DNS 服务器都是支持 EDNS 技术的,它有助于获取到更合适的 CDN 节点,建议勾选;
- 「启用 DNSSEC」:启用。用于效验 DNS 记录的签名,防止 DNS 缓存被投毒,建议勾选。勾选后会在日志页面请求列显示小绿锁图标;
- 「禁用 IPv6 地址的解析」:根据需求启用,如果你要用 ipv6 解析(比如有的人需要访问内网 ipv6 搭建的 nas),就不用关闭。
-
「DNS 缓存配置」:
-
「缓存大小」:104857600(100MB,大概能缓存 100w 条)。根据你需要设置,一般来越稍微大点好,第一次通过上游 dns 查询后,后面可以通过缓存来返回数据,会更快点。
-
「覆盖最小 TTL 值」:600 (
Time To Live
ttl 为 0 时,表示每次都是通过上游 dns 解析,就比较慢,设置时间后,在该 TTL 时间内,则是通过缓存直接返回解析结果,会更快。) -
「覆盖最大 TTL 值」:3600
-
「乐观缓存」:开启
-
-
到这一步就可以初步测试一下 53 端口的解析是否有效了。
-
第一种:在 wifi 连接的高级设置中,设置 dns 首选为你的服务器 ip(移动端同理),然后访问某个网页;
-
第二种:采用 nslookup 命令更方便
nslookup www.qq.com 服务器ip
-
-
查询后在前端面板中「查看日志」:有日志就说明无加密 53 端口的 dns 服务成功了。
宝塔域名解析以及证书
域名解析解析
在配置加密协议设置之前,我们需要配置域名解析,来指向这些解析服务。
-
到服务商设置域名解析,因为是服务器 IP,所以一般是添加 A 记录,由于我的域名托管到了 Cloudflare,所以在 cloudflare 添加 dns 记录。
-
这里你可以添加一个或者两个都可以,两个的目的是为了让 WebUI(80 端口)与 dns 解析服务的域名不一样,这里建议是两个。(但是我是用的一个,因为一个方便记忆,两个方便管理。)
-
此处我只添加了一条:注意在 CF 中,国内 IP 的服务器要关闭「代理状态」更好,因为国内走 CF 会增加延迟。
-
在宝塔中添加一个网站,配置域名:「网站」→ 点击「添加网站」→ 输入域名 → 下方的 php 版本用不着,纯静态,因为这里的网站主要是用来反代 docker 中的服务的。
域名反代、SSL 证书申请
在宝塔中继续之前的域名解析配置,开始反向代理设置和证书配置:
-
点击你添加的域名的「设置」→「反向代理」→「添加反向代理」:
-
首先是前端的 801 端口(容器中是 80 端口)的,添加后通过域名访问一下是否能够成功访问。
-
然后是 doh 协议:这里的 4431 端口是宿主机的端口,443 是容器内部映射的,注意不要配置错了。目标 url 是配置容器映射到宿主机,也就是宿主机的端口。
-
「SSL 证书」:点击「Let'sEncrypt」申请证书,验证方式默认是文件,注意申请的域名与你配置 dot、doh 协议的域名需要相同,保存即可。
-
现在测试一下https:域名 的方式访问,测试 ssl 是否成功(是否有 🔒 的样子)
dot、doh 加密设置
路径:「设置」→「加密设置」
加密配置
- 「启用加密(HTTPS、DNS-over-HTTPS、DNS-over-TLS)」:启用;
- 「服务器域名称」:输入域名;
- 「HTTPS 端口」:映射时 4431:443,根据容器的来,填 443 即可
- 「DNS-over-TLS 端口」:同上;
- 「DNS-over-QUIC 端口」:同上。
证书配置
「设置」→「加密设置」对证书进行配置,设置在宝塔中申请的 ssl 证书即可。
注意证书的主机名与你设置的域名相同。
验证 DOH
-
如果你之前宝塔的 doh 协议反代(容器 443 端口,宿主机 4431)已经设置了,就可以测试 doh 协议了。
移动端安卓或者 ios 可以安装 app 〖intro〗 测试 dot 协议。edge 浏览器设置中可以设置 dns doh 协议:
URL 填写:https://域名:端口/dns-query (此处的端口填写反代宿主机端口,也就是 4431,在容器中是 443)
-
访问随便一个域名网站后查看 AdGuard HOme 前端中的日志:能看到 doh 协议就说明配置成功。
验证 DOT
dot 一般配置在安卓手机中,在「设置」→「更多链接」→「加密 DNS」中进行配置:
URL 填写域名即可,不用添加端口和协议,直接就是域名。
访问域名网站后,「查看日志」:看到 dot 就说明成功。
过滤器规则
推荐首推使用别人公开的私人 DNS 网站所使用的规则:
「黑名单」 我的推荐使用如下:
adgk手机去广告规则
https://ghproxy.net/https://raw.githubusercontent.com/banbendalao/ADgk/master/ADgk.txt
我说的对不对
https://raw.githubusercontent.com/qq5460168/dangchu/main/black.txt
大萌主
https://ghproxy.net/https://raw.githubusercontent.com/damengzhu/banad/main/jiekouAD.txt
消失的DD
https://ghproxy.net/https://raw.githubusercontent.com/afwfv/DD-AD/main/rule/dns.txt
酷安 那个谁520
https://raw.githubusercontent.com/qq5460168/dangchu/main/adhosts.txt
某群合并规则
https://mirror.ghproxy.com/raw.githubusercontent.com/qq5460168/666/master/rules.txt
trli's Ad Filter for Pro for AdguardHome
https://ghproxy.net/https://github.com/Potterli20/file/releases/download/ad-hosts-pro/ad-adguardhome.txt
杏子
https://adrules.top/adblock_plus.txt
AdGuardHomeRules
https://mirror.ghproxy.com/https://raw.githubusercontent.com/BlueSkyXN/AdGuardHomeRules/master/all.txt
FAQ
-
端口问题:有的 dot 和 doh 协议不生效,端口号填多少?
- 容器中的,也就是 WebUI 中的端口都是填容器内的端口;而宝塔中的反向代理,都是填的容器协议映射到宿主机的端口号。具体可以参考部署时的映射文件 docker-compose.yaml 中的映射关系,比如 4431:443,那么就是宿主机 4431 映射到容器内的 443 端口,所以宝塔中的代理目录
/dns-query
就是填写 4431 端口,而容器内的就是填写 443。
- 容器中的,也就是 WebUI 中的端口都是填容器内的端口;而宝塔中的反向代理,都是填的容器协议映射到宿主机的端口号。具体可以参考部署时的映射文件 docker-compose.yaml 中的映射关系,比如 4431:443,那么就是宿主机 4431 映射到容器内的 443 端口,所以宝塔中的代理目录
-
证书问题:
- 注意填写正确即可,宝塔和 AdGuard Home 中的位置是反着的。
-
延迟问题:
- 审查上游 DNS 速度如何;广告规则是否冲突或者是否过多。主要就是这两个原因,然后就是缓存的时间和大小,别的因素根据实际情况依次递归审查。
-
关于 53 端口:
- 一般 linux 是 systemd-resolved 占用了 53 端口的,一般来说停止服务并关闭开机自启服务就好了。如果只是简单杀掉 kill 进程,重启服务器后,docker 可能会跑不起来,需要重新 kill 53 端口的进程。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于