DNS 系统详解¶
Rover 的 DNS 系统由两个层面组成:sing-box 内核 DNS 和 Rover DNS 服务。
系统架构¶
Application (Browser / Other Apps)
│
│ System DNS Query
▼
sing-box Core DNS
├── DNS Rule Matching → Select Server → Resolve via Upstream
│ │
│ ├── dns_direct_out → Direct DNS Server
│ ├── dns_proxy_out → Proxy DNS Server
│ └── Rover DNS (DoH) → 127.0.0.1:5353
│ │
│ │ HTTPS POST /dns-query
│ ▼
Rover DNS Service (Optional) ─── Local HTTPS DoH Server
├── Concurrent Resolver
│ ├── DoH Upstream
│ ├── DoT Upstream
│ ├── UDP Upstream
│ └── ... (Concurrent query, first success wins)
sing-box 内核 DNS¶
DNS 服务器¶
sing-box 的 dns.servers 定义上游 DNS 服务器,每个有独立的 tag:
| tag | 用途 | 典型配置 |
|---|---|---|
dns_direct_out |
直连 DNS,国内域名 | 国内 DNS(阿里、腾讯等) |
dns_proxy_out |
代理 DNS,代理域名 | 通过代理解析的 DNS |
dns_hosts |
本地 hosts 覆盖 | 用户自定义条目 |
| 用户自定义 | DNS 策略指定的服务器 | DoH / DoT / UDP / TCP |
DNS 规则匹配¶
sing-box 按 dns.rules 顺序匹配,命中后使用对应 server:
{
"dns": {
"rules": [
{ "rule_set": ["geosite-cn"], "server": "dns_direct_out" },
{ "domain_suffix": [".google.com"], "server": "dns_proxy_out" },
{ "rule_set": ["custom-block"], "action": "reject" }
],
"final": "dns_direct_out"
}
}
支持的匹配条件与策略规则类似,详见 规则条件参考。
DNS 规则与策略规则的区别
- 策略规则 (
route.rules) — 决定流量走哪个出站(代理/直连/拦截) - DNS 规则 (
dns.rules) — 决定域名用哪个 DNS 服务器解析
两者独立匹配。例如,一个域名可能先经 DNS 规则走代理 DNS 解析,再经策略规则走代理出站。
FakeIP 模式¶
部分预设模板启用了 FakeIP 模式:
- 原理:DNS 查询返回一个假 IP(如
198.18.0.x),sing-box 根据假 IP 反查真实域名进行分流 - 优势:避免 DNS 泄漏,减少 DNS 解析延迟
- 注意:某些应用可能不兼容 FakeIP(如需要真实 IP 的本地服务)
Rover DNS 服务¶
Rover DNS 是可选的本地 DoH 服务器,由 RoverService 提供。它提供:
- 多上游并发 — 同时向多个 DNS 查询,取最快响应
- 协议多样 — 支持 DoH / DoT / TCP / UDP 上游
- 代理支持 — 上游可通过 SOCKS5 代理连接
- Bootstrap 机制 — 使用 IP 地址的 DNS 解析上游域名,避免循环依赖
详见 Rover DNS 服务。
两层协作¶
| 层级 | 职责 | 配置入口 |
|---|---|---|
| sing-box 内核 DNS | 分流决策 | DNS 策略页面 |
| Rover DNS | 并发解析 | DNS 服务器设置 |
大多数用户只需配置 sing-box 内核 DNS(即 Rover 界面中的 DNS 策略页面)。Rover DNS 适合需要更精细 DNS 控制的高级用户。
如何选择?
- 一般用户:直接在 DNS 策略页面配置即可
- 需要更快 DNS 响应:启用 Rover DNS 的并发解析
- 需要 SOCKS5 代理解析:使用 Rover DNS 并配置代理