写了个 clash.META 插件使用 HTTP2 ping frame 进行最快(min rtt)线路选择 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zckevin
V2EX    分享创造

写了个 clash.META 插件使用 HTTP2 ping frame 进行最快(min rtt)线路选择

  •  2
     
  •   zckevin 2024-01-09 16:44:50 +08:00 3221 次点击
    这是一个创建于 707 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/zckevin/Clash.Meta/tree/http2ping_new/adapter/outboundgroup/http2ping

    http2ping for Clash.META

    使用 HTTP2 Ping Frame 监测链路 rtt, 并从中选择 rtt 最优的链路

    为什么

    相比于url-test, http2ping 针对每个 endpoint 建立一条 HTTP2 长连接, 避免了频繁建立/断开连接, 因此我们可以使用更低的 interval(1s) 进行接近实时的 rtt 监测.

    相比于使用ICMP ping进行延迟检测, 对于某些使用中转服务的网络接入供应商, ICMP packets 只能检测用户->中转->落地这条链路的第一部分而非整条链路的完整 RTT.

    相比于使用http://www.gstatic.com/generate_204这类常见的基于 HTTP 的 health check, 如果使用 HTTP 协议, 部分鸡贼的网络接入供应商会在中转服务器进行 MITM 直接返回 HTTP 204 response, 以试图欺骗客户.

    配置

    # enable verbose logging for more infomation log-level: debug proxy-groups: - name: min-rtt-group type: http2-ping filter: "hk" use: - airport_1 # interval milliseconds for sending Ping frame, default value: 1000ms interval: 1000 # tolerance for changing current best route, default value: 0ms tolerance: 0 # target server, default server: https://cloudflare.com server: https://cloudflare.com 

    开发/测试

    for debugging:

    #!/bin/bash interface=enp1s0 ip=1.1.1.1 delay=100ms # add latency to ip address tc qdisc add dev $interface root handle 1: prio tc filter add dev $interface parent 1:0 protocol ip prio 1 u32 match ip dst $ip flowid 2:1 tc qdisc add dev $interface parent 1:1 handle 2: netem delay $delay # remove tc rules tc qdisc del dev $interface root 
    13 条回复    2024-01-10 14:19:39 +08:00
    yyysuo
        1
    yyysuo  
       2024-01-09 17:16:01 +08:00
    这么好的东西,能给 mihomo 提 pr 么,大佬们正对 healthy check 不满意呢。
    NouveauNom
        2
    NouveauNom  
       2024-01-09 18:26:52 +08:00
    cfw mac 能用吗
    issakchill
        3
    issakchill  
       2024-01-09 20:55:10 +08:00
    支持提 pr
    zckevin
        4
    zckevin  
    OP
       2024-01-09 21:08:50 +08:00
    @yyysuo
    @issakchill

    感谢支持, 准备试试

    @NouveauNom
    暂时没在 cfw 测试过
    zckevin
        5
    zckevin  
    OP
       2024-01-09 21:38:58 +08:00
    shunia
        6
    shunia  
       2024-01-10 10:35:53 +08:00
    惊了,我以为这个 mihomo 还真是个星铁的工具呢。心说给游戏工具提这种 PR 干啥哈哈哈哈哈。
    mapperv
        7
    mapperv  
       2024-01-10 10:46:19 +08:00
    airport_1 未定义是啥原因?
    mapperv
        8
    mapperv  
       2024-01-10 10:47:18 +08:00
    zckevin
        9
    zckevin  
    OP
       2024-01-10 10:52:16 +08:00
    @mapperv

    很明显你不太会写 clash 配置, 这个 `airport_1` 只是个示意, 需要改成你用的 proxy provider
    mapperv
        10
    mapperv  
       2024-01-10 11:26:21 +08:00
    确实不太会。现在改过之后没有这个 type
    mapperv
        11
    mapperv  
       2024-01-10 11:31:42 +08:00
    - {name: 自动选择, <<: *use, tolerance: 2, type: url-test}
    自带的 url-test 是这么配置的,是不是更改实际上是不是更改 type 然后加上 server 配置应该就可以了,但是好像没有这个 type
    zckevin
        12
    zckevin  
    OP
       2024-01-10 12:15:49 +08:00
    @mapperv

    因为没有被上游 merge, 你需要自己 clone 代码编译
    mapperv
        13
    mapperv  
       2024-01-10 14:19:39 +08:00
    @zckevin 好的 谢谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     879 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 21:20 PVG 05:20 LAX 13:20 JFK 16:20
    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