singbox 版本为:sing-box-1.12.0-alpha.20
平台:window 11 裸跑 singbox 内核
关于 DNS 配置模块中,server 配置有 domain_resolver
这个参数,还有 detour
参数,这个 detour
参数,官方文档中说在拨号字段中才需要,以下是我的 DNS 配置片段:
"servers": [
{
"tag": "dns-aliyun",
"type": "https",
"server": "dns.alidns.com",
"domain_resolver": "dns-resolver-aliyun"
},
{
"type": "udp",
"tag": "dns-resolver-aliyun",
"server": "223.5.5.5"
},
{
"type": "https",
"tag": "dns-google",
"server": "dns.google",
"domain_resolver": "dns-resolver-google",
"detour": "♻️ 自动选择"
},
{
"type": "udp",
"tag": "dns-resolver-google",
"server": "8.8.8.8",
"detour": "♻️ 自动选择"
},
{
"type": "fakeip",
"tag": "fakeip",
"inet4_range": "198.18.0.0/15"
}
],
如上配置是可以正常使用 singbox
的,但是去掉 "detour": "♻️ 自动选择"
配置之后,就无法访问 Google 网站,但是,如果我在 "tag": "dns-aliyun"
的DNS服务器配置中加上 detour: "直连"
(这个“直连”在我 outbounds 中配置的 tag,类型为 direct),启动 singbox 服务,提示:dns/https[dns-aliyun]: detour to an empty direct outbound makes no sense,导致服务启动失败,看了官方文档,也是没弄清楚这个 domain_resolver
和 detour
具体怎么使用。在我的 outbounds
中配置了默认的 domain_resolver
:
"default_domain_resolver": {
"server": "dns-resolver-aliyun"
},
希望理解的大佬帮忙看看。
3 Likes
感谢回答,我感觉不好说,如果真的是 “detour” 不是 DNS 中的字段,为什么我删除了 DNS 中的"detour": "
自动选择"导致我无法访问 Google?
可能和你DNS规则有关,可以参考个简单的Demo:
"dns": {
"servers": [
{
"tag": "google",
"address": "udp://8.8.8.8"
},
{
"tag": "local",
"address": "223.5.5.5",
"detour": "direct"
}
],
"rules": [
{
"outbound": "any",
"server": "local"
},
{
"clash_mode": "Direct",
"server": "local"
},
{
"clash_mode": "Global",
"server": "google"
},
{
"rule_set": "geosite-geolocation-cn",
"server": "local"
}
]
},
ottoli
(ottoli)
5
default_domain_resolver
错了,你可以改成
"default_domain_resolver": "dns-resolver-aliyun",
因为dns-resolver-aliyun
不是一个server
而是一个servers
的tag
detour
看起来并没有用错,可以提供dns rule再排查下
感谢回答,你给出的是简写,当只有一个属性的时候,可以那样,但是这个简写也是对应“server”,如下截图:
这个问题是在 19 和 20 版本出现的,所以我看了 18 的代码,对比了下,如图:
也就是说,在 outbounds 中设置的那个 type 为 direct 的实例为空,我看代码判断逻辑是“directDialer.IsEmpty()”,才出这个问题,所以,{
“type”: “direct”,
“tag”: “direct-out”
}, 这个 outbound 实例为空,结合UI如下:
这里面是所有的 outbound 实例,其中确实没有那个直连的outbound,所以我也不知道了。是配置问题,还是代码问题了。
我手机也最近用1.12beta版,发现这个问题,看官方issue貌似 detour: "直连"
应该没错,但是报错,不知是不是bug,看以后会不会解决。
我的理解,“type”: “udp”,的不需要"detour",默认就是 直连。“domain_resolver”“https”,的需要出口进行解析域名,所以得要"detour": “
自动选择”。
我试了,如果有"default_domain_resolver",前面可以不要"domain_resolver",但是"detour"得有,也可以上网。或者前面有,后面可以去掉"default_domain_resolver",不影响,两个选一个。均测试通过。
版本更新之后,从 19 版本开始,detour 默认是直连的话,不用显示去写 detour:“direct”,如果显式写了,反而是错的。以下是官方的说明:
detour
用于连接到 DNS 服务器的出站的标签。
如果为空,将使用默认出站。
而 DNS 默认的出站方式也由原来的 any 改成了 domain_resolver或者default_domain_resolver,基于此,对于直连的 DNS 出站方式,成了一种
迁移文档指出:
这里这个“废弃的outbound” 就是之前的
{
"outbound": "any",
"server": "local"
}
对于之前的 DNS 路由规则来说,但凡所有的 outbound 类型请求,即,所有的节点服务器出站,是由 local 出站,更新之后,这种方式舍弃,所以,为了指定节点服务器的出站方式,需要在 route 中去定义 default_domain_resolver 或者 对每一个出站节点服务器定义 domain_resolver。