跳转至

配置生成流程

Rover 的核心工作是将用户在界面中的操作转化为 sing-box 可执行的 JSON 配置。了解这个流程有助于排查配置问题。

生成流程

用户操作 (界面)
JSON 数据文件
├── 策略规则 (policies)
├── DNS 策略 (dns_policies)
├── DNS 服务器 (dns_servers)
├── 规则集 (rule_providers)
└── 设置 (settings)
配置生成器 (generateConfigFile)
├── 1. 读取订阅配置 (sing-box JSON)
├── 2. 读取用户策略规则 → route.rules
├── 3. 读取用户 DNS 策略 → dns.rules
├── 4. 读取用户 DNS 服务器 → dns.servers
├── 5. 读取规则集 → route.rule_set
├── 6. 合并订阅自带的规则和 DNS 配置
├── 7. 应用 profile 级别覆盖
├── 8. 处理 hosts-override
└── 9. 写入 config.json
重启 sing-box 内核加载新配置

DNS 配置生成

DNS 配置的生成过程:

  1. 从 JSON 数据读取用户创建的 DNS 策略
  2. 过滤已禁用的策略,按 order 字段排序
  3. 转换为 sing-box 格式的 dns.rules
  4. 合并订阅配置中的 DNS 服务器和规则
  5. 应用 profile 级别的 DNS 策略覆盖
  6. 处理 hosts-override 高级配置
  7. 写入最终的 config.json

生成的 DNS 配置示例

{
  "dns": {
    "servers": [
      { "tag": "dns_direct_out", "address": "223.5.5.5", "detour": "direct" },
      { "tag": "dns_proxy_out", "address": "tls://8.8.8.8", "detour": "proxy_out" },
      { "tag": "dns_hosts", "address": "hosts" }
    ],
    "rules": [
      { "rule_set": ["geosite-cn"], "server": "dns_direct_out" },
      { "domain_suffix": [".google.com"], "server": "dns_proxy_out" }
    ],
    "final": "dns_direct_out"
  }
}

策略配置生成

策略规则的生成过程:

  1. 从 JSON 数据读取所有启用的策略规则
  2. order 字段排序
  3. 解析规则类型和匹配条件
  4. 转换为 sing-box 格式的 route.rules
  5. 处理规则集引用,生成 route.rule_set
  6. 设置 route.final 为用户选择的最终出站
  7. 写入 config.json

生成的策略配置示例

{
  "route": {
    "rules": [
      { "domain_suffix": [".google.com"], "outbound": "proxy_out" },
      { "rule_set": ["geosite-cn"], "outbound": "direct" },
      { "rule_set": ["geoip-cn"], "outbound": "direct" }
    ],
    "rule_set": [
      { "tag": "geosite-cn", "type": "remote", "format": "binary", "url": "..." },
      { "tag": "geoip-cn", "type": "remote", "format": "binary", "url": "..." }
    ],
    "final": "direct"
  }
}

覆写规则

当「设置 → 高级 → 覆写规则」开启时:

  • 用户自定义的策略规则完全替换订阅自带的规则
  • 订阅的代理节点仍保留
  • DNS 配置同理

关闭时:

  • 用户自定义的策略规则追加在订阅规则之后
  • 订阅规则优先匹配

何时开启覆写规则?

  • 开启 — 你希望完全自主控制分流规则,不使用订阅自带的规则
  • 关闭 — 你希望保留订阅的规则,仅追加少量自定义规则

查看生成的配置

在「设置 → 关于 → 查看当前配置」可以预览 sing-box 实际使用的完整 JSON 配置,方便排查问题。

排查配置问题

如果流量分流不符合预期,按以下步骤排查:

  1. 在「设置 → 关于」查看当前配置
  2. 检查 route.rules 中规则的顺序和条件
  3. 检查 route.final 是否正确
  4. 检查 DNS 配置是否正确
  5. 在「连接」页面确认流量实际命中的规则