完整配置
Specola 配置就是一个 TOML 文件。只有 [general] 是必需的,其余部分都可选。本页先给出一份包含所有 部分的完整配置,再列出全部受支持的字段。
刚开始使用时,请先按快速开始操作,把本页当作参考手册。
带注释的完整配置
toml
# ── 基础 ────────────────────────────────────────────────────────────────
[general]
route-mode = "rule" # direct | global | rule
global-proxy = "work" # route-mode = "global" 时使用
log-level = "info" # trace | debug | info | warn | error | critical | off
port = 7890 # 本地 HTTP/SOCKS5 端口;0 表示不开
protocols = "mixed" # mixed | http | socks5 | none,或列表
allow-lan = false # true 时监听 0.0.0.0
api-listen = "" # 可选的 TCP 控制接口,例如 "127.0.0.1:9090"
api-secret = ""
# ── 代理:你自己运营或有权使用的服务器 ──────────────────────────────────
[[proxy]]
name = "office"
type = "http"
server = "proxy.example.com"
port = 8443
username = "me"
password = "change-me"
[proxy.tls]
server-name = "proxy.example.com"
[[proxy]]
name = "home"
type = "ss"
server = "home.example.com"
port = 8388
cipher = "2022-blake3-aes-128-gcm"
password = "base64-key-from-your-server"
# ── 代理组:成员是代理、DIRECT 或 REJECT(不能嵌套)─────────────────────
[[proxy-group]]
name = "work"
type = "fallback" # select | url-test | fallback | load-balance
proxies = ["office", "home", "DIRECT"]
url = "https://www.gstatic.com/generate_204"
interval = 300 # 秒;不写就不做健康检查
# ── 规则:首条命中生效,FINAL 在最后 ────────────────────────────────────
[rule]
list = [
"PROCESS-NAME,git-remote-http,work",
"PROCESS-NAME,cargo,work",
"DOMAIN-SUFFIX,corp.example.com,office",
"DOMAIN,registry.npmjs.org,work",
"RULE-SET,blocked,REJECT",
"IP-CIDR,10.0.0.0/8,DIRECT,no-resolve",
"IP-CIDR,192.168.0.0/16,DIRECT,no-resolve",
"FINAL,DIRECT",
]
# GEOIP / GEOSITE / IP-ASN 规则使用的数据文件(绝对路径)。
# [rule.cache]
# geoip = "/home/me/.local/share/specola/geoip.dat"
# geosite = "/home/me/.local/share/specola/geosite.dat"
# 上面 RULE-SET,blocked,... 使用的规则集。
[[rule.cache.rule-set]]
name = "blocked"
behavior = "domain" # classical | domain | ipcidr
path = "/home/me/.config/specola/blocked-domains.txt"
# ── DNS:全部可选 ───────────────────────────────────────────────────────
[dns]
ipv6 = false
[dns.upstream]
default = ["https://1.1.1.1/dns-query"]
# direct = [] # 为空时使用系统解析器
[dns.nameserver-policy]
"+.corp.example.com" = "udp://10.0.0.53"
[dns.tun]
mode = "fake-ip"
fake-ip-filter = ["+.lan", "+.local"]
# ── Sniffer:默认开启 ───────────────────────────────────────────────────
[sniffer]
enable = true
# ── 增强模式:Linux 用 ebpf,macOS 和 Windows 用 tun ────────────────────
[enhanced-mode]
enable = false
type = "ebpf"
ip-version = "ipv4"
[enhanced-mode.ebpf]
process-routing = true规则集文件 blocked-domains.txt 在 Core 启动时必须存在;specola-core -t 只检查是否设置了路径。
字段索引
| 部分 | 字段 | 页面 |
|---|---|---|
[general] | route-mode、global-proxy、log-level、port、protocols、allow-lan、ipv6、api-listen、api-secret | 基础配置 |
[[proxy]] | name、type、server、port、dialer-proxy、各类型专属字段、[proxy.tls]、[proxy.transport] | 代理 |
[[proxy-provider]] | name、url、path、proxy | Provider |
[[proxy-group]] | name、type、proxies、url、interval、tolerance、strategy、dialer-proxy、icon | 代理组 |
[rule] | list、resolve-unknown-domains | 分流规则 |
[rule.cache] | geoip、geosite、asn、[[rule.cache.rule-set]] | 分流规则 |
[dns] | ipv6、respect-rules、缓存字段、use-hosts、use-system-hosts | DNS |
[dns.upstream] | default、direct、bootstrap、proxy-server、fallback、direct-follow-policy | DNS |
[dns.tun] | mode、Fake-IP 字段、route-resolution、probe-resolver、probe-timeout-ms | DNS |
[dns.system-proxy] | route-resolution、probe-resolver、probe-timeout-ms | DNS |
[dns.listener] | enable、address | DNS |
[dns.nameserver-policy]、[dns.fallback-filter] | DNS | |
[sniffer] | enable、protocols、http-ports、tls-ports、override-destination、timeout-ms、max-bytes | Sniffer |
[enhanced-mode] | enable、type、ip-version | 增强模式 |
[enhanced-mode.ebpf] | process-routing | Linux eBPF |
[enhanced-mode.tun] | stack、auto-route、auto-detect-interface、routes、extra-routes、dns-hijack | TUN |
当前版本不可用
以下旧配置中的部分会被忽略并给出警告,旧文件仍能加载,但设置不会生效:[metadata]、[[rule-set]] (请改用 [[rule.cache.rule-set]])、[[module]]、[[subscription]]、[hosts]、[gateway]、 [tunnel]、[ntp]。
以下写法会被拒绝:顶层 [inbound]、mixed-port、external-controller、tun-rules、protocols 的 https 取值、代理类型 ssh、mieru、sudoku、[dns.hosts] enable = true、代理组字段 use,以及 Linux 上的 enhanced-mode.type = "tun"。