DNS
Egern 的 DNS 子系统支持多种协议(UDP、DoT、DoH、DoQ、DoH3),并允许通过 Forward 规则把不同域名分发到不同的上游 DNS 组。Egern 内部存在两条解析路径:
- 默认 DNS:处理用户流量的域名解析,按 Forward 规则匹配上游,未命中回退到 Bootstrap;连接上游时遵循代理规则。
- 代理 DNS:代理服务器解析目标域名时使用,连接上游时强制直连,避免 DNS → 代理 → DNS 的循环依赖。配置
proxy_nameservers后,所有代理 DNS 查询强制走该列表(绕过 Forward 规则);未配置时与默认 DNS 共用 Forward 规则,未命中回退到 Bootstrap。
解析流程
每次域名查询依次经过以下阶段:
- Hosts:命中本地映射时直接返回(IP)或将映射后的域名作为别名继续解析。
- Forward:按配置顺序匹配规则,第一条命中规则决定上游 DNS。SSID/BSSID/Cellular 类规则依赖当前网络状态,网络变化时匹配缓存会被清空。代理 DNS 在配置了
proxy_nameservers时跳过此阶段,所有查询直接走该列表。 - 默认上游:所有 Forward 规则均未命中时使用——默认 DNS 回退到 Bootstrap;代理 DNS 在未配置
proxy_nameservers时也回退到 Bootstrap。 - Block IPs:响应中匹配
block_ips的记录被过滤;全部被过滤时视为解析失败。
Bootstrap(启动 DNS)
bootstrap 配置启动阶段使用的 DNS 服务器,仅支持传统 UDP 协议(端口 53),且不遵循代理规则——流量直连。它有两个用途:
- 解析
upstreams中加密 DNS 服务器(tls://、https://等)的主机名。 - 作为最终的 DNS 回退(详见上文「解析流程」)。
支持的值:
- IP 或
IP:port,例如1.1.1.1、8.8.8.8:53。 - 特殊值
system:合并系统 DNS 服务器(即 Wi-Fi/蜂窝网络下发的 DNS)。
未配置或解析失败时,自动使用系统 DNS 服务器。
dns:
bootstrap:
- system # 合并系统 DNS
- 223.5.5.5 # 同时加上自定义服务器
Upstreams(DNS 服务器组)
为加密 DNS 服务器分组命名,供 Forward 规则按组名引用。同一组内的多个服务器并发竞速,由响应最快者胜出。
支持的服务器格式:
| 格式 | 协议 | 默认端口 |
|---|---|---|
1.1.1.1 或 1.1.1.1:53 | 传统 UDP | 53 |
udp://1.1.1.1 | 传统 UDP | 53 |
tls://1.1.1.1 | DNS over TLS | 853 |
https://8.8.8.8/dns-query | DNS over HTTPS | 443 |
quic://dns.adguard-dns.com | DNS over QUIC | 853 |
h3://dns.example.com/dns-query | DNS over HTTP/3 | 443 |
bootstrap | 展开为 Bootstrap 的所有服务器 | — |
system | 展开为系统 DNS 的所有服务器 | — |
Forward 规则的 value 可引用 upstreams 中的组名。默认 DNS 始终通过 Forward 规则使用这些组;代理 DNS 仅在未配置 proxy_nameservers 时才会经由 Forward 命中这些组(配置后会跳过 Forward)。
dns:
upstreams:
google:
- https://8.8.8.8/dns-query
- https://8.8.4.4/dns-query
adguard:
- quic://dns.adguard-dns.com