使用ADGuard Home搭建纯净DNS服务器的注意事项

发布于 2024-07-11  932 次阅读


ADGuard Home是一款用于过滤广告的DNS插件(可以这么说的原因是它已经大量集成在了各类第三方路由器系统/nas推荐应用中)。官方的说法如下:

AdGuard Home 是一款全网广告拦截与反跟踪软件。在您将其安装完毕后,它将保护您所有家用设备,同时您不再需要安装任何客户端软件。随着物联网与连接设备的兴起,掌控您自己的整个网络环境变得越来越重要。

我之所以忽然想到它,是因为除了屏蔽广告之外,它也是一个非常强大的,高度可自定义的DNS服务器。能够满足我屏蔽家庭网络中的一些网站的需求。

但是我在网络上找来找去,确实能找到一大批教我们如何安装这个ADGuard Home的教程,可讲述了其详细配置的就少之又少了。所以,我决定把我使用过程中的几个坑一一列出,尽可能描述清楚每个选项的含义。

1、安装

ADGuard home在各个平台上都有对应的安装包。在Linux上可以使用安装脚本Docker。由于Docker Hub在大陆被屏蔽,故可以选择一些加速方法。

这是官方对于Docker镜像各个端口的说明:

-p 53:53/tcp -p 53:53/udp: 普通 DNS 服务。
-p 67:67/udp -p 68:68/tcp -p 68:68/udp: 如果你打算使用 AdGuard Home 作为 DHCP 服务器,请添加这些端口。
-p 80:80/tcp -p 443:443/tcp -p 443:443/udp -p 3000:3000/tcp: 如果你打算使用 AdGuard Home 的管理面板,并且运行 AdGuard Home 作为 HTTPS/DNS-over-HTTPS 服务器,请添加这些端口。
-p 853:853/tcp: 如果你打算运行 AdGuard Home 作为 DNS-over-TLS 服务器,请添加这个端口。
-p 784:784/udp -p 853:853/udp -p 8853:8853/udp: 如果你打算运行 AdGuard Home 作为 DNS-over-QUIC 服务器,请添加这些端口。你可以只保留其中一个或两个。
-p 5443:5443/tcp -p 5443:5443/udp: 如果你打算运行 AdGuard Home 作为 DNSCrypt 服务器,请添加这些端口。

按照环境来说,如果在内网使用,可以只开放53和管理面板端口。但是如果你要在公共网络上运行,那么还是推荐开放一些加密DNS端口,以尽可能避免传输过程中的DNS抢答(污染)。

2、设置

常规设置

过滤器自动更新/家长控制/浏览安全就是字面上的意思。安全搜索对于大陆使用者来说也是个无用的功能(Google、Duckduckgo早就被屏蔽,必应强制开启安全搜索,会用Pixabay和Yandex的未成年人很少)。

日志和统计数据是一个比较容易让人忽略的点。如果你开起了这些记录同时又不限制客户端并发数量,再加上恶意客户端,有可能会导致你的服务器硬盘被大量垃圾日志填满。

DNS设置

这里是坑比较多的地方。

首先,必须保证上游DNS到ADGuard Home这中间的DNS请求是加密的(防止恶意篡改或抢答)。所以上游DNS必须选择支持加密的DNS而不是简单填写一个114.114.114.114了事。在这个页面下方详细列出了哪些DNS形似是加密的。同时页面上也提供了一个列表,可以从中挑选适合你的DNS。我这里也给出一个DNS列表以供参考。

此外,还可以在这里添加注释或者单独为某些域名指定DNS([/example.local/]94.140.14.140: 指定为特定域名的上游服务器;)。我这里为家里人常用的国内网站域名指定了一个国内DNS服务器:

[/baidu.com/bdimg.com/bdstatic.com/bcebos.com/qq.com/tencent.com/weixin.com/gtimg.com/weibo.com/douban.com/doubanio.com/360.com/360doc.com/163.com/126.com/126.net/127.net/ipip.net/taobao.com/aliyun.com/bilibili.com/biligame.com/hdslb.com/zhihu.com/zhihu.net/mi.com/xiaomi.com/miui.com/oppo.com/vivo.com/huawei.com/realme.com/cn/]https://doh.pub/dns-query

这样就可以放心大胆地填写国外的无污染加密DNS了。

接下去就是请求地问题,我的建议是,选择“最快地IP地址”。使用负载均衡有时候会让我地上网体验像过山车一样,时而流畅时而卡顿。选择最快IP则能够有效提升整个家庭网络地响应速度。

后备DNS我则完全没有填写,因为它们被使用的条件是所有上游服务器均没有响应,这在一般情况下是不可能发生(如果你填写了比较多的上游DNS)。而且就算发生了也有很大概率不是因为DNS而导致断网。

Bootstrap DNS 服务器很好理解,就是用来解析上述带域名的DNS服务器的IP。填你最快的DNS服务器用于解析上面的DoT/DoH,或者保持默认。

