V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
颜值和功能齐聚的跨平台SSH工具
Xterminal 是一款强大的开发工具,不止是 SSH 与 Terminal,还集成了 Note、拥有快捷动作、命令提示等特性
Promoted by Moyyyyyyyyyyye
xuxiake
V2EX  ›  宽带症候群

DNS 分流方案

  •  
  •   xuxiake · 22 天前 · 4913 次点击

    之前使用 OpenClash 自带的分流,总感觉打开国内网站很慢,例如京东经常加载半天,微信图片也加载半天,遂在网上研究了下,得到现在的 DNS 分流方案 AdGuardHome+OpenClash+MosDNS ,现在完全不会影响国内网站,上网体验非常丝滑

    网络环境

    目前我是使用的旁路由方案,主路由是爱快,负责拨号上网,旁路由是 OpenWrt ,负责科学以及 DNS 服务器。IPv4 这边网关以及 DNS 都指向 OpenWrt ,打开 IPv6 ,开启 DHCPv6 ,但是不开启 IPv6 DNS ,DNS 复用 IPv4 的,IPv6 的网关使用默认配置,也就是指向爱快。

    DNS 服务器

    数据流向是 AdGuardHome -> OpenClash -> MosDNS

    1. DNS 主入口直接用 AdGuardHome ,彻底弃用 OpenWrt 自带的 dnsmasq ,具体配置是使用 53 端囗替换 dnsmasq ,这样广告拦截效率更高,广告可以在第一道关卡就被拦截,不用流转多道

    2. OpenClash 的 NameServer 、FallBack 、Default-NameServer 都只设置一个上游,就是 MosDNS

    3. MosDNS 负责最终的分流以及 DSN 缓存,配置好国内 DNS 服务器以及远程 DNS 服务器,有一个关键选项要开启,远程 DNS 首选 IPv4 ,这样对于需要代理的国外域名就只会返回 IPv4

    总结

    这套配置的核心思想是对于国内域名使用 IPv6 进行访问,网关直接就到爱快主路由,摆脱 OpenClash 对于国内网站的影响,目前国内主流网站 IPv6 建设基本已经非常完善,使用 IPv6 完全没有问题,如果没有 IPv6 也会自动 fallback 到 IPv4 。需要代理的国外域名,由于只有 IPv4 ,网关指向 OpenWrt ,就会被 OpenClash 代理到。

    不足

    虽然是分流了,但是 DNS 泄露检测不通过,这个目前还在研究

    第 1 条附言  ·  22 天前
    AdGuardHome 需要关闭缓存,确保每次 DNS 查询都能到 OpenClash
    74 条回复    2025-07-10 14:08:48 +08:00
    Ipsum
        1
    Ipsum  
       22 天前 via Android
    我感觉 ADG-Mos-clash 更好点。或者自己写个 gfw2adg 软件,mos 都可以扔了。
    EGOISTK21
        2
    EGOISTK21  
       22 天前
    我是这样的,ADG-Mos-tun2socks-代理客户端
    chinni
        3
    chinni  
       22 天前
    其实 dns 没必要这么复杂, 最上游用 udpme 直接转发到 8.8.8.8 就可以了。 然后 要去广告的话前面套一层任意支持全广告的 dns 上游设置为 udpme 。
    xuxiake
        4
    xuxiake  
    OP
       22 天前
    @Ipsum 这样会有点小问题,mos 如果开启缓存,dns 到不了 clash ,无法匹配域名规则
    Laoz666
        5
    Laoz666  
       22 天前
    现在 op 都是 fake ip 了 你多转一道都没必要 你觉得慢只是你没设置好 和 dns 没关系
    lqu3j
        6
    lqu3j  
       22 天前
    @xuxiake 现在一般都是 https , 可以开启 sniff 的呀
    Ipsum
        7
    Ipsum  
       22 天前
    @xuxiake adg 就有缓存,mos 再开有啥用呀。
    xuxiake
        8
    xuxiake  
    OP
       22 天前
    @Laoz666 fake ip 感觉问题还是比较多
    xuxiake
        9
    xuxiake  
    OP
       22 天前
    @Ipsum #7 adg 开缓存也有一样的问题
    Ipsum
        10
    Ipsum  
       22 天前
    @xuxiake #9 过 clash 的不是 fake ip ? real ip 多少有点小问题,比如同时挂在 cf 下面的网站。现在比较完美点的方案是 fakeip 持久化,过 clash 的都是 fakeip 返回,主路由做个 198 的静态就行了。
    Xopher
        11
    Xopher  
       22 天前 via iPhone
    open clash 太难用,用 nikiniki ,自己写的配置文件,感觉够用
    terrancesiu
        12
    terrancesiu  
       22 天前
    其实 adh 就够了,前提是你去境外 dns 都走的是隧道,然后使用 8.8.8.8 或者其他支持 edns 的公共 dns ,最后在 adh 里填写一个你的 isp 的 ip ,基本上解析就非常好了。比如我在阿里云广州配置的 adh ,使用 8.8.8.8 解析的 taobao 就是广州电信的,jd 也是,腾讯也是广东省内,但是 google 都是解析到 sea 了,最后改成 surfshark 的境外 dns 后,国内依旧非常近,google 都解析到了 hkg 。
    docx
        13
    docx  
       22 天前 via iPhone
    套娃这是……代理环境就解决了 DNS ,其它都不需要
    crysislinux
        14
    crysislinux  
       22 天前 via Android
    @terrancesiu 确实,我感觉 Google 的 edns 还是挺准的,作为一个 fallback 还是够用了。
    MYDB
        15
    MYDB  
       22 天前 via iPhone
    dns 泄漏管它干啥,虽然苍蝇不叮无缝的蛋了,但是人总会优先吃无缝的蛋或者处理腐烂的蛋
    xuxiake
        16
    xuxiake  
    OP
       22 天前
    @MYDB 我不是太在意这个,所以就这样吧😂
    sxwsuieyqwe11
        17
    sxwsuieyqwe11  
       22 天前 via iPhone
    我只用 AdGuardHome ,其实它也能分流国内外 dns 请求。
    Mystery0
        18
    Mystery0  
       22 天前
    我之前是用 adh -> mosdns 的方案,但是 mosdns 每次要改分流都要登路由器去修改(自定义配置文件的方案无法启动,不知道为什么),现在换成了 adh -> singbox 的方案,singbox 单独开了个端口入站用来配置出站规则,dns 如果有需要调整的直接远程改 singbox 模板( openwrt 、mac 、Android 我用的模板不一样但是里面大部分规则一样,区别主要是包名、进程名这些不同平台的支持差异)然后拉了自动重启就行了
    因为我自己要用公司的 vpn ,(相关请求理论上不走 singbox ,如果走了 singbox 就指定网卡出去)所以不能用 fakeip ,其他还有一些就是在家访问公司 vpn (公司我放了个树莓派,与家里组网,在家里就让 singbox 走 tailscale 网卡走到树莓派然后代理出去)
    383394544
        19
    383394544  
       22 天前
    怎麼不在 iKuai 上做 dns 分流,只把需要代理的流量交給 openwrt ?這樣國內上網會更快
    SenLief
        20
    SenLief  
       22 天前
    其实 dns 分流没必要那么详细,因为大部分人使用的网站就那么多,大部分在访问一次缓存后就就非常快了,全部代理都没什么问题的。
    TossPig
        21
    TossPig  
       22 天前
    我也分享一下我的方案
    `agh 192.168.1.53:53 -> mosdns 192.168.1.53:5353 -> clash 192.168.1.8:53`
    我是旁路由模式

    需要翻墙的域名会被解析为 22.0.0.0/8,这样除了 tg 其他设备都可以局域网内透明翻墙
    dhcp 下发静态路由 22.0.0.0/8 gw 192.168.1.8
    路由器中也配置静态路由 22.0.0.0/8 到 192.168.1.8 (主要是 andriod 不支持 dhcp 下发路由)

    agh 总体分两路
    1. 127.0.0.1,192.168.1.1 、192.168.1.8 、192.168.1.53 来源的直接用公共上游 doh 或者 dot
    2. 其他上游用 127.0.0.1:5353 也就是 mosdns

    mosdns 的规则比较多总体思路就是
    需要特殊处理的的域名丢给 clash 或者其他一些解析器
    不用特殊的丢给 agh 因为来源是 127.0.0.1 ,所有 agh 会用公共上游
    mosdns 的主要作用是读取各种域名规则,还有就是 ros 不支持内网的 ptr 反查,也靠 mosdns ,要不然每次 nslookup 的时候`服务器`显示个 unkown 我就很难受
    ```
    PS C:\Users\ts> nslookup baidu.com
    服务器: dns.ts.internal
    Address: 192.168.1.53

    名称: baidu.com
    Addresses: 182.61.244.181
    182.61.201.211
    ```

    用了快一年了,很方便,临时要控制某个域名的出口 agh 网页里面调整一下就好
    agh 的日志功能也能很方便的找到某个域名走的哪个远程地址,不用去路由器上慢慢抓包,统计功能也可靠了

    室友打游戏的延迟也只有 18~23 了

    对路由器系统没要求特别要求,支持 dhcp option 配置和绑定静态 IP 就行。很方便我在 ros ,openwrt 、爱快之间来回切换
    weicools
        22
    weicools  
       22 天前
    openwrt 一个搞定,嫌旁路由麻烦
    sentivcn
        23
    sentivcn  
       22 天前
    一个 ADG 就搞定了,干嘛还要套来套去
    miaomiao888
        24
    miaomiao888  
       22 天前
    太复杂了,一个 MOS 就搞定,兼顾去广告、分流、防污染。
    fengyaochen
        25
    fengyaochen  
       22 天前
    装那么多怎么可能快
    wm5d8b
        26
    wm5d8b  
       22 天前 via Android
    用 MosDNS ,域名清单怎么维护更新呢?
    全部指向一个 upstream ,又有 cdn 问题
    DAPTX4869
        27
    DAPTX4869  
       21 天前
    个人方案是 adg -> smartdns, adg 的分流麻烦, 还没法设置代理
    Ch3n4y
        28
    Ch3n4y  
       21 天前
    跟我方案完全一致,哈哈
    vitoegg
        29
    vitoegg  
       21 天前
    因为 openclash 或者 nikki 都是通过 fake ip filter 来实现绕过中国大陆了,感觉更简单的玩法是 dnsmasq - mosdns - openclash/nikki 。
    Dnsmasq 转发到 MosDNS ,MosDNS 根据域名分流不同的 DNS (需要代理的域名分配 openclash/nikki dns ),OpenClash/Nikki 设置成绕过中国大陆且取消掉 DNS 劫持。

    这样都是使用自带的配置,操作简单,数据流清晰。
    xuxiake
        30
    xuxiake  
    OP
       21 天前
    @Ch3n4y 🤝
    xuxiake
        31
    xuxiake  
    OP
       21 天前
    @weicools 爱快的流控、IPv6 还是方便很多
    xuxiake
        32
    xuxiake  
    OP
       21 天前
    @miaomiao888 AdGuardHome 广告过滤、可视化查询日志还是方便些
    Serino
        33
    Serino  
       21 天前
    dns:
    enable: true
    prefer-h3: true
    listen: :53053
    ipv6: true
    enhanced-mode: redir-host
    proxy-server-nameserver:
    - 国内 DNS
    nameserver:
    - 国内 DNS
    nameserver-policy:
    'geosite:private,microsoft@cn,category-games@cn,geolocation-cn':
    - 运营商 DNS
    'geosite:!cn':
    - 国外 DNS

    我猜楼主估计用了 fallback 什么的。

    不用搞那么复杂啊。去看下 Mihimo 的文档 ( https://wiki.metacubex.one/config/dns/diagram/#_3 ),就会发现,命中了需要代理的规则的网址,是直接发送域名到代理服务器的,不是发送解析到的 IP 。解析 IP ,主要是为了后面判断是走直连还是代理,如果是走代理,就把域名(是的,还是发送域名而不是解析出来的 IP )发送给远端代理服务器。

    网上好些做教程的估计都没看过官方文档,各种半桶水,我还见过说不用 fake-ip 肯定 DNS 泄露的,简直一派胡言。基本上我看到说有 DNSleak 的,都是因为不看文档只看各种半桶水教程并且 DNS 用了 fallback 。

    按我上面这个简单的 DNS 设置,就能有很好的分流效果,那些 DNSleak 也不会检测出国内旗子。
    如果要进阶一点,建议起 3 个 agh 的 docker ,分别做国内、运营商、国外 DNS ,而不是把 agh 放在 clash 之前。
    本地缓存做好了,甚至都不需要追求 fake-ip ,还能避免很多奇奇怪怪的问题。
    xuxiake
        34
    xuxiake  
    OP
       21 天前
    @sxwsuieyqwe11 AdGuardHome 分流好像还是稍微有点麻烦
    xuxiake
        35
    xuxiake  
    OP
       21 天前
    @wm5d8b OpenWrt 里面的 MosDNS 插件可以设置定时更新广告规则、GeoIP & GeoSite 数据库
    xuxiake
        36
    xuxiake  
    OP
       21 天前
    @vitoegg 这样设置也挺清晰的,但是 mosdns 最好不要开启缓存
    xuxiake
        37
    xuxiake  
    OP
       21 天前
    @Mystery0 我也发现了,OpenWrt 里的 MosDNS 用自定义配置好像没法启动
    xuxiake
        38
    xuxiake  
    OP
       21 天前
    @383394544 iKuai 咋做分流
    xiaoke
        39
    xiaoke  
       21 天前
    我用 dae+adguard+mosdns
    Laoz666
        41
    Laoz666  
       21 天前
    @xuxiake #8 出了 ping 和 trace 的时候 我感觉没什么问题
    yangfan1999
        42
    yangfan1999  
       21 天前   ❤️ 1
    用 ikuai + openwrt 做透明代理,即使旁路由故障也不影响国内网络访问。参考的是这篇文档: https://www.jackiewu.top/article/best-alternative-solution-for-transparent-gateway
    vitoegg
        43
    vitoegg  
       21 天前
    @xuxiake MosDNS 可以控制哪些结果缓存,哪些结果不缓存的,只要让 Fake IP 不缓存就可以了(不要经过 cache ,并且 ttl 指定为 1 )
    sxwsuieyqwe11
        44
    sxwsuieyqwe11  
       21 天前 via iPhone
    @xuxiake 配置 upstream_dns_file 就可以了,具体参考 https://github.com/Leev1s/FAK-DNS
    huizai2022
        45
    huizai2022  
       21 天前
    我直接 2 个 AdGuardHome 一个国内 一个国外
    BlackSas
        46
    BlackSas  
       21 天前
    我是用 surge 实现的。clash 在这方面确实有问题,openwrt 里又复杂而且修改验证也比较麻烦。
    NGUTHONG
        47
    NGUTHONG  
       21 天前
    我觉得有点太复杂了,流量路径上设这么多关卡还都是全局配置,但凡一个插件出问题家里网络不就炸了吗
    bclerdx
        48
    bclerdx  
       21 天前
    @Laoz666 那应该设置与和 DNS 的关系是啥?
    GotKiCry
        49
    GotKiCry  
       21 天前
    现在是 SmartDNS <- MosDNS <- Adh <- ShellCrash
    之前用 MosDNS <- Adh <- ShellCrash 总是会遇到网页加载慢或者第一次打不开第二次刷新就打开的情况,一直找不到什么问题,换成 SmartDNS 请求 MosDNS 做分流后就没啥问题了
    EGOISTK21
        50
    EGOISTK21  
       21 天前
    @NGUTHONG 我用了 OSPF 来解决这个问题,除了节点维修的时候 fallback 了一次,已经稳定运行了两年了
    xuxiake
        51
    xuxiake  
    OP
       21 天前
    @NGUTHONG 反正是 allinboom ,问题不大[狗头]
    likeflower
        52
    likeflower  
       21 天前
    C 规则前面插入
    - GEOSITE,CN,DIRECT
    - GEOIP,CN,DIRECT,no-resolve
    hiyoi
        53
    hiyoi  
       21 天前 via Android
    目前用 agh -> paopaodns ,自建的 paopaodns 内部就有 mosdns 分流了,这样保证无污染。代理使用 nikki ,关闭 dns 劫持,开启 ipv4 代理,按需选要代理的设备,模式用 tproxy ,不用 fakeip(问题太多),mihomo 配置只保留一组 nameserver 指向 agh 就行了。

    稳定运行 1 年多了。
    hjj0529
        54
    hjj0529  
       21 天前
    之前我也用这个方案,后来发现 docker 容器里面部署的 vpn 不好使,技术太菜,没找出原因,干脆不搞了。
    lozt
        55
    lozt  
       21 天前 via Android
    我自己家里现在用的是 adguardhome -> mihomo(redir-host),mihomo 里配置的上游 dns 默认国外的,policy 里配置 cn 的域名就走国内。似乎也还行- -,没太关注性能
    linhongjun
        56
    linhongjun  
       21 天前
    不知道你们天天都在干嘛 搞这么复杂
    starrys
        57
    starrys  
       21 天前
    @Serino #33 dns.fallback 具体是有什么问题?
    我的理解是,clash 会并发地向 dns.nameserver 与 dns.fallback 这两组 DNS 服务器发出 DNS 请求,关键问题来了,『需要等待 dns.fallback 中的服务器返回 DNS 结果后,才能决定使用哪一组 DNS 服务器的结果』,然而,网上流传的配置里面的 dns.fallback 服务器往往是国外的 DoH/DoT 、是比较慢的,这就明显拖慢上网速度。
    看我理解的对吗?

    https://clash.wiki/configuration/configuration-reference.html
    xpn282
        58
    xpn282  
       21 天前
    我是觉得不用搞那么复杂,OpenClash 的 dns 分流系统足够使用了,就看你怎么写咯,我的就很简单,一切正常,我是用 redir-host 模式:
    dns:
    nameserver:
    - 运营商 dns
    nameserver-policy:
    geosite:gfw:
    - 国外 dns

    以上的意思是:gfw 黑名单域名使用国外 dns 解析,其余的都用运营商 dns 解析,我觉得够用了,简单实用,不需要搞 fallback 之类的。

    当然还可以根据自己的需求修改合适自己的分流方案。
    比如国内域名用国内 dns ,其余的全部用国外 dns 。
    另外还可以给国外 dns 做一层代理,实现代理 dns 解析,防止在 redir-host 模式下,直接使用国外 dns 的时候被污染,导致访问 GitHub 之类的异常。

    我个人觉得 OpenClash 的 dns 系统足以应对 dns 分流,不需要借助其他工具,就看你怎么写怎么玩咯。
    xuxiake
        59
    xuxiake  
    OP
       20 天前
    @hjj0529 docker 容器为啥要部署 VPN 。。
    xuxiake
        60
    xuxiake  
    OP
       20 天前
    @linhongjun 反正就是折腾嘛[狗头]
    xuxiake
        61
    xuxiake  
    OP
       20 天前
    @xpn282 这是手动用配置文件嘛,图形化界面好像没这个选项
    hjj0529
        62
    hjj0529  
       20 天前
    @xuxiake 方便外面连回家,因为之前我开放太多端口被电信收回过公网 ip ,现在我只敢开放 vpn 端口回家。
    xuxiake
        63
    xuxiake  
    OP
       20 天前
    @hjj0529 #62 哦哦,我是用的爱快自带的 OpenVPN 服务端
    Ruslan
        64
    Ruslan  
       20 天前
    我真的不是很理解你们喜欢多套一个 adh 的操作...

    无论是 smartdns 还是 mosdns 搭一个 anti-ad 反广告规则一样能 dns 反广告的,多套一层 adh 我唯一的感想就是变慢了。
    adh 那个可以搭配浏览器规则的特性更是多余...除了有个好看的 UI 我始终没感受到 adh 的优势。
    SakuraYuki
        65
    SakuraYuki  
       20 天前
    我是懒狗,直接 surge 接管网络,不需要代理的设备直接走主路由,需要代理的设备走 surge 网关,surge 内部规则设置好,国外走 snell 服务器的默认 dns ,国内用运营商和阿里 dns
    orluna
        66
    orluna  
       20 天前
    op 问一下是 adh 上游设置为 openclash 吗
    xuxiake
        67
    xuxiake  
    OP
       20 天前
    @Ruslan adh 有个可视化日志界面,还是可以的
    xuxiake
        68
    xuxiake  
    OP
       20 天前
    @orluna 是的
    janzwong
        69
    janzwong  
       20 天前
    @Mystery0 自定义配置要去看日志,分析是卡在哪个加载环节了,我目前就是 adg+自定义 mosdns+openclash ,国内 realip 国外 fakeip ,adg 开缓存。昨天尝试研究了一下 adg->singbox ,最新的 1.12 版本实在是没研究明白,暂时放弃了。
    xpn282
        70
    xpn282  
       20 天前
    @xuxiake
    OpenClash 的“覆写设置”-“dns 设置”
    这里就可以填写 Nameserver 和 Nameserver-Policy 了,直接 dns 分流。
    不需要借助其他工具
    Autonomous
        71
    Autonomous  
       20 天前
    这段时间折腾下来我明白了一个道理:系统越复杂,越容易出问题。所以为了鲁棒性,就一个 AdGuard Home 就好了
    charley008
        72
    charley008  
       19 天前
    我想问一下,mosdns 上游假如是比如 223.5.5.5 ,会不会被限流?阿里与腾讯的 dns 不是已经限流了吗?我就那么点设备每个月 dns 查询都超过 1000w 。
    xuxiake
        73
    xuxiake  
    OP
       19 天前
    @charley008 国内 DNS 服务器我用的电信运营商的 DNS ,应该不会存在这个问题,而且 mosdns 可以设置缓存
    Serino
        74
    Serino  
       12 天前
    @starrys 配置了 fallback ,就会向 nameserver 和 fallback 的 DNS 同时发起请求。完全没必要啊,只需要配置 nameserver-policy ,国内域名(geosite:cn 或者 geolocation-cn ,类似白名单模式)都请求国内的 DNS ,其余域名都访问国外 DNS 。或者,国外域名(geosite:!cn 或者 geolocation-!cn ,类似黑名单模式)都请求国外 DNS ,其余域名都访问国内 DNS 。或者两者结合,把所有域名都分类好,就完事了。
    个人是不太喜欢 fallback 所有域名都对国内国外 DNS 发起请求的:DNS 服务器发现有个客户端总请求国外网站的 DNS ,肯定有问题嘛。…………我猜一些机场用 fallback+一长溜的配置文件,也是为了照顾一些老旧的无法用 geosite 用 geoip 这类分类机制的机子
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3460 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 00:40 · PVG 08:40 · LAX 17:40 · JFK 20:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.