diff --git a/README.md b/README.md index 5af0cdf..25bebd6 100644 --- a/README.md +++ b/README.md @@ -463,11 +463,13 @@ ClearDNS 会将数据持久化存储,以在重启 Docker 或宿主机后保留 ### 2. 修改配置文件 -在 `cleardns.yml` 中指定上游 DNS 服务器,国内组可指定阿里 DNS 、DNSPod 、114DNS 等国内公共 DNS 服务,国外组需指定可用的加密 DNS 服务,建议自行搭建服务器,或使用共享的跨境服务器(例如 DH-DNS 与 LoopDNS 等)。 +> 国外组服务器切勿使用常规 DNS 服务,例如 `8.8.8.8` ,由于请求信息为明文,GFW 会抢答回复数据,导致内容仍然受到污染。 + +在 `cleardns.yml` 中指定上游 DNS 服务器,国内组可指定国内公共 DNS 服务,国外组需指定可用的加密 DNS 服务,具体说明参考[关于DNS上游](#关于-dns-上游)部分。 > DNSCrypt 使用 `DNS Stamp` 封装,可以在[这里](https://dnscrypt.info/stamps)在线解析或生成链接内容。 -各协议格式示例如下: +各 DNS 协议格式示例如下: **Plain DNS** @@ -497,38 +499,6 @@ ClearDNS 会将数据持久化存储,以在重启 Docker 或宿主机后保留 + `sdns://AQIAAAAAAAAAFDE3Ni4xMDMuMTMwLjEzMDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20` - - -上游服务器不建议配置过多,否则网络压力偏大的同时没有多少提升,建议两组的 `primary` 与 `fallback` 均配置 2 ~ 3 台上游即可。 - -国外组服务器切勿使用常规 DNS 服务,例如 `8.8.8.8` ,由于请求信息为明文,GFW 会抢答回复数据,导致内容仍然受到污染;但鉴于目前绝大多数国外公共 DNS 加密服务已经被防火长城屏蔽,因此我们只能考虑自建或者使用私有服务器 - -自建服务器可以考虑延迟 - -国内上游是否有必要使用运营商 DNS ?该问题地域性较强,若当地运营商不存在明显的劫持行为,使用运营商 DNS 可能降低延迟,您可以通过实际测试来判别 - -如果运营商不存在 DNS 劫持行为,使用常规 DNS 与加密 DNS 并没有明显区别,理论上前者延迟会低一些,但数ms的差距在实际使用中基本可以忽略 - -``` -shell> time dnslookup baidu.com tls://dns.pub -dnslookup v. v1.8.0 -dnslookup result: -;; opcode: QUERY, status: NOERROR, id: 43283 -;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 - -;; QUESTION SECTION: -;baidu.com. IN A - -;; ANSWER SECTION: -baidu.com. 596 IN A 39.156.66.10 -baidu.com. 596 IN A 110.242.68.66 - - -real 0m0.030s -user 0m0.011s -sys 0m0.005s -``` - 修改配置文件后,重启 Docker 容器生效 ```bash @@ -537,11 +507,11 @@ shell> docker restart cleardns ### 3. 配置 AdGuardHome -浏览器打开 ClearDNS 服务,host 与 bridge 模式输入宿主机 IP 地址,macvlan 模式输入容器 IP,即可进入 AdGuardHome 配置界面,默认账号为 `admin` ,密码为 `cleardns`,可在配置文件中指定,登录后进入 AdGuardHome 管理界面。 +浏览器打开 ClearDNS 服务,使用 Host 或 Bridge 模式时输入宿主机 IP 地址,使用 Macvlan 模式时输入容器 IP ,即可进入 AdGuardHome 配置界面,默认登录账号为 `admin` ,密码为 `cleardns` ,该选项可在配置文件中修改,登录后进入 AdGuardHome 管理界面。 -进入 `设置` - `DNS设置`,建议启用 DNSSEC ,若配置文件中禁用了出口缓存,可在此处配置缓存选项,内存允许的情况下适当拉大缓存大小,并开启乐观缓存。 +在 `设置` - `DNS设置` 中可以更改相关 DNS 选项,建议启用 DNSSEC ,若配置文件中禁用了出口缓存,可在此处配置缓存选项,内存允许的情况下适当拉大缓存大小,并开启乐观缓存,具体说明参考[关于缓存配置](#关于缓存的配置)部分。 -DNS封锁清单中,可配置以下规则: +在 DNS 封锁清单中,可配置以下规则: + `AdGuard`:`https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt` @@ -555,16 +525,55 @@ DNS封锁清单中,可配置以下规则: ### 5. 配置 DHCP 信息 -若您的服务部署在内网,为了使 ClearDNS 生效,需要在路由器 DHCP 服务中指定 DNS 服务器,host 与 bridge 模式指定为宿主机 IP ,macvlan 模式指定为容器 IP 即可。 +若您的服务部署在内网,为了使 ClearDNS 生效,需要在路由器 DHCP 服务中指定 DNS 服务器,使用 Host 与 Bridge 模式时,指定为宿主机 IP ,使用 Macvlan 模式指定为容器 IP ,设备重新接入网络后即可生效。 + +> 对于内网中一些固定 IP 的设备,需要手动更改其 DNS 为上述 IP 地址。 + +## 补充说明 -> 对于内网中一些固定IP信息的设备,需要手动更改其DNS为上述IP地址。 +### 关于 DNS 上游 -## 配置说明 +ClearDNS 上游分为国内组 `Domestic` 与国外组 `Foreign` ,它们的配置逻辑不尽相同,下面分别说明: -### 关于 DNS 上游的选择 +国内组的目标在于避免劫持的前提下,尽量选择延迟低的上游服务器;我们可以选择运营商提供的 DNS 服务器,或者大公司搭建的公共 DNS 服务器(例如 AliDNS 、DNSPod 、114DNS 等),后者大部分都支持加密查询。 + +此前,一些公司会在不同运营商机房部署服务器,加快用户访问速度,在早期运营不完善时使用公共 DNS 服务器,时常会出现电信用户得到联通机房的解析,导致访问卡顿,而运营商分配的 DNS 一般就不存在这个问题,因此一些老教程会建议用户使用运营商解析。但是最近几年,基于访问来源来确定的解析已经成熟,大多数情况下不会出错,况且大公司的服务一般有多线 BGP 接入,已经基本摒弃基于 DNS 的线路分流机制。所以,使用运营商 DNS 服务仅在延迟上有一点优势(正常情况下延迟会低几毫秒),在确定不存在 DNS 污染行为后,您可以根据延迟实测结果确定是否使用。 + +如果运营商不存在 DNS 劫持行为,向公共 DNS 查询时,使用常规 DNS 与加密 DNS 并没有明显区别,理论上前者延迟会低一些,但几毫秒的差距在实际使用中基本可以忽略,您如果比较在意访问隐私性,建议使用加密链路,总体上利大于弊。 + +国外组的目标在于避开污染的前提下,选择更稳定与延迟更低的上游;鉴于目前绝大多数国外公共 DNS 加密服务已经被防火长城屏蔽,因此我们只能考虑自建服务器,或者使用共享的跨境服务器(例如 DH-DNS 与 LoopDNS 等)。 + +如果您有国外的服务器,可以考虑搭建一条线路自用,具体的教程可以参考[搭建全协议DNS服务器](https://blog.dnomd343.top/dns-server/),截至目前,不建议开启 `DNS-over-TLS` 功能与标准路径的 `DNS-over-HTTPS` 服务,它们基本会被防火长城秒封,且可能波及整个服务器 IP ,更保险的做法是搭建非标准端口的 `DNS-over-QUIC` 服务,或者将 `DNS-over-HTTPS` 隐藏在博客、网盘等正常网页下面,提高存活性。 + +自建 DNS 服务器的延迟与跨境线路质量直接相关,普通的自建服务延迟可能偏高,而共享的 DNS 跨境服务器一般通过专线接入国内中转,且使用人数多时热缓存命中率高,延迟相对可以低不少,您可以同时配置两者作为国外组上游,提高整套系统的稳定性。 + +最后,上游服务器不建议配置过多,否则网络压力偏大的同时不会带来明显的提升,建议两组的 `primary` 与 `fallback` 均配置 2 ~ 3 台上游即可。 ### 关于缓存的配置 +在 ClearDNS 默认配置中打开了缓存选项,该选项作用于国内组与国外组的出口,而非 AdGuardHome 缓存,两者建议打开一个即可;正常情况下,更建议仅在 AdGuardHome 中配置缓存,避免多余的缓存,同时减少重复查询在分流器上带来的额外开销。 + +缓存大小上,一般配置 4MiB 到 16MiB 即可,若运行 ClearDNS 的机子运行内存较小,可以选择性减少;实际个人使用中,不需要过大体积的缓存,绝大部分在超过 TTL 后仍不会重复命中,反而降低了系统索引性能。 + +乐观缓存功能用于降低请求延迟,该选项打开后,即使请求的记录已经过期,仍然返回过期数据,但会把 TTL 降低为 10 秒,避免客户端系统长时间缓存该数据,同时向上游发起请求,覆盖过期数据;若实际上该 DNS 记录发生更新,网站访问将会出错,只能等待 10 秒后系统 DNS 记录过期重新请求,拿到正确的 DNS 数据,若 DNS 记录未变动,则正常访问网站。 + +从乐观缓存的工作原理看,就是在赌 DNS 数据未出现更新,正常情况下 DNS 记录在 TTL 内发生变动的概率很低,且大部分 DNS 记录的超时时间在 300s 左右,这种方式可以让 DNS 请求平均延迟显著降低,但缺点就是一旦变动就会带来十几秒的延迟,此时网络体验影响较大。 + +乐观缓存按需打开即可,正常情况下,打开后平均延迟能降低到 10ms 以内,命中错误的频率很低,个人认为还是相对值得的。 + +### DNS 延迟测试 + +您可以借助 [dnslookup](https://github.com/ameshkov/dnslookup) 工具进行测试,使用以下命令多次测试后取平均值,可以大致反映延迟时长。 + +``` +shell> time dnslookup baidu.com tls://dns.pub +··· DNS 查询返回 ··· + +real 0m0.030s +user 0m0.011s +sys 0m0.005s +``` + ## 手动编译 **本地构建**