Files
2026-08-29 14:47:14 +08:00

162 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
🔴# 报错原因
`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 放到数组第一位。
如果你需要,我给你一份完整、已经剔除所有高版本专属字段、直接复制粘贴就能过校验的完整配置文本。