AdGuard Home 丨 自建去广告DNS

前言

前天在某个社区看到了用户分享自己搭建的DNS服务,顿时吸引了我的关注。我尝试了一下,确实有点效果,可是毕竟是别人的,不太可控,我就翻了一下教程,准备自己搭建一个。

这是我自建DNS一天的使用情况,帮我拦截了不少无益DNS查询。我给路由器也配置上了,所有设备都能享受去广告DNS了,满足!

AdGuard Home 丨 自建去广告DNS

写这么一篇文章,也是为了存档,方便以后我再建。

购置服务器

本次选择的是阿里云ECS 经济型e实例,目前是活动价99元/年。2核2G,3M固定带宽,40G ESSD Entry云盘,这个配置简单的用一下还是没什么问题的。

购买地址:阿里云权益中心_助力学生、开发者、企业用云快速上云-阿里云 (aliyun.com)

地区选的是距离我比较近的杭州,选用Debian 12.6 64位系统,先续费一年,再变更固定带宽为按使用流量计费,带宽调到 50 Mbps,这样阿里云会退103元,相当于九十多块买了两年服务器。按流量计费有个缺点就是流量很贵,每月前20G流量免费,超出部分0.8元/G,不过我自己一个月用不了20G那么多,无所谓了,怎么划算怎么来。

弹性网卡中开启公网 IPv6 ,按流量付费,带宽 50 Mbps。做DNS总不能连IPv6都没有吧。

安全组里面 入方向 给所有端口都开放。

AdGuard Home 丨 自建去广告DNS

最后给服务器装上宝塔,在宝塔里面安装好Docker。然后在宝塔安全设置里开放以下端口,因为DNS会使用到UDP,所以我们要给端口开放UDP协议。

AdGuard Home 丨 自建去广告DNS

为什么要开放4433端口呢?因为我还打算在我的服务器上部署一些网站项目,这就占用了443端口,只能委屈一下我的自建DNS了。如果你的服务器只用来搭建DNS,那默认使用443就很好了。

安装AdGuard Home

我们先获取 AdGuard Home 的镜像( adguard/adguardhome:latest ),但是因为国内网络原因,我的杭州服务器并没有成功获取到镜像文件,所以我先使用国外的服务器获取镜像后,导出文件然后导入到杭州服务器。

参考文章里面给出了三种网络模式,我们选择适合直通外网的设备对外开放服务的网络模式进行安装。在SSH软件里,直接对服务器输入下面的安装指令。

docker run -d \
    --name adguardhome \
    --restart unless-stopped \
    --log-opt max-size=1m \
    --network host \
    -v $PWD/adguardhome/work:/opt/adguardhome/work \
    -v $PWD/adguardhome/conf:/opt/adguardhome/conf \
    adguard/adguardhome

安装就完成了,是不是很简单?

初始化设置

使用网页浏览器访问 IP + 3000 端口即可进入到 Ad­Guard Home 的初始化界面,比如 IP 是 10.0.0.53,那么就访问 http://10.0.0.53:3000

AdGuard Home 丨 自建去广告DNS

接着是监听接口(网卡)和端口设置,根据不同的网络模式和实际情况需要作出不同的修改:

  • 如果只搭建DNS的话,默认就行
  • 如果还需要部署其他网站项目,80 端口要留给Nginx,网站管理页面 使用 3000 就行
AdGuard Home 丨 自建去广告DNS

然后是设置管理用户名和密码,后面都是直接下一步。完事之后输入用户名和密码登录,就来到了仪表盘页面。

AdGuard Home 丨 自建去广告DNS

至此 Ad­Guard Home 就初始化完成了。

设置具体功能

接下来详细讲解如何正确的设置 Ad­Guard Home ,来更有效的防止 DNS 污染以及去广告。与其它 Ad­Guard Home 教程的只讲方法、不讲逻辑的胡乱设置不同,认真看完这篇教程你会收获大量的知识和启发。

常规设置

