Skip to content

[Proxy] 出站节点 ​

本节定义命名出站、协议参数和传输选项。字段名由模型的 StructSchema 元数据提供;兼容字段由独立 schema 提供。

语法 ​

ini
[Proxy]
名称 = 协议, 主机, 端口, 位置参数, 选项=值

位置参数必须先于键值参数。WireGuard、Tailscale 和无服务器的出站不使用主机、端口位置参数。协议名按小写解析。

通用字段 ​

字段取值默认值行为与约束
override-test-urlHTTP/HTTPS URL未设置,使用全局测试 URL节点延迟测试;兼容 test-url
ip-versiondual、ipv4-only、ipv6-only、prefer-ipv4、prefer-ipv6运行时 dual地址族选择;不接受 ipv4、ipv6
interface接口名称未设置绑定出站接口;模型字段 interface_name 的配置名为 interface
underlying-proxy出站名称未设置底层出站链
dns-resolver-typenormal/default/0、ip4p/1运行时 normal节点地址解析方式
ip4p-prefixIPv6 地址,末三个 16 位段必须为零运行时 2001::ip4p 解析器前缀,仅 ip4p 模式使用

TLS 与 WebSocket 字段 ​

TLS 参数由 HTTP、VMess、Trojan、Hysteria、AnyTLS 解析。WebSocket 参数由 VMess、Trojan 解析。

字段取值默认值行为与约束
tls布尔值falseTLS 开关;AnyTLS 强制开启;Hysteria 的 QUIC 使用 TLS 设置
sni主机名字符串未设置运行时 TLS 名称缺省取服务器主机
alpns字符串逗号列表空列表ALPN 列表,多个值整体引用
server-cert-fingerprint-sha25664 位十六进制,可含冒号未设置解码后必须为 32 字节
skip-cert-verify布尔值false跳过证书验证
enable-early-data布尔值falseTLS early data
ws布尔值falseWebSocket 开关
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 字段
ini
[Proxy]
Socks = socks, proxy.example.com, 1080
Http = http, proxy.example.com, 443, tls=true, username=user, password=<SECRET>

Shadowsocks ​

协议为 shadowsocks,也接受 ss。

字段取值默认值行为与约束
encrypt-methodaes-128-gcm、aes-192-gcm、aes-256-gcm、chacha20-ietf-poly1305无,必填不区分大小写;也可作为端口后的第一个位置参数
password字符串空字符串也可作为加密方法后的第二个位置参数
obfshttp、tls未设置混淆类型,不区分大小写
obfs-host字符串未设置混淆主机
obfs-path字符串未设置HTTP 混淆路径
ini
[Proxy]
SS = shadowsocks, proxy.example.com, 8388, encrypt-method=aes-256-gcm, password=<SECRET>

VMess ​

协议为 vmess,读取 TLS 和 WebSocket 字段。

字段取值默认值行为与约束
uuidUUID 字符串无,必填兼容 username;也接受端口后的第一个位置参数;优先级为 uuid、username、位置参数
cipherShadowsocks 表中列出的加密方法未设置模型字段为 security;不接受 auto、none 或 encrypt-method 作为此字段
aead布尔值falseVMess AEAD 开关
ini
[Proxy]
VMess = vmess, proxy.example.com, 443, uuid=00000000-0000-0000-0000-000000000001, tls=true

Trojan ​

协议为 trojan,读取 TLS 和 WebSocket 字段。密码使用端口后的第一个位置参数,缺省为空字符串;当前解析器不从 password=... 读取密码。

ini
[Proxy]
Trojan = trojan, proxy.example.com, 443, <SECRET>, tls=true, sni=proxy.example.com

Hysteria ​

协议为 hysteria,使用 QUIC 与 Hysteria 认证消息。当前解析字段如下,不接受旧文档中的 protocol、up-mbps、down-mbps 配置语义。

字段取值与单位默认值行为与约束
auth字符串空字符串Hysteria 认证值
downu32,接收速率协议值0映射到 cc_rx,作为 Hysteria-CC-RX 发送;不在解析层进行 Mbps 换算
obfs字符串未设置Salamander 混淆密码,转换为字节
realmrealm://<SECRET>@主机/名称 或 realm+http://<SECRET>@主机/名称未设置启用 Realm 控制面与 UDP 打洞
realm-underlying-proxy出站名称未设置仅控制面的底层代理,缺省复用 Hysteria connector
realm-stunSTUN 主机:端口列表stun.cloudflare.com:3478,stun.nextcloud.com:3478,stun.l.google.com:19302多个值整体引用;空列表也使用默认值
realm-stun-timeout正整数,秒运行时 5STUN 超时
realm-http-timeout正整数,秒运行时 10HTTP 请求总超时,上限 10
realm-punch-timeout正整数,秒运行时 5打洞超时
realm-insecure布尔值false跳过控制面 TLS 证书验证
realm-sni字符串未设置控制面 TLS SNI
realm-server-cert-fingerprint-sha25664 位十六进制,可含冒号未设置控制面证书 SHA-256 指纹,解码后 32 字节

