diff --git a/singbox/1.13/1.3.3.MD b/singbox/1.13/1.3.3.MD new file mode 100644 index 0000000..fa0e032 --- /dev/null +++ b/singbox/1.13/1.3.3.MD @@ -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 放到数组第一位。 + +如果你需要,我给你一份完整、已经剔除所有高版本专属字段、直接复制粘贴就能过校验的完整配置文本。 \ No newline at end of file