Files
v2panel/singbox/1.13/1.3.3.MD
T
2026-08-29 14:47:14 +08:00

6.1 KiB
Raw Blame History

🔴# 报错原因

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_moderule_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)

  1. dns 分流完全依靠 dns.rules,依靠 clash_mode / rule_set(geositecn) 完成域名解析分流。
  2. 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"
}
  1. 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 放到数组第一位。

如果你需要,我给你一份完整、已经剔除所有高版本专属字段、直接复制粘贴就能过校验的完整配置文本。