A-A+

[详细] AdGuard Home 中文指南

2024年01月19日 14:33 汪洋大海 暂无评论 共9773字 (阅读457 views次)

前言

为什么写这篇文章呢?答案是,我想分享我的 AdGuard Home 实践经验,希望成为中文版本最全面的指南。

初识 AdGuard Home

一般来说,AdGuard Home 由以下几个界面组成,我将逐一介绍它们:

仪表盘(Dashboard)

该界面有如下内容:

  • 统计概况:描述了 AdGuard Home 在一段时间内的 DNS 查询水平,一般认为平均处理时间越低越好。
  • 客户端排行:一段时间内连接了 AdGuard Home 中,请求比较多的客户端。
  • 请求域名排行:一段时间内 AdGuard Home 响应最多的域名排行。
  • 被拦截域名排行:一段时间内,被拦截的域名排行。
  • 经常请求的上游服务器:一段时间内,请求打到上游 DNS 的排行。
  • 平均处理时间:一段时间内,上游 DNS 处理 AdGuard Home 的响应时间排行,一般认为响应时间越低越好。

同时该页面可以开关 AdGuard Home 的拦截器。

设置(Settings)

设置下面有四个子项目,常规设置(General settings),DNS 设置(DNS settings),加密设置(Encryption settings),客户端设置(Client settings),DHCP 设置(DHCP settings);先介绍常规设置

常规设置

在该设置项里面,仅仅需要设置一下使用 过滤器和 Hosts 文件拦截指定域名 该配置项规定了更新过滤器的时间,通常我们认为 24 小时是一个合理的区间,你可以根据自己的需求进行增大或者缩小。

剩下的安全搜索,家长控制,浏览安全,则是没有必要的功能,因为境内使用体验不佳。

关于日志,你需要根据你的存储空间大小,来选择一个比较合理的区间,举个例子:

通常设备类型 通常存储大小 建议日志保留时间
小存储设备 256 MiB / 512 MiB / etc. 建议日志不要过大,建议只保留一天
服务器 > 10 Gib 根据你的存储使用情况,可以七天以上,我个人选择直接保留 90 天

被忽略的网域选项:它适用于大量无用查询的情况。举个例子,如果您通过查询日志发现有大量的 dataflow.biliapi.com 查询,这些查询是无用的,并且会占用日志空间,那么您可以将其添加到忽略网域列表中,以减少日志空间的浪费。

DNS 设置

这是 AdGuard Home 的功能核心,该项会极大地影响你的 AdGuard Home 使用体验。在指南中,只选择支持 ECS 功能的上游 DNS,望悉知。

上游 DNS 选项

针对上游 DNS 的选择,如果你的选项内包含解析国外域名,那么请把上游 DNS 全替换为国外的公共 DNS;如果你仅仅想解析国内域名,但是想加密你的 DNS 请求,那么请选择国内 DNS,使用 DoT,DoH,H3,DoQ 等方案来加密 DNS 查询。如果你两者需求都没有,不建议使用 AdGuard Home 来增加你的网络复杂度。关于加密协议,我的文章也是有详细的介绍,这里就简单带过了。

  • DoT(DNS-over-TLS):通常书写为 tls://dns.example.org
  • DoH(DNS-over-HTTPS):通常书写为 https://dns.example.org
  • H3(DNS-over-H3):通常书写为 h3://dns.example.org
  • DoQ(DNS-over-QUIC):通常书写为 quic://dns.example.org

在理想情况下:

  • 速度表现:DoQ > H3 > DoT > DoH(首次)/ DoQ > H3 > DoH(keep-alive 保持连接) > DoT
  • 抗 QoS:DoT = DoH > H3 = DoQ
  • 隐蔽性:DoH = H3 > DoQ = DoT

假设我的需求是解析国外的域名,没有污染,还得能解析国内的域名,尽量调度到比较合适的 CDN 节点。那么我可能会选择如下上游 DNS:

# 下面的 DNS 组合供选择,选择延迟较低的
# Google DNS
tls://8888.google
tls://dns.google
tls://dns.google.com
https://dns.google/dns-query
https://dns.google.com/dns-query
https://8888.google/dns-query
h3://dns.google/dns-query
h3://dns.google.com/dns-query
h3://8888.google/dns-query

