liandu2024:Open-Box 多个 DNS 上游会并发查询并采用最快结果

liandu2024 在 Open-Box #151 中说明,单个代理 DNS 上游经节点卡住时只能等待客户端超时;Open-Box v0.1.230 起允许直连侧和代理侧各配置最多四个上游,并使用 sing-box 1.14 的 evaluate + race 并发查询,采用最先返回的结果。对于直连 UDP 上游自身的偶发丢包,也可增加备用上游或改用 TCP。

作者原文

你这组对照已经说明问题了:同样是 TCP/53,换成 8.8.8.8 之后 180 多次查询 0 超时 —— 不是内核的 DNS 模块有毛病,是代理 DNS 上游只有一个,它经节点卡住时只能干等到客户端超时

v0.1.230 起改掉了这个限制:DNS 上游可以配多个,并发查询,谁先返回结果就用谁的

  • 位置:设置 → DNS 设置 →「DNS 上游」,右上角加号添加,选这条用在兜底直连还是代理;
  • 同一侧的第一条是主上游,后面的是备用,一起并发查 —— 一个上游卡住,另一个正常就照常出结果;
  • 每侧最多 4 个;没加备用上游时生成的配置和以前一字不差。

用的是 sing-box 1.14 自带的并发机制(evaluate + race),不是我们在外面轮询。

你第 3 点里那次 apple.com 超时走的是直连上游 223.5.5.5 的 UDP,和代理 DNS 不是一条路;你自己直查 223.5.5.5 也复现了 1/20,那是上游 UDP 偶发丢包 —— 现在直连侧同样可以加备用上游,或者把直连 DNS 的协议改成 TCP。

升上去配两个上游再用几天,没再复现的话我就关掉这条。