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

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

  •  
  •   flyingpigpig · 2023-08-28 16:25:05 +08:00 via iPhone · 4573 次点击
    这是一个创建于 457 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求目标:以机场提供的托管配置为主推,新建一个 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 配置最好
    zhaidoudou123
        2
    zhaidoudou123  
       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 这样一定可行,但是还能有机场代理服务器自动更新的效果吗?
    如果机场更新一次,就要手动更新下配置文件,好像太累了…
    zhaidoudou123
        4
    zhaidoudou123  
       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   ·   实用小工具   ·   4070 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:19 · PVG 18:19 · LAX 02:19 · JFK 05:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.