V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yyysuo
V2EX  ›  宽带症候群

终极的分流策略

  •  
  •   yyysuo · 1 天前 · 4361 次点击
    这里聊的是分流策略,不是 fakeip 、bgp 、ospf 、ipset 、ipt 、nft 等分流用到的技术手段,也不是 sing-box 、mihomo 等核心,更不是 openclash ,小猫咪等集成代理工具。

    首先要确定分流的对象,互联网上的访问需要分流的,就是域名,没有对应域名纯 IP 访问的场景极其有限,可以做特殊处理。

    分流总体上可以分为 2 类,直连和代理,需要代理的域名就直接引入到 sing-box/mihomo 等代理程序中进一步分流即可,代理程序按域名分流十分成熟了。

    那如何判断一个域名需要代理呢?目前有各种域名列表,直连域名列表、gfwlist ,基本上覆盖了大部分常用的域名,重点是那些没在域名列表中的域名,虽然访问的机率小,其实是海量的,永远也无法维护完全的。

    于是就产生了白名单和黑名单 2 种模式,即不在列表中的域名,要么全走国内 dns 解析,要么全走国外 dns 解析。可能遇到尴尬的场景,黑名单模式下,某个人个博客不在 gfwlist 列表中,无法访问,需要手动添加域名至 gfwlist ;白名单模式下,某国内购物网站突然定位到了国外,出停车场时扫码付费一直在转圈,因为小程序的域名 xxx.top 只做了国内解析,国外 dns 压根没解析结果。

    对于这种尴尬,解决的办法有两种
    1:列表外域名国内 dns 解析,解析结果为国外 IP/无 IP 的,使用国外 dns 再解析一次,速度快,dns 有泄露。
    2:列表外域名国外 dns 解析,附加上国内 ip 作为 ecs ip ,速度慢,结果可能不够精确,dns 无泄露。

    当然还有很多细节问题,比如方法 2 就无法解决国外 dns 无解析结果的情况,需要回落到国内 dns 做 2 次解析,可以添加过期缓存来保存分流结果等等等等,需要慢慢打磨。

    以上 2 种方法,对域名列表的依赖度大大降低了,基本上可以自动分流不在列表中的域名,分流精度大大提高,体验极佳。

    推荐方法 1 ,速度快,dns 逻辑处理起来更简单。
    第 1 条附言  ·  1 天前
    54 条回复    2024-11-21 16:02:06 +08:00
    yyysuo
        1
    yyysuo  
    OP
       1 天前
    再多说几句,主题是如何分流,其实分流完成后,对于需要代理的域名发 fakeip 直接远程解析即可,不需要使用解析出来的 ip ,否则有可能出现 8888 走了美国代理,解析出对美国友好的 IP ,奈飞选了新加坡节点,要么速度慢,要么解锁失败的情况。
    gfreezy
        2
    gfreezy  
       1 天前
    自动探测,同时建立 2 个连接:通过代理和直连。哪个先建立成功就用哪个。然后缓存结果,下一次直接使用缓存的结果,同时再探测一下更新缓存。

    除了 DNS 污染的极端情况,不需要黑名单也不需要白名单
    xiaooloong
        3
    xiaooloong  
       1 天前
    或者只做 ip 分流,然后自建递归 dns
    yyysuo
        4
    yyysuo  
    OP
       1 天前
    @xiaooloong ip 哪来的呢?逃不开 dns 的,既然 dns 都能分好了,就不需要 ip 再分一次。
    yyysuo
        5
    yyysuo  
    OP
       1 天前
    @gfreezy 有成品吗?想来应该是全部流量全引入 app 再处理吧。
    Kinnice
        6
    Kinnice  
       1 天前
    拿几乎不要钱的国内 阿里云/腾讯云 VPS, 自建了 DNS (doh/dot)服务器, 支持 ECS
    - 国内域名名单直接走支持 ECS 的国内 DNS
    - 其他域名走支持 ECS 的境外 DNS ( ip 直连的 doh )
    - 乐观 cache
    - ttl ++

    本地也不用跑一堆东西
    解析到的 IP 始终是纯净的
    境内的话是归属地友好
    mihomo/sb 等都支持嗅探,因此给到代理服务器的还是域名,不用担心流媒体异常
    yyysuo
        7
    yyysuo  
    OP
       1 天前
    @Kinnice 这不就是我说的方法 2 么。
    Kinnice
        8
    Kinnice  
       1 天前
    @gfreezy #2 某些站点,国内可连,但不向国内提供服务。好像就不行了
    Kinnice
        9
    Kinnice  
       1 天前
    @yyysuo #7 你说的这些方法都是老生常谈的。一直都是差不多这样。可能共同去维护一份 dns 订阅列表才是正解。
    jqtmviyu
        10
    jqtmviyu  
       1 天前
    我现在是
    国内白名单, 用国内 dns
    名单外先用国外 dns, 附带 ecs, 如果解析为国内, 再用国内 dns 解析一次.

    分流策略最终还是要结合工具的. 你说的方法, 光靠 clash 我没想到该怎么实现.
    yyysuo
        11
    yyysuo  
    OP
       1 天前
    @jqtmviyu mosdns 可以实现,sing-box 也可以单独实现。
    wu67
        12
    wu67  
       1 天前
    国内域名 ip 直连, 其他全部代理. 自己用的规则自己维护就行.
    yyysuo
        13
    yyysuo  
    OP
       1 天前
    @Kinnice 举个成品的例子呢,重点是不在域名列表域名的处理和 2 次 dns 解析。
    yyysuo
        15
    yyysuo  
    OP
       1 天前
    @wu67 维护成本太高了,就像停车场的例子,没法即时维护的,只能先关了代理,后续也不好再查是哪个域名有问题,体验太差。
    ljn917
        16
    ljn917  
       1 天前 via Android
    国内 DNS 解析出国外的 IP ,或者国外 DNS 解析出国内,这两种是可以确定最佳策略的。其他两种情况就只能手动列表。
    isAK47
        17
    isAK47  
       1 天前
    国内 IP 直连,非国内 IP 走代理,不需要什么域名列表
    xiaooloong
        18
    xiaooloong  
       1 天前
    @yyysuo #4 ip 从 dns 来是因为用的 dns 缓存服务器。递归交给外部网络做了。

    企业级别的防火墙或者网关的 dns 服务都是支持自己做递归,直接去域名权威 dns 上查询结果的。这样 dns 就是从 ip 来的了。只用做 IP 分流即可。
    yyysuo
        19
    yyysuo  
    OP
       1 天前   ❤️ 1
    @xiaooloong 递归没缓存很慢吧,特别是第一次访问的时候。这真是另外一条赛道了,看他们搞 bgp 分流,据说体验也不错,不过门槛比较高。
    beijiaoff
        20
    beijiaoff  
       23 小时 56 分钟前
    说句没啥建设意义的情绪话,没有 100%完美的方案,复杂度、易用性、有效性的三角。要是没有墙就好了
    yyysuo
        21
    yyysuo  
    OP
       23 小时 52 分钟前
    @beijiaoff 没说完美啊,现状下仅从体验来讲最好的,家里路由上部署全透明,ios 侧 sing-box 从来不关,国内国外没遇到卡顿访问不了的情况,可以了。
    vinsony
        22
    vinsony  
       23 小时 33 分钟前
    我是国内域名国内 dns 解析,国外域名国外 dns 解析,不在列表内的域名国内外同时解析连速度最快的那个,代理根据 IP 分流
    hzw
        23
    hzw  
       23 小时 26 分钟前
    国内的对象全部直连 国外的对象全部代理
    不就行了吗 也是很简单的策略 一句话就说清楚了呀 dns 是后面的具体操作了 直连的走 ali 企鹅的 public dns ,代理么就都不用管了
    至于怎么判断直连代理 其实也不难的 就是你说的黑白名单,国内走白名单,白名单外全部代理
    国内白名单用 geo 库,基本是全部覆盖的
    感觉现在分流不是什么大问题
    bigshawn
        24
    bigshawn  
       23 小时 24 分钟前
    不太懂,但是感觉跟 sing-box 的 dns 规则挺像的
    yyysuo
        25
    yyysuo  
    OP
       23 小时 22 分钟前
    @vinsony 这种如果有被污染的列表外域名就处理不了了。
    vinsony
        26
    vinsony  
       23 小时 14 分钟前
    @yyysuo #25 那必须要污染的 IP 可用而且比真实的快,平时访问的网站也就那几个,基本上不存在这种问题
    NoCloud
        27
    NoCloud  
       21 小时 57 分钟前
    感觉对普通人来说,都不用考虑泄露的问题,速度和准确性优先就完事了。
    被重点关注、因为 DNS 泄露了访问记录就会被盯上的网站基本都在 gfwlist 上了;其他的有一两只漏网之鱼也无所谓。
    真踩红线了,就算全局也没用。
    basncy
        28
    basncy  
       21 小时 50 分钟前
    @Kinnice #8 @gfreezy #2 @yyysuo #13
    bing.com 和 部分 adtrafficquality.google 等, 都能解析到正确 ip , 但国内外提供的服务不一样。
    Byleth
        29
    Byleth  
       20 小时 26 分钟前
    @gfreezy 这个对于检测到中国 IP 后跳转中国特供阉割服务的网站不行,比如领英
    JustdoitSoso
        30
    JustdoitSoso  
       20 小时 18 分钟前 via Android
    我用的代理软件是 clash ,clash 可以用这个吗?如果问题太白痴了可以不回答,我也在线 dns 解决方案。暂时没真找到自己想到的……
    gfreezy
        31
    gfreezy  
       18 小时 22 分钟前 via iPhone
    @Byleth 这种情况只能把域名直接加规则里面。
    @yyysuo 自己实现的。
    povsister
        32
    povsister  
       17 小时 44 分钟前
    唉。fakeip
    yyysuo
        33
    yyysuo  
    OP
       17 小时 39 分钟前 via iPhone
    @basncy 这种是需要特殊处理的
    xpn282
        34
    xpn282  
       15 小时 0 分钟前 via iPhone
    早就不玩 dns 了,dns 只用运营商的了

    现在整体思路就是,国内域名和 ip 直连,其他全部代理。其中黑名单的域名本地不解析,足够了,不搞那些有得没得,使用下来毫无意义,对我而言
    frankilla
        35
    frankilla  
       14 小时 14 分钟前 via iPhone
    同楼上,折腾这么几年根本不想折腾了,而且泄露真的很重要吗,一点也不。
    zyqf2016
        36
    zyqf2016  
       13 小时 27 分钟前 via iPhone
    @Kinnice 在公网自建 dns 可能有较大风险
    likai
        37
    likai  
       9 小时 50 分钟前 via Android
    最近刚玩分流碰到一个问题。
    一个用了 cdn 的威尼斯网站,
    国内正常可访问,
    禁止代理访问。
    用上分流之后,就访问不了了。
    将域名和 cname 域名加白名单都没用。
    yyysuo
        38
    yyysuo  
    OP
       8 小时 44 分钟前 via iPhone
    @likai 发出来看一下呀 可能换个节点就好了
    SodaPopBoy
        39
    SodaPopBoy  
       8 小时 18 分钟前 via Android
    而我,只想抄作业
    yyysuo
        40
    yyysuo  
    OP
       8 小时 1 分钟前
    @SodaPopBoy append 里面有作业,你抄不抄?
    maybeonly
        41
    maybeonly  
       7 小时 53 分钟前
    我现在的实现是这样的:
    基础的还是白名单+ip 分流+自建递归
    +黑名单直接用 1111 解析的
    然后每天在 gww (宽带出口)上收集来自递归服务器的访问 udp 53 端口的请求
    夜里解析这些域名,然后动态扩充白名单。

    这些累积的白名单目前是 3 个月校对一次

    基本逻辑还是那个:有任何一层权威在墙内的就算墙内域名。
    实际上遇到过的问题:有些域名在 dnspod 或者 ali 上,但是只能通过海外访问,这些就得手工配置了……
    yyysuo
        42
    yyysuo  
    OP
       7 小时 42 分钟前
    @maybeonly
    自动扩充域名列表我是直接在 mosdns 配置 lazy_cache (过期缓存/分流结果)并永久保存来实现的,家庭使用,目前的条目数没超过 2 万条,mosdns 处理这点数据是没有压力的,其它方案规则数据量多了,不知道效率如何。

    我目前域名基本上都是自动处理,极少需要(基本没有)手动添加规则,不明白你说的只能海外访问的域名是哪类,像这种吗? https://www.fx168news.com/
    wm5d8b
        43
    wm5d8b  
       7 小时 41 分钟前 via Android
    现在不少国外域名使用的 cdn ,在国内有了节点,直接访问速度比代理不知道高到哪里去了。
    但是呢,这个国内节点你得使用运营商的 dns 才能解析到。而且这个国内节点不是电信联通移动都能解析并访问,可能只有其中一两家能访问,其他运营商还是得访问国外的 cdn 节点,这样还是得走代理,否则慢得不能接受。
    就这个情况,要自己一个人不断维护不太现实。因为大家使用的运营商不一样,相同运营商南方北方还不一样,也就杜绝了共同维护一份的可能。
    以上情况和墙完全没关系,纯纯就是访问速度带来的分流问题了,没有能解决的方案
    yyysuo
        44
    yyysuo  
    OP
       7 小时 38 分钟前
    @wm5d8b 是必须运营商的 dns ,还是说只要国内主流 dns 就可以,有例子吗?
    Goooooos
        45
    Goooooos  
       6 小时 55 分钟前
    纯 IP 的例子很多
    1. telegram
    2. 软件内建的 httpdns
    yyysuo
        46
    yyysuo  
    OP
       6 小时 50 分钟前
    @Goooooos 我主帖说了纯 IP 特殊处理,目前已知的是国外 dns ip 、电报 ip 、奈飞安卓 tv 端 ip ,其它暂时没发现; httpdns 知道了也管不了,也不用管。
    lw4free
        47
    lw4free  
       5 小时 39 分钟前   ❤️ 1
    目前我的 dns 是这样实现的
    1:广告域名拦截
    2:国外黑名单走 fakeIP
    3:国内白名单走运营商 dns 查询
    4:其它域名先走运营商 dns 查询,结果如果不匹配国内 IP 再走 fakeIP
    设定 fakeIP 持久化 ttl 为 10 秒
    yyysuo
        48
    yyysuo  
    OP
       5 小时 34 分钟前
    @lw4free 棒,咱俩一样,说分流的事儿,我就没在主帖中提 fakeip ,我 fakeip ttl 是 1 秒,理论上不持久化也行,不过还是持久化的好,要不然安卓 tv 看奈飞会转圈。
    starrys
        49
    starrys  
       4 小时 20 分钟前
    @likai #37 你这种情况,应该是漏掉哪个域名加白名单了
    likai
        50
    likai  
       3 小时 1 分钟前 via Android
    @yyysuo nkvod com ,正常可访问,一上分流就打不开了
    sicifus
        51
    sicifus  
       2 小时 26 分钟前
    @lw4free #47 要自己配这一串任务流有什么教程可以下看吗?
    yyysuo
        52
    yyysuo  
    OP
       2 小时 5 分钟前
    @likai 加了白名单是可以的,确实屏蔽了代理访问。
    nkvod.com 2406:da18:2d6:bf00:6957:2a07:7286:c0ac
    hm.baidu.com 2408:871a:2100:10ea:0:ff:b011:69
    media-gslz-fy-home.gs7oss.ctyunxs.cn 240e:935:a04:1001::3
    pic.rmb.bdstatic.com 2408:8726:7000::3cdd:1223
    qb.xn--it-if7c19g5s4bps5c.com 121.62.31.111
    yyysuo
        53
    yyysuo  
    OP
       1 小时 50 分钟前
    @likai 可能某些撸了免费 cf 节点的机场也能看。
    lw4free
        54
    lw4free  
       28 分钟前
    @sicifus 我是使用 routedns 作为 dns 分流和改变 ttl sing-box 实现 tun 模式下的代理和 fakeIP 的持久化
    mosdns 可以实现 routedns 同样的功能
    sing-box 基于 TProxy 模式也能实现 但不能基于其他入站方式例如 socks 否则 dns 分流就不起效了
    sing-box 的内置 dns 功能不能实现功能 4dns 查询后再匹配 使用 xray 应该可以实现所有功能 不过好像不能 fakeIP 持久化和改变 ttl 不是那么理想
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5230 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 08:30 · PVG 16:30 · LAX 00:30 · JFK 03:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.