# OpenDNS
tls://dns.opendns.com
https://doh.opendns.com/dns-query

# Quad9 DNS
tls://dns11.quad9.net
https://dns11.quad9.net/dns-query

# AdGuard DNS
tls://dns.AdGuard-dns.com
https://dns.AdGuard-dns.com/dns-query
quic://dns.AdGuard-dns.com
h3://dns.AdGuard-dns.com/dns-query

# NextDNS
tls://dns.nextdns.io
https://dns.nextdns.io/dns-query
quic://dns.nextdns.io
h3://dns.nextdns.io/dns-query

# 欧盟 DNS
https://zero.dns0.eu/
tls://zero.dns0.eu
quic://zero.dns0.eu

这些 DNS 需要测试其可达性,然后根据延迟排名,剔除延迟太高的 DNS,将剩余的用作日常使用。

需要注意的是,在中国境内,这些 DNS 通常不会提供最快的速度,因此解析可能比国内 DNS 慢一些,但它们不受 DNS 污染的影响。此外,启用 ECS 支持后,CDN 解析的准确性仍然相对比较高。你也可以寻找第三方无污染的 DNS 作为上游 DNS。

不过现实总是妥协与苟且的,需要有一定的分流规则,不然国内访问可能会命中国内网站的 HK 节点,实际体验没那么好,那么就需要我们稍作分流。

举个例子,你想让夸克走 Ali DNS:

[/quark.cn/]quic://dns.alidns.com

我们可以这样指定某个域名 + 全部子域名走一个特定的 DNS

这样的话,quark.cn 以及所有子域名都走 AliDNS,极大地方便我们日常使用。

当然也可以分组编写,例如:

[/dbankcloud.cn/dbankcloud.ru/dbankcloud.com/]quic://dns.alidns.com

这样的话,dbankcloud 的 cn,ru,com 域名及其子域名也是全走 Ali DNS。方便日常使用。

分流规则是依赖于自己的实际实践,并不代表别人的就是最好的,还是自己手动搜集编写,这也是最好的,最适合自己的。当然,按照惯例,我也分享我的分流规则:

[/csdn.net/]quic://dns.alidns.com
[/dbankcloud.cn/dbankcloud.ru/dbankcloud.com/]quic://dns.alidns.com
[/quark.cn/]quic://dns.alidns.com
[/bytefcdn.com/]quic://dns.alidns.com
[/tencent-cloud.cn/]quic://dns.alidns.com
[/qq.com/]quic://dns.alidns.com
[/tencent-cloud.com/]quic://dns.alidns.com
[/tencentcs.cn/tencentcs.com/]quic://dns.alidns.com
[/qq.com/]quic://dns.alidns.com
[/tencent.com/tencent.cn/]quic://dns.alidns.com
[/sogou.com/]quic://dns.alidns.com
[/wpscdn.cn/]quic://dns.alidns.com
[/xunlei.com/]quic://dns.alidns.com
[/mi.com/]quic://dns.alidns.com
[/miwifi.com/]quic://dns.alidns.com
[/shifen.com/]quic://dns.alidns.com
[/bdurl.net/]quic://dns.alidns.com
[/amemv.com/]quic://dns.alidns.com
[/toutiao.com/]quic://dns.alidns.com
[/zijieapi.com/]quic://dns.alidns.com
[/douyin.com/]quic://dns.alidns.com
[/douyincdn.com/]quic://dns.alidns.com
[/douyinec.com/]quic://dns.alidns.com
[/douyinliving.com/]quic://dns.alidns.com
[/douyinpic.com/]quic://dns.alidns.com
[/douyinstatic.com/]quic://dns.alidns.com
[/douyinvideo.net/]quic://dns.alidns.com
[/douyinvod.click/]quic://dns.alidns.com
[/douyinvod.com/]quic://dns.alidns.com
[/tencent-blackboard.com/]quic://dns.alidns.com
[/tencent-cloud.com/]quic://dns.alidns.com
[/tencent-cloud.net/]quic://dns.alidns.com
[/tencent-gf.com/]quic://dns.alidns.com
[/tencent.com.hk/]quic://dns.alidns.com
[/tencent.com/]quic://dns.alidns.com
[/tencentads.com/]quic://dns.alidns.com
[/tencentcdb.com/]quic://dns.alidns.com
[/tencentclb.com/]quic://dns.alidns.com
[/tencentcloud.com/]quic://dns.alidns.com
[/tencentcloudapi.com/]quic://dns.alidns.com
[/tencentcloudbase.com/]quic://dns.alidns.com
[/tencentcs.com/]quic://dns.alidns.com
[/tencentdba.com/]quic://dns.alidns.com
[/tencentdevices.com/]quic://dns.alidns.com
[/tencentipv6.com/]quic://dns.alidns.com
[/tencentlog.com/]quic://dns.alidns.com
[/tencentmeeting.com/]quic://dns.alidns.com
[/tencentmind.com/]quic://dns.alidns.com
[/tencentmusic.com/]quic://dns.alidns.com
[/tencentsuite.com/]quic://dns.alidns.com
[/tencentwm.com/]quic://dns.alidns.com
[/tencentyun.com/]quic://dns.alidns.com
[/tqqa.com/]quic://dns.alidns.com
[/tqqyun.com/]quic://dns.alidns.com
[/qpic.cn/]quic://dns.alidns.com
[/qlogo.cn/]quic://dns.alidns.com
[/cdnnode.cn/]quic://dns.alidns.com
[/idouyinvod.com/]quic://dns.alidns.com
[/taobao.com/]quic://dns.alidns.com
[/jd.com/]quic://dns.alidns.com
[/baidu.com/]quic://dns.alidns.com
[/gov.cn/]quic://dns.alidns.com
[/bilibili.com/]quic://dns.alidns.com
[/bilivideo.com/]quic://dns.alidns.com
[/bilivideo.cn/]quic://dns.alidns.com
[/cnki.net/]quic://dns.alidns.com
[/hdslb.com/]quic://dns.alidns.com
[/163.com/]quic://dns.alidns.com
[/126.net/]quic://dns.alidns.com
[/huya.com/]quic://dns.alidns.com

