Surge 模块

内容纲要

查看【Surge】专题可浏览更多内容

模块是对配置文件的补丁,每个模块文件用于对配置文件的各个部分进行微调,可用于覆盖当前配置的部分设定,模块可以:

  • 灵活的开启与关闭。
  • 在同一个文件内对多个段进行调整。
  • 可通过 URL 进行安装并保持更新。

但是:

  • 模块不可以调整 [Proxy]、[Proxy Group]、[Rule] 段内容。
  • 模块不可以调整 MITM 的 CA 证书。
  • 模块的设置覆盖于主配置之上,因此不可以通过 UI 进行调整。

模块有非常多的使用场景以实现某个特定的任务:

  • 调整不可编辑的配置文件中的设置,如托管配置和企业配置;
  • 快捷的在不同工作环境中切换。例如临时开启对所有域名的 MitM 并调整过滤器;
  • 使用他人编写的模块以完成某些特定的任务。例如,您的同事可以编写一个模块将应用的 API 请求重定向至测试服务器;
  • 在多个设备之间共同使用一个配置文件时,可能需要针对不同场景修改某些设置。模块的开启状态是保存于当前设备的,可以用在不同设备间的差异性修改;

基本概念

模块类似于当前配置文件的补丁。模块的设置优先级高于配置文件的设置。

有三种类型的模块:

  • 内部模块:由 Surge 本身提供;
  • 本地模块:配置文件目录中的 .sgmodule 文件;
  • 已安装模块:使用 URL 安装的模块;

编写模块

模块的语法与配置文件相同。您可以覆盖以下部分:

General、Replica、MITM

  • 覆盖原始值:key = value
  • 追加在原始值的后面:key = %APPEND% value
  • 插入在原始值的前面:key = %INSERT% value

Rule、Script、URL Rewrite、Header Rewrite、Host
新行将插入到原始内容的顶部。
模块中的规则只能使用内部策略:DIRECT、REJECT 和 REJECT-TINYGIF。

您可以在模块文件中添加 Metadata:

#!name=模块名称
#!desc=模块描述

您可以将模块限制为指定的平台:(可选)

#!system=mac

可选 macios,如果你并不想限制在某一个平台可省略该行字段

例子

#!name=DNSPod Public DNS+
#!desc=使用 DNSPod Public DNS+
[General]
dns-server = %INSERT% 119.29.29.29

如上例子,Metadata 描写了模块的名称和描述,实际功能是在保留配置中现有的 DNS 服务器的相关情况下,在现有值之前加上了 119.29.29.29

#!name=Block OTA update for iOS and iPadOS
#!desc=屏蔽 iOS/iPadOS 系统更新,无 iPad 设备可在「主机名」添加「-mesu.apple.com」
#!system=ios

[Rule]
DOMAIN,gdmf.apple.com,REJECT

[URL Rewrite]
# iPadOS
^https:\/\/mesu\.apple\.com\/assets\/com_apple_MobileAsset_SoftwareUpdate\/com_apple_MobileAsset_SoftwareUpdate\.xml - reject

[MITM]
hostname = %APPEND% mesu.apple.com

如上例子,Metadata 描写了模块的名称和描述,实际功能是屏蔽了 iOS 的 OTA,因为是针对 iOS 的所以使用 #!system=ios 限制了使用平台。