作为一个每天高强度网上冲浪的先锋青年,难免遭遇各类广告狂轰烂炸,然而,这一切都只发生在我遇到 AdGuard 之前。 AdGuard 系列软件中,基于DNS过滤的 AdGuardHome 无疑是最实用的,所以今天就简单记录一下部署过程和一些配置要点。
准备工作
AdGuardHome 作为开源软件,可以在 Github Releases 上获取其发行版本,可以看到其几乎支持所有系统环境,Linux、Mac或是Windows,同样的甚至可以在 Android 设备上通过终端来安装运行。当然,这篇文章以CentOS
上的部署为例,所以首先需要一台具有公网IP
的 CentOS 服务器,其次为了实现 DoH/DoT1,还需要一个域名
。
假如这些你都有了,那么将有如下准备工作:
- 将域名解析到服务器。
通常我们使用二级域名来做这件事,如:
dns.example.com
,在域名控制台处添加一个A类记录,把域名指向服务器公网IP即可。 - 为域名申请一个SSL证书 顾名思义,DoH 是基于 Https 的,所以一个SSL证书是必不可少的。一般来说,域名服务商是提供一些免费证书的。总之不管怎么样,得整一个。下载证书上传至服务器待用,格式选择 Nginx 或者通用格式即可。
- 安装Nginx
实现功能需要用到 Nginx 的反向代理,因此服务器上需要安装 Nginx。推荐使用
yum
安装,此步骤不赘述。 - 预留2个未被占用的端口,本例中:
8443
:用于 AdGuardHome 仪表盘以及 DoH 服务,不需要在防火墙放行853
:用于 DoT 服务,需要在防火墙放行
安装
完成准备工作后,即可开始部署。首先在服务器上选定 一块风水宝地 一个路径,下载 AdGuardHome 发行版,这个需要注意一下服务器架构,如本例64位使用AdGuardHome_linux_amd64.tar.gz
。下载完成解压并为主程序赋予执行权限,一般的有如下命令:
|
|
完成以上步骤后,执行./AdGuardHome -s install
安装程序,程序将进行初始化。此后可通过如下命令对 AdGuardHome 进行管理
|
|
安装完成后需要临时开放3000端口,访问IP:3000
在引导页面进行下一步操作。
初始化
进入引导界面后,如下图,首先就要求设置网页管理端口和DNS服务端口。
管理界面相当于 AdGuardHome 的控制面板(下文以 仪表盘
代指),默认的80端口通常可能有其他用途,将其更改为准备阶段预留的端口(本例为8443
)。DNS服务端口保持53即可,可通过防火墙决定是否使用2
接下来是为管理仪表盘设置账户密码,按需设置即可,无需赘述。
完成引导后,将目光先转向 Nginx ,为管理页面和 DoH 配置代理,建立一个新的站点配置vim /etc/nginx/conf.d/adguard.conf
,参考内容如下:
|
|
需要注意的配置项如下:
server_name
:准备阶段预定的域名,如dns.example.com
。access_log
、error_log
:日志文件路径,可按需配置,亦可删除。ssl_certificate
、ssl_certificate_key
为证书路径,即准备阶段申请的证书,前者为证书后者为私钥。proxy_pass
:反代配置,需要将其中端口修改为预留的仪表盘端口(注意有两处),如本例使用8443
完成配置后,使用nginx -t
检查配置,无误即可重启 nginx 服务:syetemctl restart nginx
。此时应可以通过https://dns.example.com
访问到仪表盘,在防火墙中关闭3000
端口,然后将目光移回仪表盘。
配置
进入仪表盘 > 设置 > 加密设置,进行如下配置:
其中服务器地址即准备的域名:dns.example.com
;HTTPS 端口即准备的仪表盘以及 DoH 端口:8443
;DNS-over-TLS 端口即准备的 DoT 端口:853
;DNS-over-QUIC 端口建议留空,如需要则需另外指定端口并于防火墙放行;证书与私钥与前步中 nginx 配置相同,配置无误选择保存配置并重启 AdGuard 服务
完成加密配置后,再转向仪表盘 > 设置 > DNS设置,应有如下设置项:
1、上游 DNS 服务器
AdGuard 收到DNS解析请求时,会请求上游 DNS 服务器获得结果再返回。服务器在国内的话,推荐使用阿里和腾讯的 DoH、DoT 地址,同时直接使用IP地址,避免解析 DoH 域名再请求 Bootstrap DNS 服务器导致的时延。如下为推荐配置:
|
|
请求策略推荐:负载均衡
,可按实际效果调整
- Bootstrap DNS 服务器
前文已经提到,DoH、DoT 通常为域名形式,请求上游 DNS 服务器之前还要通过 Bootstrap DNS 服务器来解析上游DNS服务器域名,因此此处只能使用IP地址,推荐根据服务器宽带运营商来选择,如我是电信宽带,所以设置为
114.114.114.114
,建议设置1-3个,不宜过多。
配置完成选择测试上游 DNS,然后保存。理论上应测试当很快返回通过,如比较慢可能某个上游 DNS 或 Bootstrap DNS 存在连通问题,需要排查并且更换。
2、DNS 服务配置
主要为速度限制和拦截模式,例如我自用则将速度限制设置为0,保证效率;拦截模式保持默认即可。
3、DNS 缓存配置
缓存有助于提高解析效率,毕竟向上游请求是需要时间的,从缓存中查询则是毫秒级。根据服务器运存配置,缓存可以相对设置大一些,可以明显提升速度,但不宜过大,否则有更新不及时的问题(小声:像我这种经常改域名的深有体会)。TTL值建议保持默认。乐观缓存建议开启。
使用
完成以上步骤后,终于算是走到了尾声,然而使用前,我们还需要到过滤器 > DNS封锁清单中添加一些规则订阅,帮助我们判断什么请求是广告。 可以看到 AdGuard 是有一些推荐过滤器的,并且包含两个默认过滤器,当然光有这些还不够,我们可以访问 AdGuard 官网提供的列表按需添加,按例这里也推荐几个:
名称 | 地址 | 简介 |
---|---|---|
anti-AD | https://anti-ad.net/easylist.txt | 号称致力于成为中文区命中率最高的广告过滤列表 |
HalfLife | https://cdn.jsdelivr.net/gh/o0HalfLife0o/list@master/ad-pc.txt | 知名规则,合并自EasylistChina、EasylistLite、CJX’sAnnoyance |
Adgk | https://cdn.jsdelivr.net/gh/banbendalao/ADgk@master/ADgk.txt | 知名规则,侧重于手机端广告 |
Steam Hosts | https://cdn.jsdelivr.net/gh/pboymt/Steam520/hosts | 帮助直连Steam |
Github520 | https://raw.hellogithub.com/hosts | 帮助直连Github |
(最近撸了小程序,用来合并 AdGuard 规则: adg-rule,提供规则订阅也可以利用 GithubAction 实现定制化自动更新,有兴趣的话了解一下呗~)
添加完规则,终于我们可以开始享用了,这时我们的DNS地址如下:
- DoH (DNS over HTTPS):
https://dns.example.com/dns-query
- DoT (DNS over TLS):
tls://dns.example.com
各类型设备设置加密 DNS 位置如下(根据系统等差异略有差别,请以具体情况为准):
- iOS/iPad OS 14.0及以上
iPhone 和 iPad 最新系统已经支持,只是需要安装描述文件才能开启,需要手动生成一个配置文件(内容格式可参考 encrypted-dns)。在文件管理中打开配置文件,然后去设置 > 已下载的描述文件 > 安装(可能提示警告) > 完成。最后可以在 设置 > 通用 > VPN与网络 > DNS,看到刚安装的文件,至此已经设置完成。
- 安卓 9 及以上
原生安卓:设置 > 网络和互联网 > 高级-私人DNS(Private DNS),手动输入 DoT 地址(注意这里只支持DoT),无需前缀的
tls://
只需要:dns.example.com
小米MIUI:设置 > 连接与共享 > 私人DNS,手动输入DoT(注意这里只支持DoT),例如:dns.example.com
华为EMUI:设置 > 无线和网络 > 加密DNS,手动输入DoT(注意这里只支持DoT),例如:dns.example.com
其他安卓机型类似,如果没有,可下载第三方软件实现。
- Windows10 及以上
截至目前,正式版还没支持,加入Windows测试(Beta)后,设置 > 网络和Internet > WIFI/以太网 > DNS服务器,开启DoH 选项。在
首选DNS
中填入服务器IP,在DNS over HTTPS模板自定义
中填入 DoH 地址,如:https://dns.example.com/dns-query
,完成后保存。 此外,尚未支持的版本可通过改注册表,第三方软件等方式开启 DoH/DoT,由于该功能早晚合入正式版,在此不赘述。
- Chrome浏览器(桌面端)
设置 > 隐私设置和安全性 > 安全 > 高级 > 使用安全DNS > 自定义,输入 DoH地址,如:
https://dns.example.com/dns-query
- Firefox浏览器(桌面端)
设置 > 常规 > 网络设置 > 设置 > 启用基于 HTTPS 的 DNS > 自定义,输入 DoH地址,如:
https://dns.example.com/dns-query
完成设置后,网页访问 DNS检测,看看DNS地址是否与我们服务器运营商地址一致。也可以结合AdGuardHome查询日志判断。
疑难解答
- Q:使用 AdGuardHome 有什么好处?
- A:AdGuardHome 基于 DNS 实现拦截和过滤,恰当的配置后可以帮助拦截一些网络跟踪器和广告,同时也可以一定程度上解决 DNS 劫持与污染,保护隐私和上网体验。
- Q:AdGuardHome 支持什么规则/规则怎么写?
- A:AdGuardHome 的过滤规则兼容 Adblock 语法、Hosts 语法及 Domain-only 语法。具体规则可在官方 知识库 查看。
- Q:使用 AdGuardHome 可以完全避免 DNS 污染吗?
- A:显然不可以。经过上文配置流程不难发现 AdGuardHome 本质上只是中转,DNS 污染在上游就存在。但至少你可以选择相对干净的 DNS,这已经是极大的提升了。
- Q:去广告效果不好/有些广告去不掉?
- A:首先有针对性的添加广告规则;其次,AdGuardHome 不是万能的,某些广告不能通过DNS去除,可搭配AdGuardHome 客户端/浏览器插件使用
- Q:出现误杀,某地方正常内容被拦截了?
- A:排查规则;通过
过滤日志
排查,添加白名单
- Q:设置DNS后速度很慢?
- A:排查DNS设置,如服务器和网络没问题的话
部分内容参考自:石头实验-加密DNS,为你的设备开启DoH或DoT