配置参考
编写脚本请参阅 JavaScript API 指南,了解可导入示例、请求/响应字段、完成调用和运行限制。
适用于 MintFlow 2.0.0。配置文本是唯一事实来源:启动 VPN 时,应用将其编译为运行时数据库。保存修改、检查编译诊断,再重启 VPN 以应用新配置。语法/范围错误与权限限制是不同问题:语法正确的 Pro 配置在没有 Pro 权限时,仍可能被排除在编译结果之外。
新增区段包括 [simple-mode]、[flowlog]、[dns-hosts] 和 [http-body-rewrite]。Tailscale 是实验性 [l3vpns] 类型。HTTP 引擎扩展了捕获范围,并支持 jq/JavaScript 正文规则。本地脚本是独立资源,仅分享配置文本不会打包脚本。请用 MFHRB一起分享规则和源码。
为什么使用配置?
- 复杂设置:组合高级路由、分流 DNS、代理与 VPN。
- 管理多种环境:创建并切换工作、家庭等不同配置。
- 分享协作:纯文本可分享给其他 MintFlow 用户,也可用 Git 管理版本。
- 导入导出:从 URL 或文件导入,导出以备份或分享。
配置可控制 VPN 与代理行为。以下说明语法和可用选项;示例中的名称、密钥占位符与地址需按实际环境填写。
语法概览
采用 INI 风格,以 [] 包围区段名。注释以 # 或 // 开头;列表用逗号分隔,结构化值使用 子键:值 形式。语法键不能翻译。
# Comments start with # or //
[section-name]
key=value
# Lists are comma-separated
key=value1,value2,value3
# Structured values use subkey:subvalue pairs
key=subkey1:value1,subkey2:value2
区段
[misc]
系统级杂项设置。
| 键 | 类型 | 说明 | 默认值 |
|---|---|---|---|
tun-mtu | 整数 | TUN 接口的 MTU。 | |
exclude-lan-networks | 布尔值 | true 时将局域网排除在 VPN 之外。 | false |
log-level | 字符串 | 运行时日志等级;使用应用支持的选项。 |
[misc]
tun-mtu=1420
exclude-lan-networks=true
[dns]
| 键 | 类型 | 说明 |
|---|---|---|
system-dns | IP 列表 | 已弃用的旧覆盖设置,仅当自定义应用分流和简易模式都关闭时使用。新配置优先使用 direct-dns。 |
app-routing-enabled | 布尔值 | 启用域名分流与分流 DNS。新配置设为 true;旧 false 路径已弃用。 |
direct-dns | DNS 上游列表 | app-routing-enabled=true 时用于直连的 DNS,支持普通 IP DNS、DoT、DoH。 |
vpn-dns | DNS 上游列表 | app-routing-enabled=true 时用于 VPN/代理的 DNS,支持普通 IP DNS、DoT、DoH。 |
bootstrap-dns | IP 列表 | 1.9.0 新增,用于解析以域名配置的加密 VPN DNS 上游;应用提供默认值。 |
direct-dns-follow-vpn | 布尔值 | 1.8.0 新增,直连 DNS 服务器是否遵循分流规则。 |
optimistic-dns-caching | 布尔值 | 1.9.0 新增,启用乐观 DNS 缓存刷新,默认 true。 |
l4proxy-synthetic-ip | 布尔值 | 为 L4 代理域名分流启用合成 IP 处理,默认 false。 |
DNS 上游格式:
- 普通 IP DNS:
1.1.1.1、8.8.8.8 - DNS-over-TLS:
tls://cloudflare-dns.com或tls://1.1.1.1 - DNS-over-HTTPS:
https://dns.google/dns-query
当 vpn-dns 含带域名的加密 DNS 服务器(如 tls://p2.freedns.controld.com),添加 VPN-DNS-SERVER-DOMAINS 路由,使其域名解析经由所选 VPN/代理,避免引导查询走直连网络。
[dns]
app-routing-enabled=true
direct-dns=223.5.5.5,114.114.114.114
vpn-dns=tls://p2.freedns.controld.com,https://dns.google/dns-query
bootstrap-dns=1.1.1.1,8.8.8.8
optimistic-dns-caching=true
[l3vpns]
定义第三层 VPN 接口,每条记录的键是自定义接口名称。
通用字段
| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
type | 字符串 | 已实现 wireguard、amneziawg 与实验性 tailscale。schema 接受 openvpn,但不代表已实现 OpenVPN 客户端。 | 是 |
nickname | 字符串 | 易读的显示名称。 | 否 |
enabled | 布尔值 | 是否启用,默认 true。 | 否 |
WireGuard 字段(type=wireguard)
| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
private-key | 字符串 | 接口私钥。 | 是 |
address | CIDR | 接口内部 IP 地址与子网。 | 是 |
Tailscale 字段(type:tailscale,实验性,Pro)
| 键 | 说明 |
|---|---|
login-server | HTTPS 控制服务器 URL,通常为 https://controlplane.tailscale.com;不能包含内嵌凭据、查询或片段。 |
auth-key | 可选的初始登录密钥。优先使用浏览器登录或一次性提交认证KEY,避免在配置中保存秘密。 |
drive-dns | 默认 false。通过 MintFlow DNS 派生对等节点 IPv4 记录;不启用 Tailscale 操作系统级 MagicDNS 解析器。需要 Pro 和 MintFlow DNS 路径。 |
enabled | 默认 true。每份配置只允许一个活跃 Tailscale 接口。 |
[l3vpns]
tailnet=type:tailscale,login-server:https://controlplane.tailscale.com,enabled:true
[routing]
CIDR,100.64.0.0/10,L3VPN,tailnet
DEFAULT,DIRECT
DNS-FALLBACK,DIRECT
配合 [dns] 中的 app-routing-enabled=true 与合适的 direct-dns 上游使用。参阅完整登录与路由指南。设备身份、接受路由与出口节点选择属于设备本地状态,不是可移植配置设置。失去 Pro 权限时,编译会排除该接口,并将指向它的路由改为 REJECT。
AmneziaWG 字段(type=amneziawg)
从 1.9.0 起支持 AmneziaWG 1.5 和 2.0 参数。对等节点另在 [amneziawg-peers] 设置。
| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
private-key | 字符串 | 接口私钥。 | 是 |
address | CIDR | 接口内部 IP 地址与子网。 | 是 |
jc | 整数 | 垃圾数据包数量参数。 | 否 |
jmin | 整数 | 垃圾数据包最小大小。 | 否 |
jmax | 整数 | 垃圾数据包最大大小。 | 否 |
s1 | 整数 | AmneziaWG S1 参数。 | 否 |
s2 | 整数 | AmneziaWG S2 参数。 | 否 |
s3 | 整数 | AmneziaWG S3 参数。 | 否 |
s4 | 整数 | AmneziaWG S4 参数。 | 否 |
h1 | 整数或范围 | H1 数据包标头值,如 1 或 843739526-1233562642。 | 否 |
h2 | 整数或范围 | H2 数据包标头值,如 2 或 1383464517-1389039856。 | 否 |
h3 | 整数或范围 | H3 数据包标头值,如 3 或 1558777559-1611162592。 | 否 |
h4 | 整数或范围 | H4 数据包标头值,如 4 或 1797613837-1977519157。 | 否 |
i1 ... i5 | 字符串 | AmneziaWG 2.0 CPS 指令字符串,每字段最多 255 UTF-8 字节;支持 <b>、<r>、<rd>、<rc>、<t> 标签。 | 否 |
[l3vpns]
my-wireguard=type:wireguard,nickname:My WG,private-key:...,address:10.0.0.1/32
my-awg=type:amneziawg,nickname:My AWG,private-key:...,address:10.8.9.2/32,jc:4,jmin:40,jmax:70,s1:0,s2:0,s3:0,s4:0,h1:1,h2:2,h3:3,h4:4,i1:<r 33>
[wireguard-peers]
定义 WireGuard 对等节点,每条记录的键为自定义节点名。
| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
interface | 字符串 | 所属 l3vpns 接口名称。 | 是 |
public-key | 字符串 | 对等节点公钥。 | 是 |
preshared-key | 字符串 | 可选预共享密钥。 | 否 |
endpoint | 字符串 | 对等节点公网端点,如 1.2.3.4:51820。 | 是 |
allowed-ips | CIDR 列表 | 经由该节点的 IP 地址/范围。 | 是 |
[wireguard-peers]
my-peer=interface:my-wireguard,public-key:...,endpoint:1.2.3.4:51820,allowed-ips:0.0.0.0/0
[amneziawg-peers]
定义 AmneziaWG 对等节点,每条记录的键为自定义节点名。字段与 WireGuard 相同,但 interface 必须引用 [l3vpns] 中 type 为 amneziawg 的接口。
| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
interface | 字符串 | 所属 amneziawg 接口名称。 | 是 |
public-key | 字符串 | 对等节点公钥。 | 是 |
preshared-key | 字符串 | 可选预共享密钥。 | 否 |
endpoint | 字符串 | 对等节点公网端点,如 1.2.3.4:51820。 | 是 |
allowed-ips | CIDR 列表 | 经由该节点的 IP 地址/范围。 | 是 |
[amneziawg-peers]
my-awg-peer=interface:my-awg,public-key:...,endpoint:1.2.3.4:51820,allowed-ips:0.0.0.0/0,::/0
[l4proxies]
定义 Shadowsocks、VMess 等第四层代理,每条记录的键为自定义代理名。
通用字段
| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
type | 字符串 | shadowsocks、vmess、anytls、http 或 socks5。 | 是 |
nickname | 字符串 | 易读的显示名称。 | 否 |
server | 字符串 | 服务器地址。 | 是 |
port | 整数 | 服务器端口。 | 是 |
enabled | 布尔值 | 是否启用,默认 true。 | 否 |
route-via-vpn | 布尔值 | 1.8.0 新增,代理上游连接是否经 VPN 路由,以串联另一个 VPN/代理。默认 false;服务器 IP 必须为 IPv4 地址。 | 否 |
Shadowsocks 字段
| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
password | 字符串 | 密码。 | 是 |
method | 字符串 | AEAD:aes-128-gcm、aes-256-gcm、chacha20-ietf-poly1305;2022:2022-blake3-aes-128-gcm、2022-blake3-aes-256-gcm、2022-blake3-chacha20-poly1305。 | 是 |
obfs-type | 字符串 | 混淆类型 tls 或 http。 | 否 |
obfs-host | 字符串 | 混淆主机;使用 obfs-type 时需要。 | 否 |
obfs-path | 字符串 | 混淆路径;obfs-type=http 时需要。 | 否 |
udp-forward | 布尔值 | 是否转发 UDP,默认 false。 | 否 |
Shadowsocks 2022 的 password 必须为 base64 编码的预共享密钥。解码后,2022-blake3-aes-128-gcm 需要 16 字节,2022-blake3-aes-256-gcm 和 2022-blake3-chacha20-poly1305 需要 32 字节。
VMess 字段
| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
user-id | UUID | 用户 ID。 | 是 |
alter-id | 整数 | alter ID。 | 是 |
security | 字符串 | 安全类型,如 auto。 | 是 |
transport-type | 字符串 | tcp 或 ws。 | 是 |
ws-path | 字符串 | WebSocket 路径;transport-type=ws 时需要。 | 否 |
sni | 字符串 | TLS 服务器名称指示。 | 否 |
skip-cert-check | 布尔值 | true 时跳过证书验证,默认 false。 | 否 |
alpn | 字符串 | 应用层协议协商,默认 h2,http/1.1。 | 否 |
AnyTLS 字段
使用 type=anytls。以下字段来自共享配置 schema。
| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
password | 字符串 | AnyTLS 密码。 | 是 |
sni | 字符串 | TLS 服务器名称指示,省略时使用 server。 | 否 |
skip-cert-check | 布尔值 | true 时跳过上游证书验证,默认 false。 | 否 |
session-reuse | 布尔值 | 启用空闲会话复用,默认 true。 | 否 |
idle-session-check-interval | 整数 | 空闲会话检查间隔,1–3600 秒,默认 30。 | 否 |
idle-session-timeout | 整数 | 空闲会话超时,1–3600 秒,默认 60。 | 否 |
min-idle-sessions | 整数 | 最少保留空闲会话数,0–64,默认 1。 | 否 |
max-idle-sessions | 整数 | 最多保留空闲会话数,0–64,默认 4。 | 否 |
[l4proxies]
any=type:anytls,nickname:AnyTLS,server:any.example.com,port:443,password:secret,sni:cdn.example.com,skip-cert-check:false,session-reuse:true,idle-session-check-interval:30,idle-session-timeout:60,min-idle-sessions:1,max-idle-sessions:4,enabled:true
HTTP 与 SOCKS5 字段
| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
username | 字符串 | 上游认证的代理用户名。 | 否 |
password | 字符串 | 上游认证的代理密码。 | 否 |
udp-forward | 布尔值 | SOCKS5 UDP 转发标记;目前保留用于配置兼容,实际 UDP 转发取决于运行时支持。 | 否 |
[l4proxies]
tshttp=type:http,nickname:tshttp,server:3.3.3.3,port:1055,enabled:true
tssocks=type:socks5,nickname:tssocks,server:10.1.1.1,port:1055,username:user,password:pass,enabled:true,udp-forward:false,route-via-vpn:true
ss2022=type:shadowsocks,nickname:SS2022,server:ss.example.com,port:8388,password:base64-psk,method:2022-blake3-aes-256-gcm,udp-forward:true,enabled:true
any=type:anytls,nickname:AnyTLS,server:any.example.com,port:443,password:secret,sni:cdn.example.com,skip-cert-check:false,session-reuse:true
[domain-sets]
定义供路由使用的命名域名集合,键为集合名。通过 [routing] 选择出口,与 HTTP 捕获域名和精确 DNS 主机记录不同。
[domain-sets]
social-media=twitter.com,facebook.com,instagram.com
[cidr-sets]
定义供路由使用的命名 IP 范围(CIDR)集合,键为集合名。
[cidr-sets]
private-ips=10.0.0.0/8,192.168.0.0/16
[routing]
定义自上而下处理的路由规则,不使用键值对。
匹配规则格式:TYPE,VALUE,ACTION,TARGET。保留/默认规则(如 DNS-FALLBACK、VPN-DNS-SERVER-DOMAINS、DEFAULT)格式:TYPE,ACTION,TARGET。
| 类型 | 值 | 动作 | 目标 | 说明 |
|---|---|---|---|---|
DOMAIN-SET | 域名集合名 | L3VPN、L4PROXY、DIRECT、DROP、REJECT | l3vpn/l4proxy 名称 | 按域名集合分流。 |
CIDR-SET | CIDR 集合名 | L3VPN、L4PROXY、DIRECT、DROP、REJECT | l3vpn/l4proxy 名称 | 按 CIDR 集合分流。 |
CIDR | 单个 CIDR | L3VPN、L4PROXY、DIRECT、DROP、REJECT | l3vpn/l4proxy 名称 | 按单个 IP 范围分流。 |
DNS-FALLBACK | 不使用 | DIRECT、L3VPN、L4PROXY 等 | l3vpn/l4proxy 名称 | 未匹配集合的域名的默认 DNS 行为。 |
VPN-DNS-SERVER-DOMAINS | 不使用 | L3VPN、L4PROXY | l3vpn/l4proxy 名称 | 1.9.0 新增,经由所选 VPN/代理引导解析加密 VPN DNS 服务器域名。当 vpn-dns 使用带域名的 DoT/DoH 上游时必需。 |
DEFAULT | 不使用 | DIRECT、L3VPN、L4PROXY 等 | l3vpn/l4proxy 名称 | 最后的兜底路由。 |
[routing]
DOMAIN-SET,social-media,L4PROXY,my-shadowsocks
CIDR-SET,private-ips,DIRECT
VPN-DNS-SERVER-DOMAINS,L4PROXY,my-shadowsocks
DEFAULT,L3VPN,my-wireguard
[http-engine]
内部 HTTP 引擎设置。
| 键 | 类型 | 说明 |
|---|---|---|
enabled | 布尔值 | 启用引擎,默认 false。 |
capture-all | 布尔值 | 处理指定 TCP 端口上的所有 IPv4 目标,默认 false;保留已有域名/CIDR 列表。 |
cidr-list | IPv4 CIDR 列表 | 额外的目标 IP 捕获范围。 |
port-list | 整数列表 | TCP 端口 1–65535,默认 80,443。 |
http3-policy | allow 或 block | 默认 allow。阻止 HTTP/3 可能促使兼容客户端使用 TCP,不是 HTTP/3 解密。 |
mitm-bypass-apple-services | 布尔值 | 默认 true,避免解密已知 Apple 服务域名。 |
mitm-bypass-domain-list | 域名后缀列表 | 额外的不解密域名。 |
upstream-tcp-receive-window | 整数 | 高级上游接收窗口大小:4096–1048576 字节,默认 262144。 |
domain-list | 域名后缀列表 | 应用 HTTP 处理的域名;* 表示所有域名。 |
ca-p12 | 字符串 | base64 编码的 PKCS#12 CA,目前仅支持 RSA 密钥。 |
ca-passphrase | 字符串 | ca-p12 证书密码。 |
[http-engine]
enabled=true
domain-list=example.com
ca-p12=...
ca-passphrase=...
[http-url-rewrite]
定义 HTTP URL 重写规则,键为自定义规则名。
| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
match | 正则表达式 | 匹配 URL。 | 是 |
action | 字符串 | reject 或 redirect-302。 | 是 |
target | 字符串 | 重定向目标 URL。 | 否 |
enabled | 布尔值 | 默认 true。 | 否 |
[http-url-rewrite]
block-ads=match:^https?://ads\..*,action:reject
redirect-google=match:^https?://google\.com,action:redirect-302,target:https://duckduckgo.com
[simple-mode]
为普通客户端流量选择一个带类型的出口。返回规则模式后,已保存的高级路由仍可使用;简易模式不会删除它们。
[simple-mode]
enabled=true
output=type:DIRECT
已配置 VPN 使用 output=type:L3VPN,target:my-wireguard;代理使用 output=type:L4PROXY,target:my-proxy。目标必须存在,且当前权限允许使用。首次登录 Tailscale 时,不要将尚未认证的 Tailscale 出口作为浏览器的互联网路径。
[dns-hosts](Pro)
精确主机名到 IPv4 地址的映射,由 MintFlow DNS 提供。这些是 DNS 应答,不是路由规则,也不是通配域名后缀。另行配置路由,并在此示例中启用应用分流:
[dns]
app-routing-enabled=true
direct-dns=1.1.1.1,8.8.8.8
[dns-hosts]
nas.example.com=192.168.40.10
最多支持 256 个主机名,每个主机名 1–16 个 IPv4 地址。静态主机记录与派生 Tailscale 记录受权限及生效 DNS 配置检查约束,请查看编译报告。
[flowlog]
本地流量捕获免费可用,用于记录流量诊断;它不是 IPFIX 远程导出器,也不是 HTTP 正文录制。
| 键 | 默认值 | 范围 |
|---|---|---|
enabled | false | 布尔值 |
sampling-interval | 1 | 1–1000000 |
active-timeout-seconds | 5 | 1–3600 |
tcp-idle-timeout-seconds | 120 | 2–86400 |
udp-idle-timeout-seconds | 30 | 2–3600 |
fin-grace-seconds | 5 | 1–300 |
max-flows-per-worker | 4096 | 1–16384 |
capture-duration-seconds | 0 | 0–86400;0 表示不限时长 |
retention-hours | 24 | 1–720 |
max-database-rows | 100000 | 1000–1000000 |
[flowlog]
enabled=true
sampling-interval=1
retention-hours=24
[http-body-rewrite]
命名的请求或响应正文规则引用受管理的本地脚本。应用编辑器和 MFHRB 导入器共同管理脚本资源及其配置引用。不要在此粘贴远程脚本 URL 并期待自动下载或更新。
| 字段 | 说明 |
|---|---|
match | 必填,匹配规范化完整 URL 的正则表达式,最多 4096 UTF-8 字节。 |
direction | request 或 response,默认 response。 |
type | 必填,jq 或 javascript。 |
body-mode | json 或 text;jq 必须使用 JSON。jq 默认 json,JavaScript 默认 text。 |
script | 必填,由编辑器/导入器生成的受管理本地资源引用。 |
priority | 0–1000000,默认 100。较小值先执行;相同值按规则名排序。 |
enabled | 配置语法默认 true;MFHRB 导入始终保存为禁用。 |
api-version | 1。 |
timeout-ms | 仅 JavaScript:50–2000 ms,默认 500。 |
可移植 JSON 包使用 bodyMode、timeoutMS 等驼峰键,配置文本使用 body-mode、timeout-ms,两者是不同格式。MFHRB 指南提供完整可分享示例、API 契约与审查流程。
例如,当前配置的脚本存储中已经存在受管理资源 ./feed-cleanup/remove-banner.jq:
[http-body-rewrite]
remove-banner=match:^https://api\.example\.com/feed$,direction:response,type:jq,body-mode:json,priority:100,enabled:false,api-version:1,script:./feed-cleanup/remove-banner.jq
对应 jq 源码可以是 .items |= map(select(.kind != "banner")),用于含 items 数组的 JSON 对象。该配置行不会创建文件;请导入 MFHRB 或使用应用脚本编辑器管理资源,审查后再启用。