快速开始
本页分五步写出一份配置。每一步都是完整文件:复制下来,把示例服务器信息换成你自己的, 校验通过后再进入下一步。
| 步骤 | 得到什么 |
|---|---|
| 1 | 一个本地 HTTP/SOCKS5 端口,所有流量直连 |
| 2 | 一个上游代理,所有流量都走它 |
| 3 | 一个代理组,代理不可用时自动回退 |
| 4 | 规则:部分流量走代理,其余直连 |
| 5 | 仅 Linux:按进程分流那些不认代理设置的工具 |
也可以直接下载每一步的完整文件:01-direct.toml、 02-proxy.toml、03-group.toml、 04-rules.toml、05-linux-ebpf.toml。
配置文件放在哪里
把配置保存在 Specola 的配置目录中,之后就可以只用文件名引用它:
| 系统 | 配置目录 |
|---|---|
| Linux | ~/.config/specola/profiles/ |
| macOS | ~/Library/Application Support/com.specola.Specola/profiles/ |
| Windows | %LOCALAPPDATA%\Specola\profiles\ |
--config 也可以直接写任意位置的绝对路径。
第 1 步:只做直连
[general]
route-mode = "direct"
log-level = "info"
port = 7890
protocols = "mixed"这就是一份完整配置。protocols = "mixed" 表示同一个端口同时接受 HTTP 和 SOCKS5。
先校验,再启动 Core:
specola-core -t --config my.toml
specola-core --config my.toml第一条命令会输出 Config validation passed: <路径>,或者指出具体哪个字段有问题。然后让一个工具 使用本地端口,确认它仍能正常联网:
curl -x http://127.0.0.1:7890 https://example.com -I
curl -x socks5h://127.0.0.1:7890 https://example.com -I如果这里失败,问题出在本地(端口被占用、防火墙、客户端端口写错)。先解决它,再添加代理。
第 2 步:添加代理
为你自己运营或有权使用的服务器添加一个 [[proxy]],并切换到 Global 模式,让所有流量都走它:
[general]
route-mode = "global"
global-proxy = "office"
log-level = "info"
port = 7890
protocols = "mixed"
[[proxy]]
name = "office"
type = "http"
server = "proxy.example.com"
port = 8080
username = "me"
password = "change-me"再执行一遍同样的 curl。如果第 1 步正常而这里失败,问题出在代理本身:地址、端口、账号或 TLS。 所有支持的代理类型见代理。
第 3 步:添加代理组
代理组从成员中选出一个。fallback 使用第一个通过健康检查的成员,代理挂掉时流量不会中断:
[general]
route-mode = "global"
global-proxy = "work"
log-level = "info"
port = 7890
protocols = "mixed"
[[proxy]]
name = "office"
type = "http"
server = "proxy.example.com"
port = 8080
username = "me"
password = "change-me"
[[proxy-group]]
name = "work"
type = "fallback"
proxies = ["office", "DIRECT"]
url = "https://www.gstatic.com/generate_204"
interval = 300global-proxy 可以写代理名,也可以写代理组名。详见代理组。
第 4 步:添加规则
切换到 Rule 模式。规则自上而下匹配,首条命中生效,列表必须以 FINAL 结尾:
[general]
route-mode = "rule"
log-level = "info"
port = 7890
protocols = "mixed"
[[proxy]]
name = "office"
type = "http"
server = "proxy.example.com"
port = 8080
username = "me"
password = "change-me"
[[proxy-group]]
name = "work"
type = "fallback"
proxies = ["office", "DIRECT"]
url = "https://www.gstatic.com/generate_204"
interval = 300
[rule]
list = [
"DOMAIN-SUFFIX,corp.example.com,office",
"DOMAIN-SUFFIX,github.com,work",
"DOMAIN,registry.npmjs.org,work",
"IP-CIDR,10.0.0.0/8,DIRECT,no-resolve",
"IP-CIDR,192.168.0.0/16,DIRECT,no-resolve",
"FINAL,DIRECT",
]分别测试一个应该走代理的域名和一个不该走代理的域名,对比连接日志中显示的路由。所有规则类型 见分流规则。
到这一步,所有设置了 127.0.0.1:7890 代理的应用都会遵循你的规则。不认代理设置的工具需要第 5 步。
第 5 步:在 Linux 上按进程分流
在 Linux 上,使用 ebpf 后端的增强模式会接管所有进程的连接,包括无视 HTTP_PROXY 的程序, 并且规则可以匹配进程名:
[general]
route-mode = "rule"
log-level = "info"
port = 7890
protocols = "mixed"
[[proxy]]
name = "office"
type = "http"
server = "proxy.example.com"
port = 8080
username = "me"
password = "change-me"
[[proxy-group]]
name = "work"
type = "fallback"
proxies = ["office", "DIRECT"]
url = "https://www.gstatic.com/generate_204"
interval = 300
[rule]
list = [
"PROCESS-NAME,git-remote-http,work",
"PROCESS-NAME,cargo,work",
"PROCESS-NAME,dockerd,work",
"DOMAIN-SUFFIX,corp.example.com,office",
"DOMAIN-SUFFIX,github.com,work",
"IP-CIDR,10.0.0.0/8,DIRECT,no-resolve",
"IP-CIDR,192.168.0.0/16,DIRECT,no-resolve",
"FINAL,DIRECT",
]
[dns.tun]
mode = "fake-ip"
[enhanced-mode]
enable = true
type = "ebpf"
ip-version = "ipv4"
[enhanced-mode.ebpf]
process-routing = true增强模式会改变系统的流量路径,因此需要 root:
specola-core -t --config my.toml
sudo specola-core --config my.toml使用 sudo 时,--config my.toml 仍然在你自己的 ~/.config/specola/profiles/ 中查找。用 Ctrl+C 停止 Core,它会卸载自己挂载的所有内容。系统要求和排错见 Linux eBPF, [dns.tun] 的作用见 DNS。
校验失败时
错误信息会指出具体字段。最常见的几种:
| 报错 | 解决办法 |
|---|---|
inbound.type contains unsupported value 'https' | protocols 只接受 mixed、http、socks5、none |
Unsupported top-level field 'inbound' | 把 port 和 protocols 写在 [general] 下 |
Rule list requires an explicit FINAL target | 在 [rule].list 末尾加上 "FINAL,<出口>" |
Rule references unknown outbound: X | X 必须是 DIRECT、REJECT、代理名或代理组名,大小写一致 |
Global mode requires an existing proxy target | global-proxy 要写已存在的代理或代理组 |
GEOIP rule requires a geoip resource | 设置 [rule.cache].geoip,见分流规则 |
enhanced-mode.type=tun is not supported on Linux | Linux 上使用 type = "ebpf" |
完整字段列表见完整配置。