文字介绍已经很好理解了,按需设置即可。重点是以下几个,如果你尚处于单身状态,那么就不要开启,否则会影响生理卫生知识的学习。

  • 使用 AdGuard【家长控制】服务:如果家中有尚未成年的孩子,建议开启,屏蔽成人内容。
  • 强制安全搜索:在 Bing、Google、Yandex、YouTube 等网站上强制使用安全搜索,屏蔽 NSFW 内容。
AdGuard Home 丨 自建去广告DNS

DNS 设置

AdGuard Home 丨 自建去广告DNS

上游 DNS 服务器

根据所在网络环境的不同推荐以下两组支持 ECS 功能的 DNS 服务器。如果有科学魔法爱国上网需求,你应该部署两个 Ad­Guard Home ,通过 DNS 分流才能达到较为理想的防污染和去广告效果。

  • 中国大陆网络环境推荐选择腾讯 (DNSPod) 和阿里云的公共 DNS 。使用它们你会惊奇的发现偶尔某些不存在的网站都是能正常解析的,只不过解析的结果并不是离你的代理服务器最近的 IP ,所以效果并不理想,而且非常不稳定。TIPS: 中国大陆不推荐使用任何海外的 DNS ,因为延迟很高且都受到了不同程度的干扰,可用性不高,强行设置只会得到减速效果或者报错。
tls://dns.pub
https://dns.pub/dns-query
tls://dns.alidns.com
https://dns.alidns.com/dns-query
  • 国际网络环境,比如海外的 VPS 做 DNS ,则推荐使用 Google 和 Quad9 的公共 DNS。
tls://dns.google
https://dns.google/dns-query
tls://dns11.quad9.net
https://dns11.quad9.net/dns-query

上游 DNS 服务器输入框下面有几个单选项,字面理解应该是解析策略、模式之类的选项,官方暂时没有给出详细介绍,所以博主根据字面含义和自身实际体验总结如下:

  • 负载均衡:使用加权随机算法来选择最快的服务器。用到了算法,这就很玄学了。实际其实就是随机选择一个上游 DNS 服务器中的一个进行解析请求,哪个延迟低就更偏向于用哪一个。
  • 并行请求:同时请求所有上游 DNS 服务器,取最快给出的响应结果,所以解析速度很快。在上游 DNS 服务器设置合理的情况下属于万金油方案,解析速度和访问速度都很快。所以也非常适合上游 DNS 服务器连接延迟大和不稳定的情况,就比如科学魔法爱国上网使用场景。
  • 最快的 IP 地址:同时请求所有上游 DNS 服务器,在所有响应结果中选出延迟最低且可用的 IP。因为要等待所有上游 DNS 服务器响应结果,而且还要测试 IP 延迟及可用性,所以解析速度会很慢。只适合上游 DNS 服务器延迟特别低且网络非常稳定的场景,否则实际使用中可能会遇到首次打开网页非常慢,甚至可能打不开,要多刷新几次。再者低延迟 IP 不一定速度就快,还要看实际负载情况,所以这个方案的实际可用性是最差的。

后备 DNS 服务器

180.76.76.76
114.114.114.114
119.29.29.29
119.28.28.28

Bootstrap DNS 服务器

Boot­strap DNS 服务器(引导 DNS 服务器)的作用只是解析上游 DoT/​DoH 技术 DNS 服务器的域名,我们留空就好。

设置完点击测试上游服务器,没有问题点保存即可。

DNS 服务设定

  • 速度限制0
  • 使用 EDNS :前面提及的上游 DNS 服务器都是支持 EDNS (ECS) 的,它有助于获取到更合适的 CDN 节点,建议勾选。
  • 使用 DNSSEC : 用于效验 DNS 记录的签名,防止 DNS 缓存被投毒,建议勾选。勾选后会在日志页面请求列显示小绿锁图标。
  • 禁用 IPv6 :丢弃 IPv6 的 DNS 查询。在本地网络和网站都支持 IPv6 会优先使用 IPv6 去访问网站,但目前 IPv6 的建设还处于初级阶段,大多数地区的 IPv6 网络体验都一般。
AdGuard Home 丨 自建去广告DNS

