跳转至

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 并配置代理