关于国内外分流的问题请教一下大佬们 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jaco3426
V2EX    宽带症候群

关于国内外分流的问题请教一下大佬们

  •  
  •   Jaco3426 1 天前 2496 次点击

    目前使用的是 RouterOS 物理机+OSS 物理机旁路透明代理

    目前是使用 OSS 部署 PaoPaoDNS 配合 Xray 的 fakedns 进行分流,PPDNS 设置参数强制使非 CN 域名的上游 DNS 服务器为 Xray 的 DNS 入口,所有设备 DNS 设置为 PPDNS ,网关为 ROS ,ROS 将指定设备 Address-List 到 fakeip 段连接通过 PBR 到 OSS 的 Xray 的 Tproxy 入口。

    之前有试过 ROS 维护 CNIP 表通过 Socksify 或 PBR 进行分流,效果不太理想,一来不知道是当时思路不成熟有配置错误还是其他原因,访问网页会卡顿,二来 cnip 列表很难维护,依靠网上现成不够全面的列表会导致有些应用不能使用,如某买菜 app 等,为了修复这个问题,我写了个脚本读取 OSS 脚本生成的 geosite_cn.txt (需要修改文件内容为正则表达式并将每行计数到行首,因为文件过大,ros 只支持将 60kb 以内的 txt 写入数组,需要通过 read+offset+chunk-size 读取 txt 中每一行的正则表达式),通过将/ip/dns/cache 中的 name 与正则表达式匹配,将匹配得到的 name 对应的 ip 更新进 CNIP 表以达到类似使用域名分流的效果,但是这样一来并非实时更新,二来 ros 的循环读取比对非常的久(千万级甚至更多),维护一次列表大概需要 1 分钟(我是 x86 物理机,i513500te+32g3200 频率内存),ros 好像并不能使用多核来运行脚本?(这方面并不太懂)且脚本需要不间断循环,并不能触发式运行。

    折腾了半天发现效果并不好,所以换到现在使用的这套配置,流畅不卡顿。不知是使用 fakeip 的原因还是我之前的配置有问题。但思来想去,还是比较想使用纯 realip ,但是个人认为这高度依赖域名分流,但 ros 本身并不能很好的完成这项工作。因为所有都是 xhttp 部署的节点,所以 xray 是不能换的。想请教一下各位大佬有什么新思路或者好的方案吗?

    40 条回复    2026-01-27 01:43:22 +08:00
    hackroad
        1
    hackroad  
       1 天前
    你说的访问网页卡顿是你 dns 解析出来的 ip 不正确,能走国内的走到国外去了
    坦白的说 我 ip 库已经 1 年多没更新了,照样稳的不行。
    Naples
        2
    Naples  
       1 天前 via Android
    Ip 分流用 bgp ,dns 分流我用的 ROS 的 l7 过滤、劫持,你也可以用第三方的
    docx
        3
    docx  
       1 天前 via iPhone
    有代理还折腾什么 dns
    Jaco3426
        4
    Jaco3426  
    OP
       1 天前
    @hackroad 确实是能走国内的走了国外,所以之前我也是在解决这个问题,并不是 dns 解析出来的 ip 不正确,而是这些地址他就是不在 cnip 列表里。比如叮咚买菜解析出来的 ipv6 地址他就是不在 cnipv6 表里(我把几个知名的列表都合并了),但它却在 cndomain 表里,必须通过将域名解析到 ip 添加到列表内来维护,不然连 app 都打不开。总不可能是国内的买菜软件能解析出不在国内的 ip 地址吧?事实就是这个地址并不在现成的列表当中。而维护域名比 ip 简单太多了。但之前单纯访问国外的网站也会卡(我到现在不知道哪里有问题直接放弃这个方案了)。而且我这环境比较复杂,ros 多 isp ,要做源进源出,负载均衡等等,很容易就有规则冲突还不好排查,oss 也是多网卡,写透明代理,包括回包路径之类的问题,有哪里没想到就得停下很久。
    Jaco3426
        5
    Jaco3426  
    OP
       1 天前
    @Naples 方便详细说说吗?请问是 L7 过滤域名给不同的 dns 服务器吗?然后要怎么将返回的 ip 分类?还有就是 ipv6 适用吗?
    Jaco3426
        6
    Jaco3426  
    OP
       1 天前
    @docx 就是为了让代理只负责需要代理的连接。主路由和旁路由各司其职。所以才想着要怎样才能在 ros 里通过域名分流。
    Ipsum
        7
    Ipsum  
       1 天前 via Android
    你可以试试 mosdns ,使用 fakeip 只分流 gfw 域名到 xray 。
    Jaco3426
        8
    Jaco3426  
    OP
       1 天前
    @Ipsum PPDNS 就是用的 mosdns ,现在我这套方案跟你说的基本是一样的,用着没问题,只是想问问各位大佬,有没有什么办法不用 fakeip 。
    crysislinux
        9
    crysislinux  
       1 天前 via Android
    v6 不准就把 v6 的结果丢了好了
    hackroad
        10
    hackroad  
       1 天前
    @Jaco3426 #4 之前折腾 ipv6 的时候确实碰到过类似情况,app 卡顿,打开网页卡顿,索性关了 ipv6. 维护 2 个库确实麻烦,不过商业库可能好点,试试商业库。
    libregratis
        11
    libregratis  
       1 天前
    可以试试 daed ,之前用 ImmortalWrt 临时跑了一下,分流的效果不错
    Jaco3426
        12
    Jaco3426  
    OP
       1 天前
    @libregratis 请问说的是 dae 的 dashboard 吗?我没法换 dae ,现在支持 xhttp 的好像只有 xray 。
    libregratis
        13
    libregratis  
       1 天前
    @Jaco3426 嗯,daed 把前端 dae-wing 和后端 dae 打包了,有一个简单的 dashboard ;开始用 Ubuntu 跑的,需要配置 SNAT (因为国内不通但海外通),后来在 U 盘上跑了几周 ImmortalWrt ,因为软件源收录了 daed ,直接 opkg install 即可;优点,国内外的分流体验很不错;缺点,dashboard 够用但功能没有 mihomo 的强大
    Jaco3426
        14
    Jaco3426  
    OP
       1 天前
    @libregratis 可惜,现在支持 xhttp 的只有 xray 自己的内核,dae/mihomo 之类的全都不能用。
    wuruxu
        15
    wuruxu  
       1 天前
    我目前用在 openwrt 上 wireguard + dnsmasq + nft 通过域名来分流,效果很不错
    yeh
        16
    yeh  
       1 天前
    自己写了个 mosdns 的规则, 有 cnlist (给真实 ip ),gfwlsit (给 fakeip )。

    都不在 2 者名单的,先走 cf/google + ecs 国内 查一遍 ip ,如果 ip 在 cnip ,则给真实 ip ,否则给 fakeip 。

    这里面不包括广告过滤,没缓存,就是尽快给最新结果

    前面加了个 adguardhome ,来缓存 dns 结果和 x 广告,效果还行。
    Jaco3426
        17
    Jaco3426  
    OP
       1 天前
    @wuruxu 没明白 wg 是干啥的
    wuruxu
        18
    wuruxu  
       1 天前
    @Jaco3426 wireguard 科学上网用的
    an0nym0u5u5er
        19
    an0nym0u5u5er  
       1 天前   1
    给你个我前几天刚更新的手搓版本。
    内核 mihomo ,刚从 clash verge rev 切到了 clash party 。
    主要使用了 GEOsite 和 GEOIP ,优先匹配 GEOsite ,然后匹配 GEOip ,这样在域名层面能匹配并正确分流的,就不用等 DNS 之后再分流了,国内的网站也能正确的解析到国内的 IP ,因为都是 direct 。
    还有一些国外的 APP ,根据进程名匹配,直接走代理。
    太具体的不讲了,贴一下片段
    rules:
    # LAN
    - GEOSITE,private,DIRECT,no-resolve
    - GEOIP,private,DIRECT,no-resolve
    - GEOIP,lan,DIRECT,no-resolve

    # GEOSITE
    - GEOSITE,cn,DIRECT
    - GEOSITE,apple-cn,DIRECT
    - GEOSITE,google,PROXY
    - GEOSITE,gfw,PROXY
    - GEOIP,telegram,PROXY
    - GEOSITE,geolocation-!cn,PROXY

    # GEOIP
    - GEOIP,cn,DIRECT

    # other
    - DOMAIN-SUFFIX,cn,DIRECT

    # 按进程名划分的(国内)
    - PROCESS-NAME,Telegram,PROXY
    - PROCESS-NAME,Raycast,PROXY
    - PROCESS-NAME,Dropbox,PROXY

    目前使用的 GEO 数据
    # 5. import GEO Data
    geo-auto-update: true
    geo-update-interval: 24
    geodata-mode: true
    # Custom GEO Download Address
    # source https://wiki.metacubex.one/en/config/general/
    # data https://github.com/MetaCubeX/meta-rules-dat
    geox-url:
    # geoip: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat"
    geoip: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"

    # geosite: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
    geosite: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"

    mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb"
    asn: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/GeoLite2-ASN.mmdb"
    Jaco3426
        20
    Jaco3426  
    OP
       1 天前
    @wuruxu 用来回家的?我以为是用来分流的没搞明白。
    Jaco3426
        21
    Jaco3426  
    OP
       1 天前
    @an0nym0u5u5er 谢谢。不过我的问题在于如何让 ros 或旁路的其他服务通过域名分流,不太喜欢把流量全给代理。
    wuruxu
        22
    wuruxu  
       1 天前
    @Jaco3426 出国的
    wymam
        23
    wymam  
       1 天前
    我是直接把国外 V6 全部拦截,只放行国内 UI !国外全部走 V4 !然后根据 IP 列表,国内直连,国外到 op
    pagxir
        24
    pagxir  
       1 天前 via Android
    @Jaco3426 可以用 nat64 ,DNS 那边采用 DNS64 ,需要代理的返回 nat64 的 v6 IP ,不需要的全直连。
    piaorenyong
        25
    piaorenyong  
       1 天前
    同 PaoPaoDNS+ROS ,不过我用的 singbox
    Jaco3426
        26
    Jaco3426  
    OP
       1 天前
    @pagxir 是好办法,buuuuut ,ros 并不支持 nat64 ,估计今年能支持吧。
    Jaco3426
        27
    Jaco3426  
    OP
       1 天前
    @piaorenyong 是好用的,刚在 ros 里装了 ppdns ,用着也不错。作者说近期可能会更新。
    keyfunc
        28
    keyfunc  
       1 天前
    试试 mosdns ,十分的好用,域名规则可以直接用 https://github.com/Loyalsoldier/v2ray-rules-dat/tree/release ,一般加载 direct-list.txt 和 proxy-list.txt 就足够用了,其余的可以同时查询国内 dns 和国外 dns ,返回国内 ip 就直接返回,返回国外 ip 就再扔给后面的代理查一次。
    Jaco3426
        29
    Jaco3426  
    OP
       1 天前
    @keyfunc ppdns 用的就是 mosdns ,解析的逻辑大家都是大差不差的,我的问题不在于此。
    keyfunc
        30
    keyfunc  
       1 天前
    不要把域名分流的事情扔给 RouterOS ,你说的 ppdns 和 mosdns 一样的话,ros 防火墙上劫持下 dns 流量,把所有 dns 请求全部仍给 ppdns 处理。mosdns 可以根据域名来选择使用国内 DNS 查询还是 xray 的 dns server 来查询。你发现的国内域名解析出来国外 ip ,大可能是你使用了国外 dns 解析出的问题。
    chiikawa
        31
    chiikawa  
       21 小时 27 分钟前
    旁路 AdGuard+mihomo 负责 DNS 查询和代理,同时 OSPF 宣告非 CNIP 走代理,ROS 检测代理是否正常自动启停 OSPF 恢复直连
    Jaco3426
        32
    Jaco3426  
    OP
       20 小时 48 分钟前
    @chiikawa 这个貌似可行,今天试试
    Jaco3426
        33
    Jaco3426  
    OP
       20 小时 11 分钟前
    @keyfunc 并不是国内解析出国外,而是解析出的国内 ipv6 地址并不在 cnipv6 ( geoip:cn )列表里,如果根据 ip 分流而不根据域名分流,那它自然被分流去了国外导致无法访问。正常解析流程是如果域名在 geosite:cn ,那 mosdns (带或不带 ecs 可能需要设置多条规则,有些服务商不支持 ecs )去查设置的国内上游,检查返回的 ip 是否在 geoip:cn (这里出现问题)然后再进行后面的步骤...除了国外不使用 ipv6 ,目前没想到什么解决方案
    luolw1998
        34
    luolw1998  
       20 小时 6 分钟前
    所有 ipv6 走直连,境外域名走 fake ip
    keyfunc
        35
    keyfunc  
       19 小时 48 分钟前
    @Jaco3426 IPv6 池分配的还是十分规范的,京东买菜哪个域名解析出来的 IP 不在 IPv6CN 列表里,域名和解析出来的 IP 都贴出来看一看
    Ipsum
        36
    Ipsum  
       19 小时 5 分钟前   1
    @Jaco3426 #8 考虑 cnip 就是自己找事折腾。直接在 gfw 中的网站 dns 返回 fakeip ,正常网站 dns 直接返回 realip ,哪需要考虑 ipv6 的问题。而且 realip 可能出现错误分流。比如 a.com 是 gfw 域名,b.com 是正常网站,a 和 b 都在同一个 cdn 中。这个 realip 是没法区分的。我感觉你觉得 fakeip 不爽的问题是没有开 fakeip 持久化,导致重启服务后分流混乱。如果 xray 之类的服务端能使用 hash 直接在地址池里半持久化 fakeip 或者默认直接开始持久化应该会好很多,因为很多人不知道 fakeip 可以持久化,也不知道为什么需要这个功能。
    Jaco3426
        37
    Jaco3426  
    OP
       18 小时 48 分钟前
    @keyfunc 现在没时间去复现了。我现在查出的地址都在列表内了。但是感觉不管用什么服务器解析,他都应该解析出国内的地址,之前我是用纯 ip 来分流的,要么是我分流设置有问题(和负载均衡这些规则有冲突),要么当时 ip 没更新在列表内。
    Jaco3426
        38
    Jaco3426  
    OP
       18 小时 44 分钟前
    @Ipsum 我再研究研究
    lnbiuc
        39
    lnbiuc  
       7 小时 18 分钟前
    感觉预制域名列表的分流方案都有坑,列表肯定不完整而且更新不及时
    你不 care 所谓 DNS 泄漏的话有个完美方案,不维护不信任 geosite (定向分流的除外,比如 geosite:category-ai-chat-!cn ),所有域名默认先查国内 dns ,然后判断返回 ip 是否是 geoip:cn ,不是则 fallback 到国外 DNS 。
    如果你 care DNS 泄漏的话,可以带 ECS 查询 8.8.8.8 ,然后看返回 ip 是否是 geoip:cn 来判断使用国内 dns 重新解析还是使用国外 dns 重新解析
    这样国内网站能直连的一定是最快的。再配合 geoip 分流下,geoip:cn 直连其他的全部代理,设置可以细分 geoip:us ,geoip:eu
    fakeip 单机用挺好的,局域网用坑太多了 真不建议
    xray 就有个非常好的方案 https://xtls.github.io/document/level-1/routing-with-dns.html
    Jaco3426
        40
    Jaco3426  
    OP
       5 小时 10 分钟前
    @lnbiuc 这个几个月前看过,月初更新了之后我又看了一遍,这样做的前提的,所有流量都要过 xray ,不是 allinone 环境这种方案我一开始就 pass 了。如果分流主路由来做,那么如果不使用 fakeip 就需要二次甚至三次查表(一次查是否为 geosite:cn ,两次查 geoip:cn:一次在 DNS 服务器,一次在主路由),虽然 mosdns 这类能读取二进制文件的,查表速度很快,但是体感来说 ros 好像并不快。如果使用 fakeip ,以我现在的方案为例,先查询 ppdns ,ppdns 递归查询结果属于 geoip:cn ,直接返回 realip ,否则 ppdns 会扔到 xray 的 fakedns 返回 fakeip 。这样主路由不需要查表,只需要将 fakeip 段以及 tg 这种的 realip 列表 PBR 到旁路就可以了。这种方案体感其实很好,但 fakeip 总归有些问题,我这几天一直在实验有没有新的全 realip 方案,是通过一些路由协议,还是其他 mangle/nat 之类的,估计得研究一阵子了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1008 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 22:53 PVG 06:53 LAX 14:53 JFK 17:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86