[Plugin] 插件
本节用于配置插件。插件内容采用标准 INI 格式,与主配置文件格式完全相同。系统支持通过插件拆分配置,并支持根据网络环境(如 Wi-Fi 或蜂窝网络)条件启用。
基本原理
text
┌────────────────────────────────────────────────────────┐
│ 插件 1 (高优先级,例如匹配特定 SSID 的办公网络配置) │
├────────────────────────────────────────────────────────┤
│ 插件 2 (低优先级,例如通用远程配置) │
├────────────────────────────────────────────────────────┤
│ 主配置文件 (基底配置,优先级最低) │
└────────────────────────────────────────────────────────┘
│
▼ 执行配置合并 (Merge)
┌────────────────────────────────────────────────────────┐
│ 运行时有效配置 │
└────────────────────────────────────────────────────────┘- 配置格式相同 插件内容格式与主配置文件完全相同(标准 INI 格式)。
- 多插件合并 主配置作为基底,启用的插件按照声明顺序生效,声明靠前优先级高于靠后;系统合并时以主配置为基底,由低优先级至高优先级依次应用。
- 网络条件激活 插件启用状态取决于全局开关与
subnet网络匹配条件。网络环境变动时,系统自动更新匹配状态并动态加载或卸载相应插件配置。
语法声明
[Plugin] 章节中每行定义一个独立的插件项:
ini
name = source, [options...]语法要素说明
name:插件的唯一标识名称。同一主配置文件内必须唯一。source:插件文件的来源。支持本地文件路径与远程网络地址:- 本地路径:支持绝对路径,或相对于当前主配置文件所在目录的相对路径(如
./plugins/office.conf)。 - 远程地址:以
http://或https://开头的 URL。包含英文逗号或等号时,需使用双引号整体包裹。
- 本地路径:支持绝对路径,或相对于当前主配置文件所在目录的相对路径(如
options:可选参数列表,多个参数以英文逗号分隔,采用键值对格式(key=value)。
参数详解
source(本地路径或 HTTP/HTTPS URL,必填) 插件配置文件的获取源。相对路径以主配置文件所在目录为基准。subnet(网络条件字符串,未设置) 激活该插件所需的网络环境匹配条件。未配置时在全局开关开启状态下始终处于激活状态。update-interval(整数,单位:秒,默认值86400,仅远程) 远程 HTTP/HTTPS 插件的后台自动更新周期;本地文件插件不生效。
网络环境匹配条件
通过 subnet 参数,可将插件的生效范围限定在特定网络环境下。语法格式为 前缀:匹配模式:
ssid:(文本字符串,支持通配符*与?) 匹配当前接入的 Wi-Fi 名称(SSID),例如ssid:Company-WiFi或ssid:Office-*。bssid:(MAC 地址格式,支持通配符*与?) 匹配当前连接的无线接入点硬件地址(BSSID)。type:(枚举值,大小写不敏感) 匹配主网络接口连接类型,可选CELLULAR、WIFI、WIRED、LOOPBACK、OTHER,例如type:CELLULAR匹配蜂窝数据。gateway:(IP 地址字符串) 匹配默认网关 IP(预留配置项,当前版本作为占位保留)。- (无前缀)(文本字符串,支持通配符) 缺少显式前缀时,系统默认按 Wi-Fi SSID 模式处理。
合并机制与覆盖行为
优先级
多个激活插件按声明顺序生效,声明靠前优先级高于靠后;主配置优先级最低(作为基底)。插件内不支持嵌套声明 [Plugin](忽略)。
章节与值类型合并行为
不同配置类型与章节在合并时遵循如下行为规则:
- 单值标量(如
[General]中的log-level等)- 默认直接覆盖底层对应配置。
- 多值/列表数组(如
skip-proxy、dns-server等列表型键值)- 默认行为:整体替换(Replace);
%APPEND% <值>:追加到现有列表末尾;%INSERT% <值>:插入到现有列表头部。
- 字典项章节(
[Proxy]、[Proxy Group]、[Host]、[Script]、[Proxy Resource])- 按项名称(键)匹配:同名项覆盖现有定义;新名称项追加到该章节;
- 支持在章节首行使用
%INSERT%或%APPEND%控制新项的插入或追加位置。
- 有序规则列表(
[Rule]、[Response]、[URL Rewrite]、[Header Rewrite])- 默认行为为插入(
%INSERT%),即插件规则默认优先插入到现有规则列表顶部; - 可在章节首行显式声明
%APPEND%将规则追加到现有规则末尾;对于[Rule]规则列表,声明%APPEND%时规则永远追加在FINAL规则之前,确保追加规则始终能够参与匹配,FINAL规则始终保持在规则列表末尾作为最终兜底; - 支持声明
%INSERT%显式标明头部插入。
- 默认行为为插入(
配置示例
基础配置
主配置文件 (main.conf):
ini
[General]
log-level = info
dns-server = system
[Plugin]
# 1. Wi-Fi 网络插件
Office = ./plugins/office.conf, subnet=ssid:Corp-Office-*
# 2. 蜂窝网络插件
Cellular = ./plugins/cellular.conf, subnet=type:CELLULAR
# 3. 远程配置插件
AdBlock = "https://rules.example.com/adblock.conf", update-interval=43200
[Proxy]
DefaultProxy = socks, 198.51.100.1, 1080
[Rule]
FINAL,DefaultProxy局部网络插件 (plugins/office.conf):
ini
[Proxy]
# 局域网代理服务器,同名覆盖主配置
CorpProxy = socks, 10.0.0.1, 1080
[Rule]
# 规则插入到主配置规则前方(默认前插)
DOMAIN-SUFFIX,corp.internal,DIRECT
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
DOMAIN-SUFFIX,oa.example.com,CorpProxy蜂窝网络插件 (plugins/cellular.conf):
ini
[General]
# 处于蜂窝移动网络时,将日志等级调整为 warn
log-level = warn