那么还有一个需求,我只解析国内,但是想加密我的 DNS 查询请求,不让中间设备看到。那么一般会选择如下上游 DNS:

#---- 阿里 DNS ----
quic://dns.alidns.com
tls://dns.alidns.com
https://dns.alidns.com/dns-query
h3://dns.alidns.com/dns-query
#---- 腾讯 DNS ----
https://doh.pub/dns-query
tls://dot.pub

在国内,这两家 DNS 通常足够了,但个人更倾向于选择阿里 DNS,因为腾讯 DNS 没有 SLA 保障,而且腾讯对这项公共服务并不认真,甚至没有提供全加密协议支持。

在这种情况下,AdGuard Home 将充当加密 DNS 流量的 DNS 代理服务器。使用多个上游 DNS 可以最大程度地减少因某个 DNS 服务器宕机而导致的网络中断。

该项功能介绍的篇幅有点大,但是没办法,这就是这个 AdGuard Home 核心功能,作为一个 DNS 代理服务器,该项设置不行,直接拖累全局。

关于 DNS 查询策略,响应速度上:并行 > 负载均衡 > 最快的 IP 地址,其中最快的 IP 地址这个策略,如果部署在服务器,对于用户使用来说完全无用;如果你是部署在家庭,这个东西还是有意义的,但是可能不如并行解析(对于同一个 IP,路由可能是动态变化的,此时的最快并不代表以后的最快),以实现最快的解析速度。

后备 DNS 服务器

当你在上游服务器填写了多个上游 DNS,并选择并行的查询策略,那么可以不配置后备 DNS 服务器。

BootStrap DNS 服务器

引导 DNS,该项的作用就是去设置一个解析上游 DNS 的 DNS,听起来有点绕是吧?其实就是对上游 DNS 的地址做一次解析。

举个例子,你上游 DNS 写的是 tls://dns.google ,然后 AdGuard Home 并不知道该 DNS 的具体 IP 地址,BootStrap DNS 就是用于解析 dns.google 的地址,所以这里要写明 IP 地址

例如我可以写如下内容

1.1.1.1
9.9.9.10
149.112.112.10
2620:fe::10
2620:fe::fe:10

当然,不加密似乎不符合我们的要求,我们也可以写加密的 DNS,举例如下。

