surge 如何合并自定义规则到托管配置? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
flyingpigpig
V2EX    宽带症候群

surge 如何合并自定义规则到托管配置?

  •  
  •   flyingpigpig 2023-08-28 16:25:05 +08:00 via iPhone 7748 次点击
    这是一个创建于 827 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求目标:以机场提供的托管配置为主推,新建一个 a.conf 文件,存储自定义规则,再新建一个 sum.conf ,合并两个配置文件。

    [问题 1 描述]
    1. airport.conf //机场提供的自托管配置文件,能自动更新,section 齐全,绝大部分情况满足需求。问题是部分目标站点不走代理;
    2. a.conf //自定义配置,仅有 Rule ] 字段,填写自定义规则,但是规则里面引用了 airport.conf 里面定义的策略组“Proxy”
    3. sum.conf //自定义配置,合并 airport.conf 和 a.conf 。 [ Rule ] 字段 include airport.conf 和 a.conf ,其他字段仅 include airport.conf

    [问题 1 故障现象]
    1. MAC surge 逐步 load conf 文件,load airport.cOnf==> 正常,load a.cOnf==> 失败,提示 Proxy 未定义
    2. iOS 版无此问题

    [问题 2 描述]
    1. airport.conf //机场提供的自托管配置文件,能自动更新,section 齐全;
    2. a.conf //自定义配置,内容为 snell 协议联通内网,单独使用正常。
    3. sum.conf //自定义配置,目的是实现直连,代理,联通内网自动化
    // [Proxy] ==>用 include 合并机场代理和 snell 服务器
    //[Proxy Group] ==>用 include 合并机场策略组和自定义 snell 策略
    //[Rule] ==>用 include 合并机场 rule 和自定义 rule

    [问题 2 故障现象]
    1. airport.conf 和 a.conf 都有 FINAL rule ,合并后其中一个 FINAL 会截断其他规则
    2. 尝试去掉 a.conf 里面的 FINAL ,MAC surge 在 load a.conf 时会提示无 FINAL load 失败( iOS 版无 FINAL 也可以 load 成功)
    40 条回复    2023-08-31 23:37:43 +08:00
    tediorelee
        1
    tediorelee  
       2023-08-28 16:34:52 +08:00
    感觉弄复杂了,surge 的那个关联配置感觉不太好用,还是用工具+自己维护的模板文件生成最终的 conf 配置最好
    unneeded
        2
    unneeded  
       2023-08-28 16:35:57 +08:00
    用 substore 把机场的 Proxy 列表弄出来用,规则手动复制到自己的规则里
    flyingpigpig
        3
    flyingpigpig  
    OP
       2023-08-28 16:37:57 +08:00 via iPhone
    @zhaidoudou123 这样一定可行,但是还能有机场代理服务器自动更新的效果吗?
    如果机场更新一次,就要手动更新下配置文件,好像太累了…
    unneeded
        4
    unneeded  
       2023-08-28 16:41:28 +08:00
    @flyingpigpig #3
    sub-store 会自动更新机场配置的
    SimonOne
        5
    SimonOne  
       2023-08-28 16:50:18 +08:00
    @flyingpigpig #3 节点是平级的,规则有优先级的,所以节点可以轻松转成外挂的塞进来,规则只能自己合并(或者订阅单类规则,自己排优先级,复合规则不可能多个来源自动合并的,哪条规则先哪条规则后呢?)。
    crysislinux
        6
    crysislinux  
       2023-08-28 16:53:46 +08:00
    自己 GitHub 搞个仓库用 GitHub actions 合并?
    flyingpigpig
        7
    flyingpigpig  
    OP
       2023-08-28 16:59:18 +08:00 via iPhone
    @SimonOne 所以回到原点了,就是利用 surge 的配置合并功能。倒霉的是我现在用起来有问题。

    很神奇的是,iOS 版和 Mac 版在这块的行为是不一致的
    flyingpigpig
        8
    flyingpigpig  
    OP
       2023-08-28 17:00:42 +08:00 via iPhone
    @crysislinux 你这是 workaround 的思路啊,我想找 root cause
    lightionight
        9
    lightionight  
       2023-08-28 17:24:55 +08:00
    @tediorelee 赞同, 写个 bash 处理一下应该就行, 定时获取最新服务器,合并自己的配置
    tediorelee
        10
    tediorelee  
       2023-08-28 17:35:14 +08:00
    windyskr
        11
    windyskr  
       2023-08-28 18:05:25 +08:00
    我一开始用的是 Surge ,遇到你同样的问题,手动处理了几次发现实在麻烦,然后想找个自动化处理的办法发现也并不简单,果断换 QuanX ,用了两三年一点问题没有。
    flyingpigpig
        12
    flyingpigpig  
    OP
       2023-08-28 18:21:44 +08:00 via iPhone
    @windyskr surge 的那个 snell ,还是有点意思的,部署简单好用
    exch4nge
        13
    exch4nge  
       2023-08-28 20:12:50 +08:00   1
    surge ios 有个叫 模块 的功能,新建一个本地模块就能覆盖订阅配置。
    flyingpigpig
        14
    flyingpigpig  
    OP
       2023-08-28 21:08:07 +08:00 via iPhone
    @exch4nge 谢谢提供线索,我看了文档,模块不具备修改/定义 rules 的功能
    minamike
        15
    minamike  
       2023-08-28 21:08:30 +08:00 via iPhone
    同意楼上 模块的优先级比默认配置高
    minamike
        16
    minamike  
       2023-08-28 21:10:52 +08:00 via iPhone
    @flyingpigpig #14 模块可以修改 rules 啊 不然那些订阅的去广告、破解订阅的模块是怎么来的
    flyingpigpig
        17
    flyingpigpig  
    OP
       2023-08-28 21:28:46 +08:00 via iPhone
    @minamike 准确滴说,模块功能只能使用内置策略,即 direct ,reject ,不能使用代理策略。来自官方手册。抱歉我还不会截图
    minamike
        18
    minamike  
       2023-08-28 21:30:25 +08:00 via iPhone   1
    @flyingpigpig #17 这个手册已经过时了 实测可以用各种代理策略
    flyingpigpig
        19
    flyingpigpig  
    OP
       2023-08-28 21:35:56 +08:00 via iPhone
    @minamike 没有文档,也不知道该如何写模块,能进一步提供一些资料和信息吗?谢谢
    minamike
        20
    minamike  
       2023-08-28 21:46:05 +08:00 via iPhone
    @flyingpigpig #19 和写配置文件的格式一样的 最上面多了文件名和介绍两行而已 新建模块的时候就会出现
    minamike
        21
    minamike  
       2023-08-28 21:51:18 +08:00 via iPhone
    @flyingpigpig #19 像 general mitm 之类的里面的项如果你不是想覆盖 而是想附加可以用%APPEND% 后面再添加域名
    flyingpigpig
        22
    flyingpigpig  
    OP
       2023-08-28 23:31:15 +08:00 via iPhone
    @minamike 测试了一下模块,可耻的失败了
    Nielsen
        23
    Nielsen  
       2023-08-28 23:39:34 +08:00
    直接把 airport.conf 复制一份自己维护算了……

    [Proxy]部分 include 原文件,反正机场更新也主要就是修改节点配置。

    [Proxy Group]部分如果是写死的节点名称,可以改用正则匹配,如果机场新增了节点也不至于漏掉。
    danshan
        24
    danshan  
       2023-08-29 00:10:56 +08:00 via iPhone
    用 surgio 自动从机场订阅地址获取节点节点信息,再合并自己的 rule ,生成新的配置,上传到阿里云 oss ,整个过程放到 github 里弄个 private 仓库,用 action 跑,跑挂了出发 telegram 消息或者邮件。我现在就是这么干的
    danshan
        25
    danshan  
       2023-08-29 00:11:57 +08:00 via iPhone
    @danshan 我现在是 surgio 订阅两家机场,合并到一起,节点按国家分组
    minamike
        26
    minamike  
       2023-08-29 00:29:13 +08:00 via iPhone
    @flyingpigpig #22 哪个部分失败了呢
    flyingpigpig
        27
    flyingpigpig  
    OP
       2023-08-29 09:12:36 +08:00
    @minamike
    模块测试,iOS 版,测试失败:

    模块目标:用 snell 连回家里内网。
    操作方法:
    1. 在 iOS 版主界面模块 panel ,新增本地模块:
    2. 模块内容:(该内容设为 config 格式,验证通过)
    #!name = test
    #!desc = test

    [Proxy]
    HomeProxy = snell, DDNS 域名, port, psk=random-PSK, obfs=tls

    [Proxy Group]
    linkhome = ssid, default = HomeProxy, "A-Ruckus" = DIRECT, "A-Ruckus-5G" = DIRECT

    [Rule]
    # Custom
    IP-CIDR,192.168.2.0/24,linkhome,no-resolve

    3. 选中模块让模块生效

    验证结果:
    1. 浏览器 key in:192.168.2.228:5000 (内网群辉地址) ==>打不开
    2. 在 surge 的“最近请求”观察,该请求匹配上 rule:IP-CIDR,192.168.2.0/24,linkhome,no-resolve ,但是无“ linkhone”策略组匹配;
    3. 在 surge 主界面查看“策略组” 和“rule”内容,没有找到本模块定义的策略组和 rule

    请指教,谢谢
    flyingpigpig
        28
    flyingpigpig  
    OP
       2023-08-29 09:31:22 +08:00
    继续测试模块:

    目标:已知机场提供的托管配置,在 access zlibrary 时走了直连,测试通过模块功能,是否能自定义规则,让 access zlibrary 时走代理
    结果:成功!用 surge “最近请求”功能确认在 access zlibrary 时命中了模块自定义的规则。
    模块内容:
    #!name = test
    #!desc = test

    [Rule]
    # Custom
    DOMAIN-KEYWORD,1lib,PROXY,force-remote-dns
    DOMAIN-KEYWORD,library,PROXY,force-remote-dns
    minamike
        29
    minamike  
       2023-08-29 11:14:54 +08:00 via iPhone
    @flyingpigpig #27 要不试试引用这个用法呢 https://community.nssurge.com/d/508-surge
    flyingpigpig
        30
    flyingpigpig  
    OP
       2023-08-29 11:48:03 +08:00
    @minamike
    1. 从 module 的实验来看,module 能够操控 rule ,但是不能操控 proxy 和 proxy group ;
    2. include 模式也是有问题,include 的问题我在主页里已经提过了。
    自定义 config 文件里面,rule 里面如果没有 FINAL ,MAC surge 认为不合法,加上 FINAL 倒是合法了,可是两个 config 里有两个 FINAL ,合并后,必然产生阶段。
    奇怪的是:iOS 版可以接受无 FINAL 规则的 config 文件

    无招了,快要放弃了
    minamike
        31
    minamike  
       2023-08-29 12:13:38 +08:00
    @flyingpigpig #30
    module 的 final 不能覆盖原始的 final 吗
    module 的 rule 可以匹配已经存在的 proxy 和 proxy group 吧
    可以配合 include 使用吧
    flyingpigpig
        32
    flyingpigpig  
    OP
       2023-08-29 13:30:12 +08:00
    @minamike

    谢谢提示,用 include + module ,组合两个功能,解决了我的问题!
    maemolee
        33
    maemolee  
       2023-08-29 16:56:32 +08:00
    @flyingpigpig #24 佬,解决了的话,麻烦分享一下具体的解决方案,万吨同求啊
    flyingpigpig
        34
    flyingpigpig  
    OP
       2023-08-29 17:38:56 +08:00 via iPhone
    @maemolee
    我是很想把来龙去脉,相关知识点讲清楚,可是论坛回帖的形式很难讲清楚
    maemolee
        35
    maemolee  
       2023-08-30 13:08:50 +08:00
    @flyingpigpig #26 您发篇博客也行的
    ketor
        36
    ketor  
       2023-08-31 20:02:21 +08:00
    OP 不考虑一下 subconverter 么,直接解决各种类型客户端的订阅问题了。
    我跟楼主一样有用 surge/clash 访问家里服务器的需求,后来直接配置 subconverter ,自己搞好模板之后,就一次性解决了。

    iOS 、Android 、Mac 、Windows 所有端都可以用了,而且无缝对接各种机场订阅,无视机场的规则,完全用自己的规则了。
    flyingpigpig
        37
    flyingpigpig  
    OP
       2023-08-31 22:51:22 +08:00 via iPhone
    @ketor 如果机场订阅更新,需要手动用 subconverter 再转换一次吗?
    flyingpigpig
        38
    flyingpigpig  
    OP
       2023-08-31 22:53:06 +08:00 via iPhone
    @ketor 如果 subconverter 是静态的,那跟我手动写 config 没有区别
    ketor
        39
    ketor  
       2023-08-31 23:33:41 +08:00
    @flyingpigpig 那必须得是能动态的,机场的订阅更新了,你从 subconverter 的订阅同步更新。当你同时有多个机场,还有自建的 ss/v2ray 的时候,当你需要自定义 surge/clash 规则的时候,用 subconverter 就体现出优势了。

    搭建好之后,是一个 web server ,生成好一个的 url 之后,就和使用机场订阅一样的。 其实很多机场的订阅看 url 风格就是用 subconverter 实现的。

    你需要修改的只是 subconverter 里的 config 模板,然后自建的 ss/v2ray 等 server (可以若干个)、机场的订阅(可以若干个)都在 url 中体现。

    Surge 、Clash 、V2Ray 等客户端软件只需订阅自建的 subconverter 就可以了。具体看 subconverter 项目的文档,有中文文档,初次上手略有门槛,但是一次投入,几乎终生受益,非常超值。
    ketor
        40
    ketor  
       2023-08-31 23:37:43 +08:00
    @flyingpigpig 我也是从手写 config 转到 subconverter 的,迭代 N 次之后实在觉得麻烦,而且我同时有 Surge 和 Clash 的需求,iOS 、Android 、Mac 、Windows 四种终端,还同时用了几个不同的机场。

    后来发现华硕路由器的插件 MerlinClash 里带了个 subconverter ,好奇是做什么用的,一研究发现果然早就有人遇到同样的问题了,这都有了成熟的解决方案了,立马学习一下切换过去。 然后清净了,最近一年就只增加了 ChatGPT 的规则,基本 0 成本了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2670 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 15:05 PVG 23:05 LAX 07:05 JFK 10:05
    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