[Proxy] 出站节点
本节定义命名出站、协议参数和传输选项。字段名由模型的 StructSchema 元数据提供;兼容字段由独立 schema 提供。
语法
[Proxy]
名称 = 协议, 主机, 端口, 位置参数, 选项=值位置参数必须先于键值参数。WireGuard、Tailscale 和无服务器的出站不使用主机、端口位置参数。协议名按小写解析。
通用字段
| 字段 | 取值 | 默认值 | 行为与约束 |
|---|---|---|---|
override-test-url | HTTP/HTTPS URL | 未设置,使用全局测试 URL | 节点延迟测试;兼容 test-url |
ip-version | dual、ipv4-only、ipv6-only、prefer-ipv4、prefer-ipv6 | 运行时 dual | 地址族选择;不接受 ipv4、ipv6 |
interface | 接口名称 | 未设置 | 绑定出站接口;模型字段 interface_name 的配置名为 interface |
underlying-proxy | 出站名称 | 未设置 | 底层出站链 |
dns-resolver-type | normal/default/0、ip4p/1 | 运行时 normal | 节点地址解析方式 |
ip4p-prefix | IPv6 地址,末三个 16 位段必须为零 | 运行时 2001:: | ip4p 解析器前缀,仅 ip4p 模式使用 |
TLS 与 WebSocket 字段
TLS 参数由 HTTP、VMess、Trojan、Hysteria、AnyTLS 解析。WebSocket 参数由 VMess、Trojan 解析。
| 字段 | 取值 | 默认值 | 行为与约束 |
|---|---|---|---|
tls | 布尔值 | false | TLS 开关;AnyTLS 强制开启;Hysteria 的 QUIC 使用 TLS 设置 |
sni | 主机名字符串 | 未设置 | 运行时 TLS 名称缺省取服务器主机 |
alpns | 字符串逗号列表 | 空列表 | ALPN 列表,多个值整体引用 |
server-cert-fingerprint-sha256 | 64 位十六进制,可含冒号 | 未设置 | 解码后必须为 32 字节 |
skip-cert-verify | 布尔值 | false | 跳过证书验证 |
enable-early-data | 布尔值 | false | TLS early data |
ws | 布尔值 | false | WebSocket 开关 |
ws-path | 字符串 | 空字符串;运行时空值使用 / | WebSocket 路径;兼容 path |
headers | 头字段:值 的 | 分隔映射 | 空映射 | HTTP 或 WebSocket 附加头;格式由映射解析器读取 |
布尔值接受 true、yes、1 与 false、no、0,不区分大小写。所有布尔字段均使用这一规则。
Sing Mux 字段
解析器对所有出站读取这些字段,运行时是否使用取决于协议支持。
| 字段 | 取值与单位 | 默认值 | 行为与约束 |
|---|---|---|---|
sing-mux | 布尔值 | false | 复用开关 |
sing-mux-stream-num-per-conn | 正整数 | 运行时 8 | 每连接流数量 |
sing-mux-max-connections | 正整数 | 未设置 | 设置时使用连接数量上限策略 |
sing-mux-padding | 布尔值 | 运行时 true | 填充开关 |
sing-mux-idle-timeout | 无符号整数,秒 | 未设置,运行时无空闲超时 | 复用连接空闲超时;Profile 解析缺省不同于直接构造 SingMuxModel::default() |
兼容字段依次为 smux-enabled、smux-max-streams、smux-max-connections、smux-padding、smux-idle-timeout。规范字段优先;序列化只输出规范字段名。
SOCKS 与 HTTP
协议为 socks 或 http,主机和端口使用位置参数。
| 字段 | 取值 | 默认值 | 行为与约束 |
|---|---|---|---|
username | 字符串 | 空字符串 | 认证用户名 |
password | 字符串 | 空字符串 | 认证密码 |
headers | 头字段映射 | 空映射 | 仅 HTTP 解析;HTTP 也读取 TLS 字段 |
[Proxy]
Socks = socks, proxy.example.com, 1080
Http = http, proxy.example.com, 443, tls=true, username=user, password=<SECRET>Shadowsocks
协议为 shadowsocks,也接受 ss。
| 字段 | 取值 | 默认值 | 行为与约束 |
|---|---|---|---|
encrypt-method | aes-128-gcm、aes-192-gcm、aes-256-gcm、chacha20-ietf-poly1305 | 无,必填 | 不区分大小写;也可作为端口后的第一个位置参数 |
password | 字符串 | 空字符串 | 也可作为加密方法后的第二个位置参数 |
obfs | http、tls | 未设置 | 混淆类型,不区分大小写 |
obfs-host | 字符串 | 未设置 | 混淆主机 |
obfs-path | 字符串 | 未设置 | HTTP 混淆路径 |
[Proxy]
SS = shadowsocks, proxy.example.com, 8388, encrypt-method=aes-256-gcm, password=<SECRET>VMess
协议为 vmess,读取 TLS 和 WebSocket 字段。
| 字段 | 取值 | 默认值 | 行为与约束 |
|---|---|---|---|
uuid | UUID 字符串 | 无,必填 | 兼容 username;也接受端口后的第一个位置参数;优先级为 uuid、username、位置参数 |
cipher | Shadowsocks 表中列出的加密方法 | 未设置 | 模型字段为 security;不接受 auto、none 或 encrypt-method 作为此字段 |
aead | 布尔值 | false | VMess AEAD 开关 |
[Proxy]
VMess = vmess, proxy.example.com, 443, uuid=00000000-0000-0000-0000-000000000001, tls=trueTrojan
协议为 trojan,读取 TLS 和 WebSocket 字段。密码使用端口后的第一个位置参数,缺省为空字符串;当前解析器不从 password=... 读取密码。
[Proxy]
Trojan = trojan, proxy.example.com, 443, <SECRET>, tls=true, sni=proxy.example.comHysteria
协议为 hysteria,使用 QUIC 与 Hysteria 认证消息。当前解析字段如下,不接受旧文档中的 protocol、up-mbps、down-mbps 配置语义。
| 字段 | 取值与单位 | 默认值 | 行为与约束 |
|---|---|---|---|
auth | 字符串 | 空字符串 | Hysteria 认证值 |
down | u32,接收速率协议值 | 0 | 映射到 cc_rx,作为 Hysteria-CC-RX 发送;不在解析层进行 Mbps 换算 |
obfs | 字符串 | 未设置 | Salamander 混淆密码,转换为字节 |
realm | realm://<SECRET>@主机/名称 或 realm+http://<SECRET>@主机/名称 | 未设置 | 启用 Realm 控制面与 UDP 打洞 |
realm-underlying-proxy | 出站名称 | 未设置 | 仅控制面的底层代理,缺省复用 Hysteria connector |
realm-stun | STUN 主机:端口列表 | stun.cloudflare.com:3478,stun.nextcloud.com:3478,stun.l.google.com:19302 | 多个值整体引用;空列表也使用默认值 |
realm-stun-timeout | 正整数,秒 | 运行时 5 | STUN 超时 |
realm-http-timeout | 正整数,秒 | 运行时 10 | HTTP 请求总超时,上限 10 |
realm-punch-timeout | 正整数,秒 | 运行时 5 | 打洞超时 |
realm-insecure | 布尔值 | false | 跳过控制面 TLS 证书验证 |
realm-sni | 字符串 | 未设置 | 控制面 TLS SNI |
realm-server-cert-fingerprint-sha256 | 64 位十六进制,可含冒号 | 未设置 | 控制面证书 SHA-256 指纹,解码后 32 字节 |
主机与端口必填,即使配置 Realm 也保留这两个位置参数。Realm 模式每次建连重新获取监听地址并打洞,不使用该主机、端口作为数据目标,也不配置本地监听端口。Realm URI 中 token 不能为空;名称为 6–64 个 ASCII 字符,首字符为字母或数字,其余仅允许字母、数字、-、_。不接受密码、fragment 或 lport 查询参数;仅支持 stun 查询参数,可覆盖 realm-stun。TLS 默认端口 443,明文默认 80;端口与超时在构建 Realm 设置时检查为非零,HTTP 超时被限制在 10 秒以内。
[Proxy]
Hysteria = hysteria, proxy.example.com, 443, auth=<SECRET>, sni=proxy.example.comWireGuard
协议为 wireguard,只使用命名字段,不使用主机和端口位置参数。
| 字段 | 取值与单位 | 默认值 | 行为与约束 |
|---|---|---|---|
addresses | 字面 IP 逗号列表,不接受 CIDR | 无,必填 | 至少一个,IPv4 与 IPv6 各最多一个;兼容 interface-ip、interface-ip-v6,不能与 addresses 同时使用 |
private-key | Base64 编码的 32 字节密钥 | 无,必填 | 接口私钥 |
mtu | 576–1420,字节 | 1280 | 有 IPv6 地址时至少 1280 |
dns | 字面 IP 逗号列表 | 空列表 | WireGuard DNS 地址 |
peers | [{字段=值,...}] | 无,必填 | 当前恰好一个 peer |
Peer 字段:
| 字段 | 取值与单位 | 默认值 | 行为与约束 |
|---|---|---|---|
public-key | Base64 编码的 32 字节密钥 | 无,必填 | Peer 公钥 |
preshared-key | Base64 编码的 32 字节密钥 | 未设置 | 预共享密钥 |
allowed-ips | CIDR 逗号列表 | 无,必填且非空 | Peer 路由范围 |
endpoint | 主机:端口 | 无,必填 | Peer 服务器 |
keepalive | u16,秒 | 未设置 | 保活间隔 |
reserved | 三个字节的数组 | 未设置 | 当前仅接受 [0,0,0] |
[Proxy]
WG = wireguard, addresses=10.0.0.2, private-key=<SECRET>, peers=[{public-key=<SECRET>,allowed-ips=0.0.0.0/0,endpoint=wg.example.com:51820}]Tailscale
协议为 tailscale,不使用主机、端口位置参数。字段、默认值和约束见 Tailscale。
[Proxy]
TS = tailscale, auth-key=<SECRET>AnyTLS
协议为 anytls,强制使用 TLS。
| 字段 | 取值与单位 | 默认值 | 行为与约束 |
|---|---|---|---|
password | 非空字符串 | 无,必填 | 也接受端口后的第一个位置参数,命名字段优先 |
idle-session-check-interval | 正整数,秒 | 30 | 空闲会话检查间隔 |
idle-session-timeout | 正整数,秒 | 30 | 空闲会话超时 |
min-idle-session | 无符号整数 | 5 | 最少空闲会话数量 |
max-streams-per-session | 正整数 | 5 | 每会话流数量上限 |
[Proxy]
AnyTLS = anytls, proxy.example.com, 443, password=<SECRET>SSH
协议为 ssh,仅支持 TCP direct-tcpip 和密码认证,不支持 UDP 或 private-key 认证。
| 字段 | 取值与单位 | 默认值 | 行为与约束 |
|---|---|---|---|
username | 字符串 | 无,必填且非空 | 登录用户名 |
password | 字符串 | 无,必填且非空 | 登录密码 |
idle-timeout | 无符号整数,秒 | 180 | 空闲会话保留时间 |
server-fingerprint | OpenSSH 公钥逗号列表 | 未设置,接受任意服务端密钥 | 完整格式 算法 Base64公钥;列表整体引用 |
[Proxy]
SSH = ssh, proxy.example.com, 22, username=user, password=<SECRET>, idle-timeout=180无服务器出站
direct、compatible 和拒绝策略可用于命名出站,不需要服务器地址。shadowsocksv2 枚举虽存在,当前 Profile 解析明确拒绝该协议。
| 内置策略 | 命名出站类型 | HTTP 行为 | TCP 行为 | 行为说明 |
|---|---|---|---|---|
REJECT | reject | 返回 503 | 立即释放入站连接 | 同 hostname 最近 30 秒内第 50 次起按 REJECT-DROP 处理 |
REJECT-TINYGIF | reject-tinygif | 返回 200 和 1×1 透明 GIF,类型为 image/gif | 立即释放入站连接 | 与 REJECT 共用计数,达到相同阈值后按 REJECT-DROP 处理 |
REJECT-DROP | reject-drop | 静默持有整条入站连接 | 静默持有入站连接 | 每次均静默拒绝,不依赖请求次数 |
REJECT-NO-DROP | reject-no-drop | 返回 503 | 立即释放入站连接 | 始终立即拒绝,不计入自动升级次数,也不转为 REJECT-DROP |
内置策略可直接作为规则和策略组目标,无需在 [Proxy] 声明;命名出站可用于为同一行为设置别名。
自动升级后,连接记录的实际出站显示为 REJECT-DROP,路由路径的最终策略同步更新,原始命中规则保持不变。
静默持有默认 5 秒,由原连接任务保留资源,到期或取消时直接释放。TCP 与 HttpEngine 共用记录器和 128 个持有名额;名额用尽时立即结束拒绝连接。HTTP/2 按整条物理连接持有,因此其他并发请求也会停止。脚本内部 HTTP 调用不计入入站自动升级次数。
TUN 连接在持有前暂停协议栈接收与输出,释放该流的接收、乱序和发送载荷,避免应用不读时数据仍在进程内累积;暂停状态随连接 Drop 回收。仅清该流的数据缓存,不清 DNS、Fake-IP 或其他连接状态。UDP 拒绝不生成 HTTP 内容,也不建立出站,按已有入站会话结束路径丢弃请求。
[Proxy]
Local = direct
Blocked = reject
TransparentAd = reject-tinygif
SilentBlock = reject-drop
ImmediateBlock = reject-no-drop