Skip to content

快速开始

本页分五步写出一份配置。每一步都是完整文件:复制下来,把示例服务器信息换成你自己的, 校验通过后再进入下一步。

步骤得到什么
1一个本地 HTTP/SOCKS5 端口,所有流量直连
2一个上游代理,所有流量都走它
3一个代理组,代理不可用时自动回退
4规则:部分流量走代理,其余直连
5仅 Linux:按进程分流那些不认代理设置的工具

也可以直接下载每一步的完整文件:01-direct.toml02-proxy.toml03-group.toml04-rules.toml05-linux-ebpf.toml

配置文件放在哪里

把配置保存在 Specola 的配置目录中,之后就可以只用文件名引用它:

系统配置目录
Linux~/.config/specola/profiles/
macOS~/Library/Application Support/com.specola.Specola/profiles/
Windows%LOCALAPPDATA%\Specola\profiles\

--config 也可以直接写任意位置的绝对路径。

第 1 步:只做直连

toml
[general]
route-mode = "direct"
log-level = "info"
port = 7890
protocols = "mixed"

这就是一份完整配置。protocols = "mixed" 表示同一个端口同时接受 HTTP 和 SOCKS5。

先校验,再启动 Core:

bash
specola-core -t --config my.toml
specola-core --config my.toml

第一条命令会输出 Config validation passed: <路径>,或者指出具体哪个字段有问题。然后让一个工具 使用本地端口,确认它仍能正常联网:

bash
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 模式,让所有流量都走它:

toml
[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 使用第一个通过健康检查的成员,代理挂掉时流量不会中断:

toml
[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 = 300

global-proxy 可以写代理名,也可以写代理组名。详见代理组

第 4 步:添加规则

切换到 Rule 模式。规则自上而下匹配,首条命中生效,列表必须以 FINAL 结尾:

toml
[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 的程序, 并且规则可以匹配进程名:

toml
[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:

bash
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 只接受 mixedhttpsocks5none
Unsupported top-level field 'inbound'portprotocols 写在 [general]
Rule list requires an explicit FINAL target[rule].list 末尾加上 "FINAL,<出口>"
Rule references unknown outbound: XX 必须是 DIRECTREJECT、代理名或代理组名,大小写一致
Global mode requires an existing proxy targetglobal-proxy 要写已存在的代理或代理组
GEOIP rule requires a geoip resource设置 [rule.cache].geoip,见分流规则
enhanced-mode.type=tun is not supported on LinuxLinux 上使用 type = "ebpf"

完整字段列表见完整配置