tls://223.5.5.5
quic://223.5.5.5
tls://1.12.12.12
私人反向 DNS 服务器

DNS 不仅可以正向解析,还可以反向解析,不仅仅可以把域名解析成 IP 地址,也可以把 IP 地址解析成域名。这就是反向 DNS 的作用:把客户端 IP 解析成一个字符串,这个字符串可能是 ASN 号、归属地,或者所属的骨干网等等。

此项可以不写。

DNS 服务配置

速度限制:顾名思义,就是 DNS 查询的是否限速,限速多少。一般我们设置为 0,不限速。

启动 EDNS 客户端子网:这就是上面选择支持 ECS 功能上游 DNS 的作用,我们这边要勾选。ECS 信息就是你的客户端子网信息,举个例子:

你的 IP 地址是 1.1.1.1,根据客户端子网规则,你的 ECS 信息可能是 1.1.1.0/24,判断归属地为澳洲,那么我就就近给你解析到澳洲,当然不是全部域名的权威 DNS 都支持 EDNS(ECS)。但是现在大部分支持度都不错,日常使用问题不大。

启动 DNSSEC:如果您需要 DNSSEC 支持,可以启用它。DNSSEC 是 DNS 记录的安全扩展,用于对 DNS 记录进行签名。请注意,不是所有的域名都启用了 DNSSEC,而且国内的公共 DNS 很少支持 DNSSEC 功能,据我个人测试 360 DNS 是支持的。

禁用 IPv6 地址的解析:看你自己的需求,如果不需要解析 IPv6,则可以开启。

拦截模式:选择默认,默认的规则就是返回空 IP,或则叫做 Zero IP。

不过个人实践认为,设置自定义 IP,IPv4 返回为 127.0.0.1 ,IPv6 返回为 ::1 这样反应速度最快,客户端本地直接拒绝连接,而不会等待太长时间。

DNS 缓存配置

关于缓存就是看自己的需求了,可以将缓存大小设置为 0,即关闭缓存:每次请求都会请求上游 DNS,拉取最新的解析结果。

那么我个人的实践就是如下:

  • 缓存大小:134217728(128 MiB)你可以看需求缩小。
  • 覆盖最小 TTL 值:3600,你可以根据你自己的需求增大或者缩小
  • 覆盖最大 TTL 值:604800,你可以根据你自己的需求增大或者缩小
  • 乐观缓存:true
访问设置

这里可以根据 CIDR,IP 或者 Client ID 去允许或者拒绝某些客户端的访问。分为白名单和黑名单,关于这个功能,接下来我会和别的功能一起组合介绍。

加密设置

注意:该项是可选的,请明确你自己的需求。

该服务的使用要求你有一个域名,并为其申请到 SSL/TLS 证书。

服务器名称:你想解析的域名

HTTPS 端口,DNS-over-TLS 端口,DNS-over-QUIC 端口,这些就不用我过多介绍了。

填写好证书,启用即可。

客户端设置

在该项目下,你可以持久化一个客户端,你也可以查看到连接到该 AdGuard Home 的客户端。

关于持久化客户端这一部分,可以组合加密设置,访问设置组合使用,我将会在高级使用中介绍,该项并非强制内容。

DHCP 设置

该部分自行配置。

过滤器

DNS 黑名单

这就是 AdGuard Home 的灵魂,也是 AdGuard Home 与其他 DNS 套件与众不同的地方,该项设置的好,可以起到事半功倍效果。(不过该效果不会超出一个 DNS 的范围)

请你自己搜罗你喜欢的规则,并放进去吧?

DNS 白名单

你可以把某些域名放行白名单。

DNS 重写

在这里你可以维护自己的私有域。

在这里,你可以维护自己的私有域名。例如,即使你并不拥有timochan.me这个域名,但当你的本地客户端指向你的 AdGuard Home 时,您可以将www.timochan.me重写(解析)为10.2.3.1,以便在内网进行调试。同时,你还可以选择重写某些域名以实现你期望的效果。

已阻止的服务

顾名思义。

自定义过滤规则

该项可以缓解部分黑名单规则误杀,当你检查到部分域名被 DNS 黑名单误杀,你可以在这里给他释放出来。对于一般用户来说,只需要知道一下几个写法即可。

