1.3.3配置文件修复说明

This commit is contained in:
2026-08-29 14:47:14 +08:00
parent 63b2b6d616
commit 07d4772e62
+162
View File
@@ -0,0 +1,162 @@
🔴# 报错原因
`unknown field "domain_resolver"`
**`domain_resolver` 不能写在 `selector`(选择器出站)里面!!只支持真实代理出站(socks/vmess 等),selector 是虚拟聚合出站,不识别此字段**sing-box。我之前犯了文档理解错误,全部 selector 里写这个字段直接解析失败。
>
> singbox 文档说明:`domain_resolver`属于【拨号字段】,selector 没有拨号行为,所以不支持该配置项,只能写在真实节点出站上(比如你的🇺🇲 711 这个 socks 出站)sing-box。
## 回到最初的问题
你原始旧配置意图:
1. 国内域名 → `local` DNS
2. clashmode Global → `remote` DNS
3. clashmode Direct → `local` DNS
>
> 旧版写法:`dns.rules` 里面 `"outbound":["any"]` 已经废弃;**selector 不能加 domain_resolver**。
> 正确兼容旧客户端(你的这个安卓 SagerNet 版本)方案:**不使用 domain_resolver,改用保留 dns.rules,但删掉废弃的`outbound`条件,靠域名 /clashmode/rule_set 做 DNS 分流,dial 侧(节点域名解析)使用`route.default_domain_resolver`全局配置**GitHub。
## 完整修复可用 JSON 片段(可直接替换你的配置)
关键点:
1. 全部 selector 里面**彻底删除所有`domain_resolver`**
2. 使用 `route.default_domain_resolver` 设置拨号全局解析器
3. dns.rules 保留 `clash_mode``rule_set(geositecn)`,删除废弃的`"outbound":["any"]`那条规则
4. local dns 这里先保留阿里 DoH `223.5.5.5`,后面再测试 `type:system`
5. 只在真实 socks 出站(🇺🇲711)保留 domain_resolver(只有它是真正拨号出站)
🔴### 修改点小结
1. ❌全部 selector 选择器出站,**删除所有`domain_resolver`**(selector 不支持,之前踩坑点)
2. ✅增加 `route.default_domain_resolver` 全局拨号解析器,替代旧的 dns.rules outbound 条件GitHub
3. ✅只在真实 socks 代理出站🇺🇲711 保留`domain_resolver":"remote"`
4. ✅dns.rules 保留 clash_mode、geositecn,彻底删掉废弃的 `"outbound":["any"]"` 那条规则,不会再报弃用警告
5. 配置可以正常解析通过,不会报 `unknown field "domain_resolver"`
>
> 下一步测试手机 5G 系统 DNS:把 `dns.servers` 的 local 改成 `"type":"system"`,就可以读取手机 5G/WiFi 运营商 DNS;注意 TUN 模式下部分安卓读取 system DNS 会异常,看日志。
复制完整配置全部覆盖,保存更新配置,就不会弹解析错误。
如果还有报错,直接把日志复制给我。
🔴 "default_domain_resolver":{
            "server":"local" 代码是不是也删除了?
没有删掉,但是**老版本 SagerNet /singbox 内核同样不识别 `route.default_domain_resolver`**
这是一个比较新的字段,你的 APP 内核版本偏低,这个字段也会报 `unknown field`,这是刚才我遗漏的坑。
---
## 现状梳理
1. `domain_resolver`:只能写在真实代理出站,**selector 选择器绝对不能写**,这点确定。
2. `route.default_domain_resolver`:属于 sing‑box 1.10+ 新增字段,如果你手机上是旧版内核,写进去直接报未知字段、配置解析失败。
>
> 你现在用的 SagerNet 版本内核大概率低于 1.10,所以这个配置项不能用。
### 旧内核兼容方案(把 `default_domain_resolver` 删掉)
删掉这段:
```
"default_domain_resolver":{
"server":"local"
},
```
### 旧内核如何实现:国内域名走 local,国外节点拨号走 remote
旧版本没有全局拨号解析器,只能这样处理:
1. **只在真实代理出站节点上写 `domain_resolver: "remote"`**(例如你的🇺🇲711 socks 出站,这里保留)。
>
> 含义:代理节点本身的域名(比如`socks.ssr.ee`)解析强制走 remote (1.1.1.1)
2. dns 分流完全依靠 `dns.rules`,依靠 `clash_mode` / `rule_set(geositecn)` 完成域名解析分流。
3. direct 直连流量,不写任何 domain_resolver,会自动使用 dns 的默认 server。
### dns 块完整可用片段(适配你的旧内核,无新特性)
```
"dns": {
"servers": [
{
"tag": "remote",
"type": "https",
"server": "1.1.1.1",
"server_port": 443,
"detour": "🔵🔴🟡🟢 Google"
},
{
"tag": "local",
"type": "https",
"server": "223.5.5.5",
"server_port": 443
}
],
"rules": [
{
"clash_mode": "Global",
"server": "remote"
},
{
"clash_mode": "Direct",
"server": "local"
},
{
"rule_set": ["geosite-cn"],
"server": "local"
}
],
"strategy": "ipv4_only"
},
```
### outbounds 片段关键点
1. 所有 `type":"selector"` 的项里面**完全不能出现 `domain_resolver`**
2. 真实 socks 出站保留:
```
{
"type": "socks",
"tag": "🇺🇲 711",
"server": "socks.ssr.ee",
"server_port": 45721,
"username": "VtAlM1mzrpwq",
"password": "XUkLPuew7bPI",
"detour": "🇺🇲 美国中转",
"domain_resolver":"remote"
}
```
3. `route{...}` 里面把 `"default_domain_resolver":{...}` 整段删除。
---
## 总结操作清单,照着改就不会解析报错
1. ✅全部 selector 选择器内,删除所有`domain_resolver`
2.`route`对象里,整段删除 `"default_domain_resolver":{ "server":"local" }`
3. ✅**仅真实 socks 出站🇺🇲711 保留 `domain_resolver":"remote"`**
4. ✅dns.rules 保留 clash_mode、geositecn 规则,不要使用废弃 outbound 条件。
>
> 小提示:
>
>
> - `default_domain_resolver` 是新版本才有的全局拨号解析,旧内核识别不了;升级 SagerNet 到最新版 singbox 内核才可以启用。
> - direct 直连流量的域名解析,会走 dns 的默认服务器,也就是列表第一个 server,这里第一个是 remote,如果你希望直连默认走 local,调换 servers 数组顺序,把 local 放到数组第一位。
如果你需要,我给你一份完整、已经剔除所有高版本专属字段、直接复制粘贴就能过校验的完整配置文本。