DNS 缓存配置

先简单科普一下 TTL ,它是英语 Time To Live 的简称,中文翻译为 “存活时间”。放在 DNS 解析中意为一条域名解析记录在 DNS 服务器中的存留时间,单位是秒。

正常情况下 TTL 默认 0 即可,即从上游 DNS 服务器获取 TTL 值。如果你所部署的网络环境到上游 DNS 服务器的延迟比较高,那么可以适当增加 TTL 值,让缓存更持久,短时间内请求同样域名的解析会直接从缓存中读取,实现秒解析。不过 最小TTL 值不宜过大,不然会导致记录不能及时更新,结果是网站无法正常打开。据博主观察目前多数域名的 TTL 值普遍在 300 以内,所以给出以下设置参考值:

  • 覆盖最小 TTL 值:600
  • 覆盖最大 TTL 值:84600
AdGuard Home 丨 自建去广告DNS

加密设置

设置管理页面使用 HTTPS 加密以及 Ad­Guard Home 自身的 DoH/​DoT 功能,如果不对外开放服务,只是在本地局域网使用是用不到的。对外开放 DNS 服务在中国大陆可能会有 “法律” 风险,而部署在国外网络速度缓慢,所以对于普通用户而言加密设置就成了摆设。不过我还是开启了。

AdGuard Home 丨 自建去广告DNS

443端口被Nginx使用了,所以我用的4433。现在SSL证书三个月有效期,我不想手动更新,所以写了一个shell脚本帮我自动更新。简单来说就是自动把网站的泛域名证书文件移到容器目录下,宝塔设置一个自动任务,每天执行一次。

#!/bin/bash

# 定义源文件路径
fullchain_source="/www/server/panel/vhost/cert/note.xins.live/fullchain.pem"
privkey_source="/www/server/panel/vhost/cert/note.xins.live/privkey.pem"

# 定义目标目录
target_directory="/root/adguardhome/conf"

# 检查目标目录是否存在
if [ ! -d "$target_directory" ]; then
    echo "目标目录 $target_directory 不存在。"
    exit 1
fi

# 复制文件并覆盖
cp -f "$fullchain_source" "$target_directory/fullchain.pem"
cp -f "$privkey_source" "$target_directory/privkey.pem"

# 输出结果
if [ $? -eq 0 ]; then
    echo "文件已成功复制到 $target_directory"
else
    echo "复制文件时出错。"
fi

过滤器

DNS 黑名单

这里是人民群众喜闻乐见的去广告环节。那些规则都是部署在国外,我用国外服务器下载然后上传到阿里云oss,这样国内服务器更新规则也方便一些。

AdGuard Home 丨 自建去广告DNS

在国外服务器挂载一个oss空间,添加一个自动下载黑名单规则的计划任务,这样就中转好了。

#!/bin/bash

# 定义保存目录
SAVE_DIR="/www/wwwroot/AdGuard"

# 创建目录(如果不存在)
mkdir -p "$SAVE_DIR"

# 下载文件并重命名
curl -o "$SAVE_DIR/1.txt" "https://adguardteam.github.io/HostlistsRegistry/assets/filter_21.txt"
curl -o "$SAVE_DIR/2.txt" "https://cdn.jsdelivr.net/gh/o0HalfLife0o/list@master/ad.txt"

echo "文件已成功下载并保存到 $SAVE_DIR"

DNS 重写

在这里你可以方便的把一个域名指向一个 IP ,简单来说这个功能相当于 hosts 。

最典型的一个使用场景是把 DoH/​DoT DNS 服务器的域名直接指向它们的 IP ,这样就不再需要进行我查我自己这样浪费时间的迷惑操作了,可进一步加快解析的速度。

AdGuard Home 丨 自建去广告DNS

参考文章

AdGuard Home 自建 DNS 防污染、去广告教程 #1 – 安装部署详解(Docker) – P3TERX ZONE

AdGuard Home 自建 DNS 防污染、去广告教程 #2 – 优化增强设置详解 – P3TERX ZONE

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
搜索