@ -463,11 +463,13 @@ ClearDNS 会将数据持久化存储,以在重启 Docker 或宿主机后保留
### 2. 修改配置文件
### 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)在线解析或生成链接内容。
> DNSCrypt 使用 `DNS Stamp` 封装,可以在[这里](https://dnscrypt.info/stamps)在线解析或生成链接内容。
各协议格式示例如下:
各 DNS 协议格式示例如下:
**Plain DNS**
**Plain DNS**
@ -497,38 +499,6 @@ ClearDNS 会将数据持久化存储,以在重启 Docker 或宿主机后保留
+ `sdns://AQIAAAAAAAAAFDE3Ni4xMDMuMTMwLjEzMDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20`
+ `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 容器生效
修改配置文件后,重启 Docker 容器生效
```bash
```bash
@ -537,11 +507,11 @@ shell> docker restart cleardns
### 3. 配置 AdGuardHome
### 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`
+ `AdGuard` :`https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt`
@ -555,16 +525,55 @@ DNS封锁清单中,可配置以下规则:
### 5. 配置 DHCP 信息
### 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
```
## 手动编译
## 手动编译
**本地构建**
**本地构建**