反向 DNS 服务器等选项就是反向查找,即IP找域名/主机名,不是很重要,可以保持默认或者填入你信任的DNS。另外,由于部分路由器会负责本地IP的反向解析,所以建议填入本地路由器IP。

速度限制与子网前缀长度。这个代表限制指定子网范围内的DNS查询速率。可以设置为限制某一个IP,也可以设置为限制某一段IP。

如果上游 DNS 服务器支持 EDNS 技术的,那么启用EDNS有助于获取到更合适的 CDN 节点,建议勾选。详细说的话,就是运营商的DNS服务器都是将自己网络的网站或CDN服务器IP给客户端,比如qq.com,用联通的DNS,查询的就是联通网段的IP,用电信的DNS,查询的就是电信网段的IP。
运营商一般不会给你跨网IP,除非某个网站就只有在某个运营商的网络。但某些网站,运营商自己网络的ip可能要跨好几个省,时延比较大,不如同省跨运营商去访问。这时可以通过EDNS客户端子网能力,查询到一个异网的IP,然后再让dns服务器测速后,返回时延较小的IP给客户端。而为EDNS使用自定义IP也就是指定一个IP段,服务器会优先返回这一段内的IP。
使用 DNSSEC : 用于效验 DNS 记录的签名,防止 DNS 缓存被投毒,建议勾选。勾选后会在日志页面请求列显示小绿锁图标。
禁用 IPv6 :丢弃 IPv6 的 DNS 查询。在本地网络和网站都支持 IPv6 会优先使用 IPv6 去访问网站,但目前 国内网站对于IPv6 的建设还处于初级阶段(个人感觉用户端问题反而不是很大),大多数地区的 IPv6 网络体验都一般。还有一些代理软件对 IPv6 支持不佳,开启后可能会影响国际互联网的访问。如果对此没有特殊需求,那么直勾选即可,这样既不影响 BT 软件连接 IPv6 网络,又可以优先使用 IPv4 来上网。如果只有 IPv4 ,那么是否勾选没有区别。

然后就是几个屏蔽选项的设置了。首先是REFUSE,意思是拒绝,也就是这个请求源IP不在DNS服务器服务的范围内,常见的场景为联通客户端用电信运营商DNS解析会被REFUSE。NXDOMAIN,意思是不存在的记录,也就是这个具体的域名在权威服务器中并不存在;空IP,即0.0.0.0,代表返回一个不可能到达的地址。自定义IP即将这些被屏蔽的域名指向一个IP。这个IP可以是可达的,也可以是不可达的。某些别有用心的人可以利用这个来做DDOS攻击。屏蔽的 TTL 应答就是客户端会记住这个被屏蔽的域名确实是“屏蔽了”多长时间。如果时间过了就会向服务器重新请求。所以可以设置一个大一点的值以减轻服务器负担。

缓存设置,服务器空间足够大可以把缓存设置的大一些(104857600(100M=1024*1024*100))。最小和最大TTL值不建议改,会影响网络访问体验。乐观缓存则必定开启(毕竟国外DNS响应是众所周知的慢)。不允许的域名则会被直接阻止解析,拥有最高的优先级。

加密设置

这个页面就是启用ADGuard Home加密DNS服务的地方。要启用加密DNS,必须准备SSL证书和私钥,以及一个域名(证书不被信任可以通过把这个服务器连接上CDN的方法解决)。各个服务的端口就不建议修改了。

客户端设置

这里可以手动添加客户端,并且为各个客户端开启定制服务。各个选项与之前提到的差不多。

DHCP服务器

将ADGuard Home用作家里的DNS服务器。我个人没有使用过,感觉比设置路由器上的DHCP服务器麻烦。有需要可以启用。

3、过滤器

DNS黑名单

这就是整个ADGuard Home的核心功能——基于DNS的广告屏蔽。默认的规则不太适合大陆地区,可以添加CHN地区专属规则。这种规则在Github上能找到不少。

但是,在添加和启用规则时,如果遇到网络卡顿,会造成整个页面卡死,这时候只有刷新了。

DNS白名单

白名单的优先级高于黑名单,使用方法与黑名单一致。

DNS重写

字面上的意思,重写指定域名的DNS请求。可以对任意域名返回你想要的结果。

已阻止的服务

可以控制一些大型互联网应用程序/网站的通过与禁止。还可以设置定时开启或定时停止。

自定义过滤规则

这里可以直接编写想要的过滤规则。同时还有一个重要的功能就是通过主机名检查来确定误杀。因为广告屏蔽郭泽太多,可能无意中就会误杀正常网站/域名,这个时候管理员就要通过这个设置,来找出被误杀的域名所对应的规则。

4、其它

日志与设置指南这两部分就和字面上一样了,没有什么需要注意的地方。

如果有条件的话,推荐使用Play Store上的ADGuard Home app来管理自己的服务器。这个app是我自己感觉少数做的还算不错的开源app。

最后更新于 2024-07-11