配置参考

编写脚本请参阅 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-dnsIP 列表已弃用的旧覆盖设置,仅当自定义应用分流和简易模式都关闭时使用。新配置优先使用 direct-dns。
app-routing-enabled布尔值启用域名分流与分流 DNS。新配置设为 true;旧 false 路径已弃用。
direct-dnsDNS 上游列表app-routing-enabled=true 时用于直连的 DNS,支持普通 IP DNS、DoT、DoH。
vpn-dnsDNS 上游列表app-routing-enabled=true 时用于 VPN/代理的 DNS,支持普通 IP DNS、DoT、DoH。
bootstrap-dnsIP 列表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字符串接口私钥。是
addressCIDR接口内部 IP 地址与子网。是

Tailscale 字段(type:tailscale,实验性,Pro)

键说明
login-serverHTTPS 控制服务器 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字符串接口私钥。是
addressCIDR接口内部 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-ipsCIDR 列表经由该节点的 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-ipsCIDR 列表经由该节点的 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-idUUID用户 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、REJECTl3vpn/l4proxy 名称按域名集合分流。
CIDR-SETCIDR 集合名L3VPN、L4PROXY、DIRECT、DROP、REJECTl3vpn/l4proxy 名称按 CIDR 集合分流。
CIDR单个 CIDRL3VPN、L4PROXY、DIRECT、DROP、REJECTl3vpn/l4proxy 名称按单个 IP 范围分流。
DNS-FALLBACK不使用DIRECT、L3VPN、L4PROXY 等l3vpn/l4proxy 名称未匹配集合的域名的默认 DNS 行为。
VPN-DNS-SERVER-DOMAINS不使用L3VPN、L4PROXYl3vpn/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-listIPv4 CIDR 列表额外的目标 IP 捕获范围。
port-list整数列表TCP 端口 1–65535,默认 80,443。
http3-policyallow 或 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 正文录制。

键默认值范围
enabledfalse布尔值
sampling-interval11–1000000
active-timeout-seconds51–3600
tcp-idle-timeout-seconds1202–86400
udp-idle-timeout-seconds302–3600
fin-grace-seconds51–300
max-flows-per-worker40961–16384
capture-duration-seconds00–86400;0 表示不限时长
retention-hours241–720
max-database-rows1000001000–1000000
[flowlog]
enabled=true
sampling-interval=1
retention-hours=24

[http-body-rewrite]

命名的请求或响应正文规则引用受管理的本地脚本。应用编辑器和 MFHRB 导入器共同管理脚本资源及其配置引用。不要在此粘贴远程脚本 URL 并期待自动下载或更新。

字段说明
match必填,匹配规范化完整 URL 的正则表达式,最多 4096 UTF-8 字节。
directionrequest 或 response,默认 response。
type必填,jq 或 javascript。
body-modejson 或 text;jq 必须使用 JSON。jq 默认 json,JavaScript 默认 text。
script必填,由编辑器/导入器生成的受管理本地资源引用。
priority0–1000000,默认 100。较小值先执行;相同值按规则名排序。
enabled配置语法默认 true;MFHRB 导入始终保存为禁用。
api-version1。
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 或使用应用脚本编辑器管理资源,审查后再启用。

阅读本页 Markdown