timochan

timochan

AdGuard Home 中文指南

前言#

为什么写这篇文章呢?答案是,我想分享我的 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 来增加你的网络复杂度。关于加密协议,我的文章也是有详细的介绍,这里就简单带过了。1

  • 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。

image

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

image

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

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

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

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

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

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

示例如下:

image

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

  • 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 目录,你可以寻找一下。

image

  serve_http3: true
  use_http3_upstreams: true

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

总结#

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

此文由 Mix Space 同步更新至 xLog
原始链接为 https://www.timochan.cn/posts/jc/adguard_home_configuration_guide


Footnotes#

  1. https://www.timochan.cn/posts/study/protecting_privacy_and_optimizing_networks

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.