主机与端口必填,即使配置 Realm 也保留这两个位置参数。Realm 模式每次建连重新获取监听地址并打洞,不使用该主机、端口作为数据目标,也不配置本地监听端口。Realm URI 中 token 不能为空;名称为 6–64 个 ASCII 字符,首字符为字母或数字,其余仅允许字母、数字、-、_。不接受密码、fragment 或 lport 查询参数;仅支持 stun 查询参数,可覆盖 realm-stun。TLS 默认端口 443,明文默认 80;端口与超时在构建 Realm 设置时检查为非零,HTTP 超时被限制在 10 秒以内。

ini
[Proxy]
Hysteria = hysteria, proxy.example.com, 443, auth=<SECRET>, sni=proxy.example.com

WireGuard ​

协议为 wireguard,只使用命名字段,不使用主机和端口位置参数。

字段取值与单位默认值行为与约束
addresses字面 IP 逗号列表,不接受 CIDR无,必填至少一个,IPv4 与 IPv6 各最多一个;兼容 interface-ip、interface-ip-v6,不能与 addresses 同时使用
private-keyBase64 编码的 32 字节密钥无,必填接口私钥
mtu576–1420,字节1280有 IPv6 地址时至少 1280
dns字面 IP 逗号列表空列表WireGuard DNS 地址
peers[{字段=值,...}]无,必填当前恰好一个 peer

Peer 字段:

字段取值与单位默认值行为与约束
public-keyBase64 编码的 32 字节密钥无,必填Peer 公钥
preshared-keyBase64 编码的 32 字节密钥未设置预共享密钥
allowed-ipsCIDR 逗号列表无,必填且非空Peer 路由范围
endpoint主机:端口无,必填Peer 服务器
keepaliveu16,秒未设置保活间隔
reserved三个字节的数组未设置当前仅接受 [0,0,0]
ini
[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。

ini
[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每会话流数量上限
ini
[Proxy]
AnyTLS = anytls, proxy.example.com, 443, password=<SECRET>

SSH ​

协议为 ssh,仅支持 TCP direct-tcpip 和密码认证,不支持 UDP 或 private-key 认证。

字段取值与单位默认值行为与约束
username字符串无,必填且非空登录用户名
password字符串无,必填且非空登录密码
idle-timeout无符号整数,秒180空闲会话保留时间
server-fingerprintOpenSSH 公钥逗号列表未设置,接受任意服务端密钥完整格式 算法 Base64公钥;列表整体引用
ini
[Proxy]
SSH = ssh, proxy.example.com, 22, username=user, password=<SECRET>, idle-timeout=180

无服务器出站 ​

direct、compatible 和拒绝策略可用于命名出站,不需要服务器地址。shadowsocksv2 枚举虽存在,当前 Profile 解析明确拒绝该协议。

内置策略命名出站类型HTTP 行为TCP 行为行为说明
REJECTreject返回 503立即释放入站连接同 hostname 最近 30 秒内第 50 次起按 REJECT-DROP 处理
REJECT-TINYGIFreject-tinygif返回 200 和 1×1 透明 GIF,类型为 image/gif立即释放入站连接与 REJECT 共用计数,达到相同阈值后按 REJECT-DROP 处理
REJECT-DROPreject-drop静默持有整条入站连接静默持有入站连接每次均静默拒绝,不依赖请求次数
REJECT-NO-DROPreject-no-drop返回 503立即释放入站连接始终立即拒绝,不计入自动升级次数,也不转为 REJECT-DROP

内置策略可直接作为规则和策略组目标,无需在 [Proxy] 声明;命名出站可用于为同一行为设置别名。

自动升级后,连接记录的实际出站显示为 REJECT-DROP,路由路径的最终策略同步更新,原始命中规则保持不变。

静默持有默认 5 秒,由原连接任务保留资源,到期或取消时直接释放。TCP 与 HttpEngine 共用记录器和 128 个持有名额;名额用尽时立即结束拒绝连接。HTTP/2 按整条物理连接持有,因此其他并发请求也会停止。脚本内部 HTTP 调用不计入入站自动升级次数。

TUN 连接在持有前暂停协议栈接收与输出,释放该流的接收、乱序和发送载荷,避免应用不读时数据仍在进程内累积;暂停状态随连接 Drop 回收。仅清该流的数据缓存,不清 DNS、Fake-IP 或其他连接状态。UDP 拒绝不生成 HTTP 内容,也不建立出站,按已有入站会话结束路径丢弃请求。

ini
[Proxy]
Local = direct
Blocked = reject
TransparentAd = reject-tinygif
SilentBlock = reject-drop
ImmediateBlock = reject-no-drop