1.3.3配置文件修复说明
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
🔴# 报错原因
|
||||
|
||||
`unknown field "domain_resolver"`
|
||||
**`domain_resolver` 不能写在 `selector`(选择器出站)里面!!只支持真实代理出站(socks/vmess 等),selector 是虚拟聚合出站,不识别此字段**sing-box。我之前犯了文档理解错误,全部 selector 里写这个字段直接解析失败。
|
||||
|
||||
>
|
||||
> sing‑box 文档说明:`domain_resolver`属于【拨号字段】,selector 没有拨号行为,所以不支持该配置项,只能写在真实节点出站上(比如你的🇺🇲 711 这个 socks 出站)sing-box。
|
||||
|
||||
## 回到最初的问题
|
||||
|
||||
你原始旧配置意图:
|
||||
|
||||
1. 国内域名 → `local` DNS
|
||||
2. clash‑mode Global → `remote` DNS
|
||||
3. clash‑mode Direct → `local` DNS
|
||||
|
||||
>
|
||||
> 旧版写法:`dns.rules` 里面 `"outbound":["any"]` 已经废弃;**selector 不能加 domain_resolver**。
|
||||
> 正确兼容旧客户端(你的这个安卓 SagerNet 版本)方案:**不使用 domain_resolver,改用保留 dns.rules,但删掉废弃的`outbound`条件,靠域名 /clash‑mode/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(geosite‑cn)`,删除废弃的`"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、geosite‑cn,彻底删掉废弃的 `"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 /sing‑box 内核同样不识别 `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(geosite‑cn)` 完成域名解析分流。
|
||||
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、geosite‑cn 规则,不要使用废弃 outbound 条件。
|
||||
|
||||
>
|
||||
> 小提示:
|
||||
>
|
||||
>
|
||||
> - `default_domain_resolver` 是新版本才有的全局拨号解析,旧内核识别不了;升级 SagerNet 到最新版 sing‑box 内核才可以启用。
|
||||
> - direct 直连流量的域名解析,会走 dns 的默认服务器,也就是列表第一个 server,这里第一个是 remote,如果你希望直连默认走 local,调换 servers 数组顺序,把 local 放到数组第一位。
|
||||
|
||||
如果你需要,我给你一份完整、已经剔除所有高版本专属字段、直接复制粘贴就能过校验的完整配置文本。
|
||||
Reference in New Issue
Block a user