代理
每个 [[proxy]] 是一台你自己运营或有权使用的上游服务器。规则、代理组和 global-proxy 通过 name 引用它。Specola 不附带任何服务器;内置出口 DIRECT 和 REJECT 始终存在。
[[proxy]]
name = "office"
type = "http"
server = "proxy.example.com"
port = 8080通用字段
| 字段 | 必填 | 说明 |
|---|---|---|
name | 是 | 唯一;不能含逗号和 ::;不能叫 DIRECT 或 REJECT |
type | 是 | 下表中的类型之一 |
server | 是 | 域名或 IP 地址 |
port | 是 | 1–65535 |
dialer-proxy | 否 | 经由另一个代理连接,见代理链 |
[proxy.tls] | 否 | TLS 设置,见 TLS |
[proxy.transport] | 否 | WebSocket、gRPC 或 HTTP 传输,见传输层 |
名称在所有引用处都区分大小写。
类型
type | 协议 | 必填字段 |
|---|---|---|
http | HTTP 代理(CONNECT),可选 TLS | — |
socks5 | SOCKS5,可选 TLS | — |
ss 或 shadowsocks | Shadowsocks | cipher、password |
trojan | Trojan(总是 TLS) | password |
vmess | VMess | uuid |
vless | VLESS | uuid |
hysteria2 | Hysteria 2(总是 TLS,QUIC) | password |
tuic | TUIC v5(总是 TLS,QUIC) | uuid、password |
anytls | AnyTLS(总是 TLS) | password |
ssh、mieru、sudoku 能被识别,但不在当前版本中,使用它们的配置会被拒绝。
HTTP
[[proxy]]
name = "office"
type = "http"
server = "proxy.example.com"
port = 8080
username = "me" # 可选
password = "change-me" # 可选HTTPS 代理加上 TLS 块:
[[proxy]]
name = "office-tls"
type = "http"
server = "proxy.example.com"
port = 8443
username = "me"
password = "change-me"
[proxy.tls]
server-name = "proxy.example.com"可选:path、headers(额外请求头组成的表)和 early-data(布尔)。
SOCKS5
[[proxy]]
name = "lab"
type = "socks5"
server = "10.0.0.5"
port = 1080
username = "me" # 可选
password = "change-me" # 可选
udp = true # 允许 UDP ASSOCIATE也可以加 TLS 块,即 SOCKS5 over TLS。
Shadowsocks
[[proxy]]
name = "ss-home"
type = "ss"
server = "home.example.com"
port = 8388
cipher = "2022-blake3-aes-128-gcm"
password = "base64-key-from-your-server"支持的加密方式:aes-128-gcm、aes-256-gcm、chacha20-ietf-poly1305、 2022-blake3-aes-128-gcm、2022-blake3-aes-256-gcm。2022-* 系列的密码是服务端配置中的 base64 密钥。Shadowsocks 不允许配置 TLS 块。
Trojan
[[proxy]]
name = "trojan-home"
type = "trojan"
server = "home.example.com"
port = 443
password = "change-me"
udp = true
[proxy.tls]
server-name = "home.example.com"TLS 始终开启。未设置 alpn 时,Trojan 使用 h2 和 http/1.1。
VMess
[[proxy]]
name = "vmess-home"
type = "vmess"
server = "home.example.com"
port = 443
uuid = "00000000-0000-0000-0000-000000000000"
alterId = 0
cipher = "auto"
[proxy.tls]
server-name = "home.example.com"
[proxy.transport]
type = "ws"
path = "/ws"可选:global-padding、authenticated-length、packet-encoding(packetaddr 或 xudp)、udp。
VLESS
[[proxy]]
name = "vless-home"
type = "vless"
server = "home.example.com"
port = 443
uuid = "00000000-0000-0000-0000-000000000000"
flow = "xtls-rprx-vision"
[proxy.tls]
server-name = "www.example.com"
[proxy.tls.reality]
enabled = true
public-key = "public-key-from-your-server"
short-id = "0123abcd"flow 和 encryption 可选。Reality 支持 VLESS(以及 HTTP、SOCKS5)。
Hysteria2
[[proxy]]
name = "hy2-home"
type = "hysteria2"
server = "home.example.com"
port = 443
password = "change-me"
down = "100 mbps"
[proxy.tls]
server-name = "home.example.com"可选:obfs 与 obfs-password,用于 Salamander 混淆。
TUIC
[[proxy]]
name = "tuic-home"
type = "tuic"
server = "home.example.com"
port = 443
uuid = "00000000-0000-0000-0000-000000000000"
password = "change-me"
congestion-control = "bbr"
udp-relay-mode = "native"
[proxy.tls]
server-name = "home.example.com"
alpn = ["h3"]可选:heartbeat-interval、request-timeout、reduce-rtt、fast-open、disable-sni、 max-open-streams、max-udp-relay-packet-size、ip。
AnyTLS
[[proxy]]
name = "anytls-home"
type = "anytls"
server = "home.example.com"
port = 443
password = "change-me"
[proxy.tls]
server-name = "home.example.com"可选:idle_session_check_interval、idle_session_timeout(时长字符串)和 min_idle_session(整数)。
TLS
[proxy.tls] 紧跟在它所属的 [[proxy]] 之后。只要写了这个块,TLS 就会开启。
| 字段 | 说明 |
|---|---|
enabled | 写了块时默认为 true;对 http、socks5、vmess、vless 可设为 false 关闭 TLS |
server-name(别名 sni) | SNI 中发送、并用于校验证书的名称 |
alpn | 协议列表;仅 vmess、vless、trojan、tuic 支持 |
certificate | 额外信任的 PEM 字符串列表 |
certificate-path | 额外信任的 PEM 文件路径 |
skip-cert-verify(别名 insecure) | 关闭证书校验,仅用于测试 |
Reality(VLESS、HTTP、SOCKS5):
| 字段 | 说明 |
|---|---|
[proxy.tls.reality] enabled | true 启用 Reality |
public-key | 必填 |
short-id | 最多一个 |
以下 TLS 字段能被识别,但当前版本会拒绝:min-version、max-version、cipher-suites、 curve-preferences、fingerprint、客户端证书与私钥、ech、acme。
传输层
[proxy.transport] 在连接外再套一层传输。设置 type 及对应字段:
type | 字段 |
|---|---|
ws | path、host、headers、max-early-data、early-data-header-name |
httpupgrade | path、host、headers |
grpc | service-name、authority、multi-mode、user-agent |
http | path、host、method、headers |
[proxy.transport]
type = "grpc"
service-name = "tunnel"继续之前
- 新代理先用
route-mode = "global"、global-proxy = "<名称>"测试,再为它写规则。Global 下都 不通,说明问题在代理本身,而不是规则。 - 不要把账号密码放进公开仓库、日志或截图。如果配置放在 dotfiles 里,请保持仓库私有。