配置生成流程¶
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 配置的生成过程:
- 从 JSON 数据读取用户创建的 DNS 策略
- 过滤已禁用的策略,按
order字段排序 - 转换为 sing-box 格式的
dns.rules - 合并订阅配置中的 DNS 服务器和规则
- 应用 profile 级别的 DNS 策略覆盖
- 处理 hosts-override 高级配置
- 写入最终的
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"
}
}
策略配置生成¶
策略规则的生成过程:
- 从 JSON 数据读取所有启用的策略规则
- 按
order字段排序 - 解析规则类型和匹配条件
- 转换为 sing-box 格式的
route.rules - 处理规则集引用,生成
route.rule_set - 设置
route.final为用户选择的最终出站 - 写入
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 配置,方便排查问题。
排查配置问题
如果流量分流不符合预期,按以下步骤排查:
- 在「设置 → 关于」查看当前配置
- 检查
route.rules中规则的顺序和条件 - 检查
route.final是否正确 - 检查 DNS 配置是否正确
- 在「连接」页面确认流量实际命中的规则