@@||example.org^ # 对 example.org 及其子域名放行
||example.org^ # 阻止 example.org 域名及其所有子域名
||*.mcdn.bilivideo.cn # 匹配 *.mcdn.bilivideo.cn,并阻止 * 是通配符,可以认为是任意内容

以上三条简单写法,足矣应付大部分情况。

当然你可以检查某个域名是否被过滤。

查询日志

你可以在这里看到 DNS 查询的日志,命中的上游服务器,对应的解析结果,同时对上游传递的 ECS 信息。

设置指导

该项可以看到你目前的 AdGuard Home 的地址,方便你使用。不具体介绍了。

总结

你现在经过此番设置,已经初步完成了一个家庭 DNS 的设置,现在可以投入使用了。

进阶

公网私有 DNS 服务器

作为公网的 DNS 服务器,为了确保解析速度,通常会选择在国内部署。然而,国内在没有 DNS 许可证的情况下是不允许打开 53 端口的。在这种情况下,您只能考虑使用加密 DNS。您需要申请 SSL/TLS 证书以启用加密 DNS 支持。然后,您可以设置 CIDR、IP 等白名单,以便自己使用。值得注意的是,Android 和 iOS 都支持 DNS-over-TLS(DoT),因此您可以在出门时使用自己的私有 DNS 服务器,以获得全天候的 DNS 查询保护。如果您想使用 DoQ/H3 协议,可以考虑在设备上安装 AdGuard 软件。

公网小型 DNS 服务器

全功能支持需要 AdGuard Home v0.108.0-b.18 及以上版本

接下来,我们将介绍一种组合方法,可以标识用户并允许某些用户接入。首先,我们可以像私有 DNS 服务器一样,将需要准入的设备的公网 IP 地址的变化范围计算为 CIDR 并加入白名单。但是设备的 CIDR 可能会不断变化,因此维护白名单可能会很繁琐。相反,我们可以使用以下更优雅方法:

DNS 加密 + 访问设置 - 白名单 + 持久化客户端 这套组合拳组成的设备标识符(Client ID)

首先我们在持久化客户端这里写入接入的名称以及标识符。举个例子

我客户端编辑的名称为 我的手机,那么在标识符的部分,我设置为 my-phone。此时持久化部分已经设置完成,不需要设置 CIDR 或者 IP。

然后在 DNS 访问设置添加这个客户端即可

接下来,如果你的版本不满足要求,你仅仅能使用 DoH/H3 来准入,那么你的 DoH/H3 查询字符串通常是 /dns-query,那么添加标识符后就变成了 /dns-query/my-phone

此时就实现了无需 IP 或者 CIDR 来进行 AdGuard Home 的白名单客户端设置。

如果你的版本满足要求,你需要申请一个泛域名证书,举个例子:

假设你的 AdGuard Home 域名为:dns.example.org

你需要申请下来 *.dns.example.org 和 dns.example.org 组合的泛域名证书,并在加密设置中启用。同时,你需要设置泛域名解析:

  • dns.example.org 解析到你的 DNS 服务器
  • *.dns.example.org 也需要解析到你的 DNS 服务器,你可以选择 A 记录或者 CNAME 上一条记录。

示例如下:

此时你实现了全加密协议的客户端准入,还是上述例子:

  • DoT 为:tls://my-phone.dns.example.org
  • DoQ 为:quic://my-phone.dns.example.org
  • DoH 为:https://dns.example.org/dns-query/my-phone / https://my-phone.dns.example.org/dns-query
  • H3 为:h3://dns.example.org/dns-query/my-phone / h3://my-phone.dns.example.org/dns-query

杂项

如何开启 H3 支持

目前需要手动开启,编辑 AdGuard Home 的配置文件 AdGuardHome.yaml ,这个文件一般存在于 /etc 目录,你可以寻找一下。

  serve_http3: true
  use_http3_upstreams: true

将这两项设置为 true ,重启 AdGuard Home 即可开启。

总结

这个指南非常详尽,涵盖了 AdGuard Home 的各个方面,从基本设置到进阶使用都有详细的介绍。希望这篇指南对您有所帮助!如果有任何问题或疑问,请随时提出。

文章来源:https://www.timochan.cn/posts/jc/adguard_home_configuration_guide#%E6%80%BB%E7%BB%93

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×

给我留言