配置
Chute 的大部分功能由配置文件控制。你可以用自己的文本编辑器编辑它,也可以用 Chute iOS、Chute tvOS、Chute Mac(主窗口的配置标签页,旧界面下是偏好设置...)或 Chute Android 的内置编辑器。Chute Dashboard 没有配置编辑器——它改的是运行中引擎里的规则,永远不是文件。
Chute iOS 可以通过 iCloud Drive 同步配置文件,这是一项需要许可证的功能。Chute Mac 自身没有 iCloud 同步:在那里所谓共享文件,只是从导入面板里选中一个恰好放在 iCloud Drive 里的文件,此后就地引用它所在的位置。
配置段
配置文件按命名段进行组织:
| 段名 | 用途 |
|---|---|
[General] |
全局设置(日志、IPv6、DNS、代理端口等) |
[Proxy] |
出站代理服务器定义 |
[Proxy Group] |
策略组定义(select、url-test、fallback、load-balance、ssid、subnet) |
[Rule] |
流量匹配和路由规则 |
[Host] |
本地 DNS 主机名到 IP 的映射 |
[DNS] |
DNS 设置,同时接受 [General] 中的 DNS 键和 [Host] 风格的按域名覆盖 |
[URL Rewrite] |
URL 重写规则 |
[Header Rewrite] |
HTTP Header 重写规则 |
[Body Rewrite] |
HTTP 正文搜索替换规则 |
[Map Local] |
模拟响应规则 |
[MITM] |
HTTPS 解密设置 |
[Script] |
JavaScript 脚本定义 |
[SSID Setting] |
按网络的设置:暂停,以及针对某个 Wi-Fi 网络或网络类型的 DNS 覆盖 |
[Replica] |
流量录制过滤器 |
[Module] |
外部模块文件 |
[WireGuard <name>] |
WireGuard 隧道配置(必须指定实例名称,例如 [WireGuard HomeServer]) |
[AmneziaWG <name>] |
AmneziaWG 隧道配置,兼容 WireGuard 并带有混淆参数(必须指定实例名称,例如 [AmneziaWG HomeServer]) |
[Tailscale] |
全局 Tailscale 配置(全局唯一;[Tailscale <name>] 段头也按此段读取) |
[Proxy Provider] |
外部代理列表源 |
[Rule Provider] |
外部规则集源 |
[Ruleset <name>] |
内联规则集,通过 RULE-SET,<name> 引用——见规则集 |
注意:
[Panel]、[Ponte]、[MTProto]、[Keystore]、[Port Forwarding]、[Testing]、[DHCP]和[Snell Server]这几个段会被识别,以免 Surge 配置报错(每个段记录一条提示),保存配置时它们的内容也会被原样保留,但在 Chute 中不产生任何效果。
DNS 段
与 DNS 相关的 [General] 键也可以等效地写在顶层的 [DNS] 段中。该段中的行按键名分别处理:
| 行 | 处理方式 |
|---|---|
dns-server、direct-dns-server、proxy-dns-server、doh(别名 doh-server、doh-service)、dot、doq、doh3、encrypted-dns-server、allow-dns-svcb、encrypted-dns-follow-outbound-mode、hijack-dns、always-real-ip |
与写在 [General] 中完全相同;该键会被当作写在 [General] 中一样存储 |
| 其他任何行 | 按 [Host] 的按域名语法解析,例如 *.example.com = server:1.1.1.1 |
| 两者都不是的键 | 被忽略,并在日志中给出提示;该行本身会被保留 |
[DNS]
doh = https://dns.google/dns-query
hijack-dns = 8.8.8.8:53
*.example.com = server:1.1.1.1
注意:由于此处两种行形式都可接受,一个
[DNS]段中可以混合 DNS 服务器设置与按域名覆盖。请不要在[General]和[DNS]中重复同一项设置:例如出现第二条doh行时,会被报告为重复的 DoH 配置。注意:
fallback-dns-server与encrypted-dns-skip-cert-verification虽然没有列在上表第一行,但在[DNS]下同样会被读取。不是 DNS 设置的键并不会在这里被忽略——它会被当作按域名覆盖来读,因此像optimistic-dns = false这样放错位置的[General]键,会悄悄变成optimistic-dns→false这条映射。只有按域名覆盖的解析器也拒绝的行才会给出提示。见 DNS。
引入其他文件
配置可以引入另一个文件。Surge 写作 #!include <路径>;Shadowrocket 在第一个段之前写作 include = <other.conf>。两种写法都会被读取,被引入文件的内容会在指令所在的位置就地展开,因此 [Rule] 片段会落在引用它的那个段里。
#!include Rulesets/company.list
- 路径相对于书写该指令的文件所在目录解析,并且可以包含
*——#!include Rulesets/*.list会按文件名顺序引入一整个目录的规则片段。 - 引入最多嵌套 8 层,且已经引入过的文件(包括配置本身)不会被引入两次,因此不会因为循环而失控;配置引入自身会被直接忽略。
- 只有当配置是从文件加载时才会展开引入。若是以文本形式交给引擎(配置进入隧道时通常就是这样),没有可用于解析的目录,此时配置会被报告为不完整,而不是被当作完整配置处理。保存配置时该指令本身会被保留:它按读入时的原样写回,被引入文件的内容绝不会写进配置。
注释
以 #、; 或 // 开头的行是注释。这三个标记也能开启行内注释,但只在紧跟空格或制表符之后才算,而且在引号("…" 或 '…',其中 \ 转义下一个字符)内从不算。因此 URL 里的 ://、a//b 这样的路径,以及恰好含有 // 或 # 的未加引号的 base64 值都会完整保留。保存配置时,注释和空行都会被保留。
在各重写段以及 [Proxy Group] 的 ssid / subnet 行上,行内注释另有规则:
| 位置 | # |
; |
// |
引号 |
|---|---|---|---|---|
[URL Rewrite] |
同上 | 同上 | 同上 | 无:整行按空白分词,第一个以标记开头的词结束该行 |
[Header Rewrite] |
从不算注释,所以 header-add X-Color #ff0000 保留其值 |
从不算注释 | 同上 | "…" |
[Body Rewrite]、[Map Local] |
同上 | 从不算注释 | 同上 | "…";jq 行还包括 '…' |
[Proxy Group] 的 ssid / subnet 行 |
同上 | 同上 | 同上 | 只认 "…":撇号是 Bob's iPhone 这类网络名的一部分 |
指令行——#!include、#!MANAGED-CONFIG、#!IOS-ONLY 等——在这些规则生效之前就作为指令读取。规则集、域名集或代理提供者下载的文件不是配置段:在那里只有整行才能是注释。
本页为英文版的翻译。如内容有出入,以英文版为准。