Module(模块)是一系列设置的集合,可用于覆盖当前配置的部分设定,有非常多的使用场景:
- 微调不可编辑的配置的设定,如托管配置和企业配置。
- 快捷的在不同工作环境中切换,比如临时开启对所有域名的 MitM 并调整过滤器。
- 使用他人编写的模块以完成某些特定任务,比如,你的同事可以编写一个模块将应用的 API 请求重定向至测试服务器。
- 如果你在多个设备间使用了同一份配置,有可能需要根据设备的使用场景进行微调。模块的开启状态是保存于当前设备的,可以用于在不同设备间的差异性修改。
基本概念
模块相当于给当前配置进行 Patch,其优先级高于配置本身的设置。有三种模块:
- 内置模块:Surge 会预置一些模块,随着 Surge 自身更新。
- 本地模块:放置配置文件根目录的 .sgmodule 文件
- 安装的模块:从某个 URL 安装的模块
你可以同时开启多个模块,模块的开启状态保存于当前设备,不会进行同步。切换配置也不影响模块的开启状态。
编写模块
模块的内容和标准配置基本一致,目前支持调整以下段:
- General,Replica
有三种写法
- key = value:直接覆盖原始值
- key = %APPEND% value:在原始值的末尾进行追加(仅适用于适用逗号分隔的字段)
- key = %INSERT% value:在原始值的开始进行插入(仅适用于适用逗号分隔的字段)
- MITM
仅支持操作 hostname 字段,同样支持上述三种写法。
- Script,URL Rewrite,Header Rewrite,Host
新加入的定义将会追加在原始内容的顶部。
- Rule
- 新配置的规则将被插入在最顶部
- 规则只可以使用 DIRECT、REJECT、REJECT-TINYGIF 三个策略
同时,模块支持配置 name,desc 和 system 描述,请参照最后的样例。
(system 描述的可取值为 ios 和 mac,用于限制模块的使用范围)
模块样例
#!name=MitM All Hostnames
#!desc=Perform MitM on all hostnames with port 443, except those to Apple and other common sites which can't be inspected. You still need configure CA certificate and enable the main switch of MitM.
[MITM]
hostname = -*.apple.com, -*.icloud.com, -*.mzstatic.com, -*.crashlytics.com, -*.facebook.com, -*.instagram.com, *
#!name=Game Console SNAT
#!desc=Let Surge handle SNAT conversation properly for PlayStation, Xbox, and Nintendo Switch. Only useful if Surge Mac acts the router for these devices.
#!system=mac
[General]
always-real-ip = %APPEND% *.srv.nintendo.net, *.stun.playstation.net, xbox.*.microsoft.com, *.xboxlive.com