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

2023-08-28 16:25:05 +08:00
 flyingpigpig
需求目标:以机场提供的托管配置为主推,新建一个 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 成功)
6417 次点击
所在节点    宽带症候群
40 条回复
minamike
2023-08-28 21:51:18 +08:00
@flyingpigpig #19 像 general mitm 之类的里面的项如果你不是想覆盖 而是想附加可以用%APPEND% 后面再添加域名
flyingpigpig
2023-08-28 23:31:15 +08:00
@minamike 测试了一下模块,可耻的失败了
Nielsen
2023-08-28 23:39:34 +08:00
直接把 airport.conf 复制一份自己维护算了……

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

[Proxy Group]部分如果是写死的节点名称,可以改用正则匹配,如果机场新增了节点也不至于漏掉。
danshan
2023-08-29 00:10:56 +08:00
用 surgio 自动从机场订阅地址获取节点节点信息,再合并自己的 rule ,生成新的配置,上传到阿里云 oss ,整个过程放到 github 里弄个 private 仓库,用 action 跑,跑挂了出发 telegram 消息或者邮件。我现在就是这么干的
danshan
2023-08-29 00:11:57 +08:00
@danshan 我现在是 surgio 订阅两家机场,合并到一起,节点按国家分组
minamike
2023-08-29 00:29:13 +08:00
@flyingpigpig #22 哪个部分失败了呢
flyingpigpig
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
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
2023-08-29 11:14:54 +08:00
@flyingpigpig #27 要不试试引用这个用法呢 https://community.nssurge.com/d/508-surge
flyingpigpig
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
2023-08-29 12:13:38 +08:00
@flyingpigpig #30
module 的 final 不能覆盖原始的 final 吗
module 的 rule 可以匹配已经存在的 proxy 和 proxy group 吧
可以配合 include 使用吧
flyingpigpig
2023-08-29 13:30:12 +08:00
@minamike

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

iOS 、Android 、Mac 、Windows 所有端都可以用了,而且无缝对接各种机场订阅,无视机场的规则,完全用自己的规则了。
flyingpigpig
2023-08-31 22:51:22 +08:00
@ketor 如果机场订阅更新,需要手动用 subconverter 再转换一次吗?
flyingpigpig
2023-08-31 22:53:06 +08:00
@ketor 如果 subconverter 是静态的,那跟我手动写 config 没有区别
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
2023-08-31 23:37:43 +08:00
@flyingpigpig 我也是从手写 config 转到 subconverter 的,迭代 N 次之后实在觉得麻烦,而且我同时有 Surge 和 Clash 的需求,iOS 、Android 、Mac 、Windows 四种终端,还同时用了几个不同的机场。

后来发现华硕路由器的插件 MerlinClash 里带了个 subconverter ,好奇是做什么用的,一研究发现果然早就有人遇到同样的问题了,这都有了成熟的解决方案了,立马学习一下切换过去。 然后清净了,最近一年就只增加了 ChatGPT 的规则,基本 0 成本了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/968925

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX