V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
sherlock2435
V2EX  ›  程序员

sing-box mixed 模式下的 DNS 解析问题

  •  
  •   sherlock2435 · 12 天前 · 3537 次点击

    mixed 模式下 DNS 解析 不走配置的 DNS 块,实际生效的 DNS 服务器选择逻辑是怎样的?

    55 条回复    2025-08-26 19:23:54 +08:00
    daisyfloor
        1
    daisyfloor  
       12 天前   ❤️ 6
    mixed 模式下,流量直接进入主路由进行分流,而不会进入 DNS 模块。

    进入主路由后,默认不进行域名解析,就是域名走域名的规则判断,ip 走 ip 的规则判断。走远端代理的去远端机器上进行 dns 解析,走直连的域名才会开始进行域名解析,这个时候默认使用 dns 配置的第一个 server 。(当然你可以在路由规则的 default_domain_resolver 你可以指定使用哪一个 server )

    总之就是,mixed 模式下,DNS 里的路由规则似乎是没有用的。

    已经弃坑 singbox 了,这软件和它的名字一样 sb 。每次大版本更新规则全变,每次小版本更新一堆 bug 哪哪突然就用不了了。文档写的和狗屎一样,反馈问题开发者还 bb 。

    对了,这开发者默认是你会去看懂代码的。

    sb
    shisan1231
        2
    shisan1231  
       12 天前 via Android
    sb 运行效率很高得,建议钉死一个稳定版本使用。
    Ipsum
        3
    Ipsum  
       12 天前 via Android
    这软件的乐趣不就是更新一个版本,改配置文件可以玩一天吗?
    daisyfloor
        4
    daisyfloor  
       12 天前
    @Ipsum 服了。。。你说到痛点了。。
    Chaidu
        5
    Chaidu  
       12 天前   ❤️ 2
    @daisyfloor #1 你黑都黑不到点上,大版本更新不兼容之前的配置并没有任何问题。这个软件作者傻逼的是每个小版本更新都是 破坏性更新,不兼容之前的配置。
    FrankAdler
        6
    FrankAdler  
       12 天前
    短暂的用过一段时间,确实相比 clash 配置更合理,但是确实是问题不少,经常变动,提过一个 issue ,作者似乎也没啥心思理解我的问题就直接关了。
    FrankAdler
        7
    FrankAdler  
       12 天前
    @FrankAdler 这作者堪称劳模啊,更新的非常频繁
    ab
        8
    ab  
       12 天前
    支持一楼,提过一次反馈直接被关了
    SenLief
        9
    SenLief  
       12 天前
    它的效率并没有比 mihomo 高很多,那点性能差距没有稳定性来的实际,我一直服务器用 xray ,客户端全平台都是 mihomo 的配置。
    xctcc
        10
    xctcc  
       12 天前
    之前我用 ai 写了个 update.sh 每天更新最新版本,然后就发生了像上面说的版本一变,配置文件就要跟着改,特别是 dns ,主要问题是他文档 dns 写的很迷,绕来绕去的
    现在 hy2 用的 https://github.com/apernet/hysteria ,vless 用的 xray ,每天自动更新版本,到现在都没问题
    jqtmviyu
        11
    jqtmviyu  
       12 天前   ❤️ 3
    就 singbox 那注解一样的文档, 能看懂多少有点天才了. 小版本还经常引入破坏性更新. 没人能顶得住.
    还有一些神奇的坚持, 例如不加入 provider.
    paperseller
        12
    paperseller  
       12 天前 via iPhone   ❤️ 2
    sing-box 项目,用户提交的问题,如果作者知道问题在哪怎么解决,修复之前不进行任何回复,修复完了在群里接受大大修 bug 真快的吹捧;如果不知道问题在哪或暂时解决不了的,就直关 issue 或者踢群。同时永远在小版本改配置语法,协议看似集成丰富其实后续跟进有限。

    说回 dns ,它的 dns 表现是无法预期的。同系统内在 53 端口部署的 mosdns 服务,sing-box tun 模式下设置 dns 地址为 local 或 127.0.0.1 (文档默认端口为 53 )或 127.0.0.1 (显式配置端口 53 ),这三种表现都是不同的,离谱的是后两种按照文档是相同配置。所以 sing-box 现在只作备份方案
    shinyzhu
        13
    shinyzhu  
       12 天前 via iPhone
    难怪我配置不好透明代理,不是我的问题,哈哈哈哈。
    daisyfloor
        14
    daisyfloor  
       12 天前
    @shinyzhu 透明代理用 tun+fakeip ,但不代表下次更新个小版本还能正常用。
    JensenQian
        15
    JensenQian  
       11 天前
    建议他别拿来当客户端
    老实当服务端
    Morgan2
        16
    Morgan2  
       11 天前
    千万别做 客户端.
    服务端不错
    daisyfloor
        17
    daisyfloor  
       11 天前
    @JensenQian 正解
    isAK47
        18
    isAK47  
       11 天前
    一个版本用到底就行了,配置文件+二进制文件,全平台可用。
    如果是 Linux 再开启 auto-redirect 做透明代理,性能一流,比 tproxy 更轻更快更简单。
    johnnyhao
        19
    johnnyhao  
       11 天前
    服务端很好使,客户端用别的吧
    0xD800
        20
    0xD800  
       11 天前
    确实,更新个中间版本很多破坏性更新,文档是最新版( 1.12.X ),实际上 1.12.X 还没发布。真是蛋疼,又没有旧版的文档镜像,找文档好累,tg 问了个问题直接拉黑了
    0xD800
        21
    0xD800  
       11 天前
    @paperseller 原来我被踢是因为这个,哈哈
    0xD800
        22
    0xD800  
       11 天前
    @johnnyhao 我客户端用的 nekobox ,sing-box 内核的,看来又得研究换个了
    yolee599
        23
    yolee599  
       11 天前 via Android
    @daisyfloor #1 不对吧,开启协议探测,检测到 DNS 协议就转发到 DNS 模块不就行了?
    shonnliberty
        24
    shonnliberty  
       11 天前
    @0xD800 不需要手写配置啊,我都是用 Gemini 生成的脚本自动转换配置,或者可以用这个 https://sing-box-subscribe-doraemon.vercel.app/ 把机场订阅填写进去,选择 1.12 版就行了。
    我用的 Gemini 生成的脚本
    python sub_converter_final.py -u 机场 url
    https://drive.google.com/file/d/1v3GHmmewKE-ilrswCuj3tkSvjY0Mc1le/view?usp=sharing
    shonnliberty
        25
    shonnliberty  
       11 天前
    @0xD800 文档也不用看,直接让 Gemini 或者 Claude 去看提修改建议就行了,如果还是不行丢一个正确的 config 给 Gemini 它就能逆向出一个脚本。
    wacxr123
        26
    wacxr123  
       11 天前
    @Ipsum 笑死我了还真是,不过人家就是 0.几也情有可原,等待它的 1.0 版本
    AkinoKaedeChan
        27
    AkinoKaedeChan  
       11 天前 via iPhone   ❤️ 1
    看这个帖子实在是绷不住,只能说这个 clowwindy 说啥来着,这圈子好像十多年了也是这样也没变过。我觉得比起花时间研究这些软件还不如研究怎么润划算。
    AkinoKaedeChan
        28
    AkinoKaedeChan  
       11 天前 via iPhone
    回答下 OP 的问题,HTTP 代理和 Socks 5/6 客户端都能够指示目的域名,因此客户端不会对域名做解析。对于这些代理软件的策略路由来说,通用的逻辑是在匹配 IP 规则前解析,具体策略因软件而异,有些是可配置的。
    Kairossaster
        29
    Kairossaster  
       11 天前 via Android
    @AkinoKaedeChan 这就是您退圈的原因吗(
    AkinoKaedeChan
        30
    AkinoKaedeChan  
       11 天前 via iPhone   ❤️ 1
    @Kairossaster 一部分吧,最主要的原因还是太忙了。
    leeg810312
        31
    leeg810312  
       11 天前
    至今没学会怎么配置,摊手🤷
    daisyfloor
        32
    daisyfloor  
       11 天前
    @yolee599 在 TUN 模式下确实是你说的这个逻辑,但他说的是 mixed 模式。mixed 模式下流量直接进入路由分流。
    Csheng
        33
    Csheng  
       11 天前
    @AkinoKaedeChan #27 还记得这事儿的,都是老网民了,确实这么多年一点没变:伸手党大骂“为爱发电”怎么不单独给我发电。哎!
    Qetuo233
        34
    Qetuo233  
       10 天前
    @daisyfloor 可以在 inbounds 添加本地 port 监听 udp direct ,dns 模块在这个 port 设置一个 server ,把 route.default_domain_resolver 设置为这个 server ,然后这个入站设置 sniff
    e3c78a97e0f8
        35
    e3c78a97e0f8  
       10 天前
    sing-box 是有一大堆问题,但是它又支持 Hysteria2 又支持 Tun 又支持 iOS ,我找不出第二家。
    Orzpls
        36
    Orzpls  
       10 天前 via Android
    看起来还是热心人多,还在耐心解答。mixed 模式根据命中的 geoip ,geosite 路由走了,DNS 劫持不会生效,
    Orzpls
        37
    Orzpls  
       10 天前 via Android
    要想处理 DNS 规则就要用 Tun 模式,配合 DNS 模块分流。
    Orzpls
        38
    Orzpls  
       10 天前 via Android
    这个回复框很难用,碰到空白就提交了。不是 sing-box 垃圾,而是目标用户要有 JSON 基础,它作为一个通用代理平台如果用 GUI 填字段、拉选项配置开发上就很麻烦,它有几大模块,每个里面又有很多子模块自由组合,直接用 JSON 配置是有道理的,如果支持 yml 就更好,它支持注释。
    Orzpls
        39
    Orzpls  
       10 天前 via Android   ❤️ 2
    那些骂 sing-box 的人也可以理解,滚动更新快速迭代新功能,在工程上舍弃旧的配置字段会让人不适应。但这是一个开源项目,不是付费软件,它没有义务全方位服务你,没有这层契约。开源的精神是共建共享,你为我,我为你,SS 原作者的意思是开源社区里有一大堆饭来张口,衣来伸手的白嫖党,什么都要满足于他,这不符合开源的目的,开源项目作者也不是教育使用开源的人怎么怎么样,而是你能力不够或是不理解代码文档,你就更努力学习这些,你会了可以选择写博客来分享如何配置,如何解决疑难杂症,有能力的就添砖加瓦建设开源项目,没能力的也不要过多抱怨,显得戾气纷纷。
    sherlock2435
        40
    sherlock2435  
    OP
       10 天前
    sing-box 支持 JSONC 扩展,配置文件里可以写注释。
    在 mixed 模式下,DNS 流量会在本地发起一次查询(因为 mixed 并不会劫持 53 端口),同时根据 rule 规则,远端代理也会再进行一次 DNS 解析。这样就导致了 DNS 泄露 。

    关于协议探测,得先用 TUN 劫持全部流量才可以读取到包头进行协议类别判断 ,DNS 规则只有在 TUN 模式生效。

    谢谢各位 ,我问了个很简单的问题 事后就想明白了
    Orzpls
        41
    Orzpls  
       10 天前 via Android
    回到现实,写开源软件的人不是全职在干这个,他们有其他的事,人的精力是有限的,代码,测试,文档都需要人来做,不可能凭空就很完美,开源项目的赞助或打赏也没有几个人去做,反过来骂开发者或贡献者不合理,他们没有惹你。如果你和软件无缘换一个便是,大家都开心。
    AkinoKaedeChan
        42
    AkinoKaedeChan  
       10 天前
    @Orzpls 其实不全是这个意思,这段话前面的部分不能忽略,有些 大 佬 确实喜欢一群人围着他转
    sherlock2435
        43
    sherlock2435  
    OP
       10 天前
    sing-box 作者自己就对喷别的开源协议项目协议设计一坨 *,自身 issues 和文档的处理确实很狗屎 基本不采纳社区 patch 纯粹个人项目自己玩的开心
    bigwin
        44
    bigwin  
       10 天前 via Android
    按文档示例配置,不会劫持 dns 吗?
    ```
    {
    "inbounds": [
    {
    "type": "mixed",
    "tag": "in"
    }
    ],
    "route": {
    "rules": [
    {
    "inbound": "in",
    "action": "resolve",
    "strategy": "prefer_ipv4"
    },
    {
    "inbound": "in",
    "action": "sniff",
    "timeout": "1s"
    }
    ]
    }
    }
    ```
    在 sniff 后面加上
    ```
    {
    "protocol": "dns",
    "action": "hijack-dns"
    },
    ```
    Michaol
        45
    Michaol  
       10 天前   ❤️ 1
    前两天刚把 1.10 养老设置花一天时间更新到 1.12 ,特么那个官网配置介绍如同猜谜,参数给你了,怎么用自己看着办。然后又有一堆参数要废在 1.13 和 1.14……要不是这 sb 整合各种协议,早放弃了……
    Michaol
        46
    Michaol  
       10 天前
    @JensenQian 正解,累一点,把所有东西写好在服务端,千万别折腾客户端
    sherlock2435
        47
    sherlock2435  
    OP
       10 天前
    @Michaol sing-box 配置 我基本拿着源码边写配置边调试
    daisyfloor
        48
    daisyfloor  
       10 天前
    @sherlock2435 mixed 模式下,有且只有 direct 出站的域名会进行域名解析。如果你想用 ip 规则兜底比如域名规则没命中的再解析下域名得到 ip 再去匹配 ip 规则( clash 默认就是这样),你得在路由的 ip 规则前加入一个 resolve 的 action ,并且 server 指定 google ( detour 走 proxy ) ,你不这样做的话。就不会有那一次为了匹配 ip 规则而进行的域名解析。

    另外,我从来没遇到过 dns 泄露。因为 mixed 模式下,sing-box 就不会像 clash 那样做多余的本地 dns 解析。
    daisyfloor
        49
    daisyfloor  
       10 天前
    @Qetuo233 太麻烦,这是给自己以后留下屎山代码的做法。你不知道它下面哪个版本什么时候会变更这些写法逻辑。

    我改用 tun+fakeip 了简单很多。

    我的原则是在实现功能的前提下,尽量的简化配置里的逻辑。
    daisyfloor
        50
    daisyfloor  
       10 天前
    @Orzpls 不是说它的产品做到不好,产品确实牛逼。

    而是说大家都想帮他解决问题、定位问题时候

    而它的首先的反应是:我没有问题,然后把问题关掉或者改为 not plan ,离谱的是后面有时候它自己又偷偷改掉了。。

    还有,你既然做通用代理平台,前段时间 xray 把 reality 服务端的 new session ticket 的严重漏洞修复了,你是不是也应该同步更新下?就是因为你想在 xray 那边 PR 你的 anyTLS 被拒了,然后 xray 系的东西就不更新了??

    回到你的回答,你说就新手就更努力的“学习这些,添砖加瓦等等”,你自己看看 SB 作者怎么建议新手的:
    https://github.com/SagerNet/sing-box/issues/3251 (最后一条回复)

    它默认的意思就是如果你不会看代码(不懂),你就不配参与讨论甚至是提出问题。

    说的好听一点是通用代理平台,说得难听一点就是缝合怪,只不过缝得手艺还不错。

    没什么好装逼的。拿出来让人用,就别玻璃心经不起吐槽。
    sherlock2435
        51
    sherlock2435  
    OP
       10 天前
    @daisyfloor 通过路由规则将流量 detour 到代理进行解析,和使用 DNS 规则路由的最终效果看起来类似——域名都会经由代理解析, 这样的话 DNS 规则路由一般用于哪些特殊场景
    AkinoKaedeChan
        52
    AkinoKaedeChan  
       10 天前
    @sherlock2435 #51 用于任何代理软件需要获得 DNS 解析结果的场景,包括策略路由对 IP 的匹配、direct 出口。
    daisyfloor
        53
    daisyfloor  
       10 天前
    @sherlock2435 “通过路由规则将流量 detour 到代理进行解析” 是非必要不进行的。因为本身要走代理的流量,最终在代理节点上出去,放在代理节点完成域名解析并出站就是简单的。没必要提前进行解析。过多的 DNS 解析本身就是影响网络浏览体验。

    我最终不用 mixed 了,使用 tun+fakeip ,这样每一个流量都会提前进行 dns 模块的解析,在 dns 规则里分流,如果是 cn 的域名就本地解析得到 ip 后用 ip 进路由走 ip 规则分流出站。 如果不是 cn 的,或者都返回 fakeip ,然后直接进路由分流。

    这个是之前用 clash 时候的习惯。


    其实 sing-box 和 clash 最大的不同确实是,sing-box 你可以按自己的需求随便写,同一个目的有多种实现方法。

    这个怎么说呢,也好也不好。对于新手用户很不友好。
    Michaol
        54
    Michaol  
       9 天前
    @sherlock2435 原本打算 1.10 安安静静用下去,无奈小朋友们的客户端会升级,现在 1.11 和 1.12 客户端连接到 1.10 服务端会出现大量迁移警告,其实不管这些警告也是能用的,只不过确实不好看而且吓人。另外主要是服务端写了 sniff 和 override_address 去解锁多地流媒体,1.12 把 override_address 从 outbound 挪去 route 了,不得不折腾。
    huangzhiyia
        55
    huangzhiyia  
       9 天前
    只要机场订阅链接支持 sing-box ,客户端就用 OneBox 吧,别折腾了。

    https://github.com/OneOhCloud/OneBox
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5488 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:33 · PVG 11:33 · LAX 20:33 · JFK 23:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.