[Proxy] 代理服务器
本节用于定义代理服务器及其传输协议参数,作为网络流量的转发目的地。配置支持标准代理协议、虚拟网络隧道以及本地基本策略。
语法声明块
代理服务器通过独立的 INI 配置行进行声明:
name = protocol, host, port, [args...], [options...]各组成部分解析如下:
name:代理服务器的唯一命名标识,供[Rule]分流策略和[Proxy Group]调度组引用。protocol:代理传输协议类型(大小写不敏感),如socks、http、shadowsocks、vmess、trojan、hysteria、tuic、wireguard、tailscale、anytls、shadowtls、ssh。host:目标代理服务器的主机名、域名或 IP 地址。port:目标代理服务器的服务端口(范围 1–65535)。[args...]:协议特有的位置参数。位置参数必须置于键值选项之前,按协议规定的顺序排列(例如 Shadowsocks 的加密方式和密码、Trojan 的密码、VMess 的用户 UUID)。[options...]:键值选项(格式为key=value),用于配置传输层封装(TLS、WebSocket)、网络接口绑定、延迟测试覆盖及连接复用参数。
策略与隧道语法
对于无需服务器地址的特定类型,语法声明调整如下:
- 基本策略:直接声明行为名称,例如
DirectNode = direct或RejectNode = reject。 - 虚拟网络隧道:如 WireGuard 与 Tailscale,其端点或控制面由选项内部定义,语法为
name = protocol, [options...]。
通用选项
所有代理服务器均支持以下通用控制选项:
override-test-url(HTTP/HTTPS URL,默认全局配置值) 覆盖全局proxy-test-url,指定该服务器专用的健康检查与延迟探测 URL。ip-version(枚举值,默认值dual) 服务器建连时的出口 IP 地址族偏好,可选dual、ipv4-only、ipv6-only、prefer-ipv4、prefer-ipv6。interface(网络网卡名称,默认系统默认出口) 强制将该服务器的网络连接绑定到指定的物理网络接口(如en0、pdp_ip0)。tfo(布尔值,默认值false) 启用 Apple 平台物理 TCP 连接的 TCP Fast Open。其他平台显式启用时返回不支持错误。系统黑洞检测策略由[General]的tfo-behaviour控制。首写参与地址竞速,完成握手后才记入成功地址缓存;服务端先发数据时使用普通 TCP,避免双方等待首包。早期数据可能重放或随竞速发往多个候选地址,仅用于允许首包重放的上层协议。tcp-ecn(枚举值,默认值auto) Apple 平台物理 TCP 连接的 ECN 协商策略:auto保留系统默认,on显式启用,off显式禁用。在握手前设置,不影响 UDP 或 QUIC ECN。underlying-proxy(代理名称,未设置) 指定底层前置代理(已定义的代理服务器名称),构建多级中继代理通道。tfo、tcp-ecn只作用于实际创建物理 TCP socket 的节点;使用前置代理的节点允许配置这些参数,但不会修改前置代理的 socket 参数。dns-resolver-type(枚举值,默认值default) 节点服务器域名的解析模式,可选default/0、ip4p/1;ip4p采用 IPv4-in-IPv6 映射前缀。ip4p-prefix(IPv6 地址前缀,默认值2001::) IP4P 地址前缀,要求末尾三个 16 位字段全为零,仅在dns-resolver-type=ip4p时生效。
传输层与安全特性(TLS 与 WebSocket)
TLS 选项适用于 http、vmess、trojan、hysteria、tuic、anytls 与 shadowtls 协议;WebSocket 选项适用于 vmess 与 trojan 协议。Shadow TLS 始终验证证书,不接受 skip-cert-verify=true 或 enable-early-data=true。
tls(布尔值,默认值false) TLS 加密开关;AnyTLS 强制开启,Hysteria 默认启用 QUIC TLS。sni(域名字符串,默认节点 host 地址) TLS SNI 服务器名称指示,用于证书验证与虚拟主机路由。alpns(字符串列表,默认空列表) TLS ALPN 协商协议列表(逗号分隔),多个值整体使用双引号包裹。server-cert-fingerprint-sha256(64 位十六进制字符串,未设置) 服务端证书 SHA-256 证书指纹固定校验(可含冒号,必须精确解析为 32 字节)。skip-cert-verify(布尔值,默认值false) 允许跳过服务端证书合法性校验。enable-early-data(布尔值,默认值false) 启用 TLS 1.3 早期数据(0-RTT Early Data)。ws(布尔值,默认值false) 启用 WebSocket 传输层封装。ws-path(路径字符串,默认值/) WebSocket 连接握手路径。headers(键值映射,默认空映射) HTTP 或 WebSocket 握手时附加的自定义请求头,格式为Key:Value|Key2:Value2。
协议详解
支持协议一览
| 声明类型 | 协议支持 | 备注 |
|---|---|---|
socks | SOCKS5 | |
http | HTTP / HTTPS | |
shadowsocks | Shadowsocks | |
vmess | VMess | |
trojan | Trojan | |
hysteria | Hysteria | |
tuic | TUIC v5 | TCP / UDP |
wireguard | WireGuard | |
tailscale | Tailscale | |
anytls | AnyTLS | |
shadowtls | Shadow TLS | 也接受 shadow-tls、stls |
ssh | SSH 隧道 | |
direct / reject | 基本策略 | |
sing-mux | Sing Mux 多路复用 | 不能独立使用,需配置于其他代理协议中 |
SOCKS 与 HTTP
SOCKS 与 HTTP 代理协议支持通过位置参数或选项配置认证信息。
属性配置
username(字符串,默认值为空) 代理鉴权用户名。password(字符串,默认值为空) 代理鉴权密码。headers(键值映射,默认值为空) 仅适用于 HTTP 代理,附加自定义 HTTP 请求头。
[Proxy]
SocksNode = socks, proxy.example.com, 1080
HttpNode = http, proxy.example.com, 8080, username=user, password=<SECRET>
HttpsNode = http, proxy.example.com, 443, tls=true, sni=proxy.example.com, username=user, password=<SECRET>Shadowsocks
Shadowsocks 协议提供对称加密传输,支持混淆插件与 Sing Mux 多路复用。
属性配置
encrypt-method(枚举值,必填) 对称加密算法名称,大小写不敏感。可选值包括aes-128-gcm、aes-192-gcm、aes-256-gcm、chacha20-ietf-poly1305。可作为端口后的首个位置参数。password(字符串,必填) 认证密码。可作为加密算法后的第二个位置参数。obfs(枚举值,未设置) 流量混淆插件类型,可选http、tls。obfs-host(域名字符串,未设置) 混淆请求中使用的主机名。obfs-path(路径字符串,未设置) HTTP 混淆请求的 URL 路径。
[Proxy]
SS-Positional = shadowsocks, ss.example.com, 8388, aes-256-gcm, <SECRET>
SS-Options = shadowsocks, ss.example.com, 8388, encrypt-method=chacha20-ietf-poly1305, password=<SECRET>, obfs=tls, obfs-host=cdn.example.comVMess
VMess 协议支持 TLS/WebSocket 封装及 AEAD 校验。
属性配置
uuid(UUID 字符串,必填) 用户身份标识凭据。支持作为端口后的首个位置参数,显式键值字段具有更高优先级。cipher(枚举值,未设置) 数据包加密算法,可选aes-128-gcm、aes-192-gcm、aes-256-gcm、chacha20-ietf-poly1305。aead(布尔值,默认值false) VMess AEAD 头部认证开关。
[Proxy]
VMess-TLS = vmess, vmess.example.com, 443, uuid=b831381d-6324-4d53-ad4f-8cda48b30811, aead=true, tls=true, sni=vmess.example.com
VMess-WS = vmess, cdn.example.com, 443, uuid=b831381d-6324-4d53-ad4f-8cda48b30811, aead=true, tls=true, ws=true, ws-path=/rayTrojan
Trojan 协议通过仿标准 HTTPS 流量传输。认证密码通过端口后的首个位置参数声明:
name = trojan, host, port, password, [options...]属性配置
password(字符串,必填) Trojan 认证密码,置于端口后的第一个位置参数。
[Proxy]
Trojan-TLS = trojan, trojan.example.com, 443, <SECRET>, tls=true, sni=trojan.example.com
Trojan-WS = trojan, trojan.example.com, 443, <SECRET>, tls=true, sni=trojan.example.com, ws=true, ws-path=/trojan-wsHysteria
Hysteria 协议基于 QUIC 协议传输,具备单流多路复用与抗丢包拥塞控制。
属性配置
auth(字符串,默认值为空) 客户端握手认证鉴权凭据。down(正整数,单位:Bps,默认值0) 下行带宽速率限制;0表示由拥塞控制算法动态探测。obfs(字符串,未设置) Salamander 流量混淆验证密码。realm(URL 字符串,未设置) 启用 Realm 控制面发现与 UDP NAT 穿透机制,格式为realm://或realm+http://。realm-underlying-proxy(节点名称,未设置) 仅供 Realm 控制面通信使用的独立底层代理链路。realm-stun(服务器列表,默认内置 STUN 列表) 用于 NAT 类型探测与穿透的 STUN 服务器地址列表(逗号分隔)。realm-stun-timeout(正整数,单位:秒,默认值5) STUN 握手探测超时时间。realm-http-timeout(正整数,单位:秒,默认值10) Realm 控制面 HTTP 通信超时,允许的最大值为 10 秒。realm-punch-timeout(正整数,单位:秒,默认值5) UDP NAT 穿透等待超时时间。realm-insecure(布尔值,默认值false) 允许跳过 Realm 控制面的 TLS 证书校验。realm-sni(域名字符串,未设置) Realm 控制面通信 TLS SNI 指示。realm-server-cert-fingerprint-sha256(64 位十六进制字符串,未设置) Realm 控制面证书的 SHA-256 指纹校验。
[Proxy]
Hysteria-Standard = hysteria, hy.example.com, 443, auth=<SECRET>, sni=hy.example.com, down=12500000
Hysteria-Realm = hysteria, hy.example.com, 443, auth=<SECRET>, realm=realm://<SECRET>@coord.example.com/tunnel1TUIC v5
支持 TUIC v5 的 TCP 和 UDP 代理,目标地址支持 IPv4、IPv6 和域名。不支持 TUIC v4。
uuid(UUID,必填):服务端配置的用户标识。password(字符串,必填):服务端配置的密码;包含逗号或等号时使用双引号包裹。udp-relay-mode(native/quic,默认native):选择 UDP 转发模式。native使用数据报传输,quic使用可靠传输;两种模式均支持大报文分片。- TLS 始终开启,支持通用
sni、alpns、证书校验与指纹参数;未指定 ALPN 时使用h3。不支持tls=false或enable-early-data=true。 - UDP 报文长度及同一会话内混合使用 IPv4、IPv6 目标的能力,还取决于服务端支持情况。
[Proxy]
TUIC-Native = tuic, tuic.example.com, 443, uuid=00000000-0000-0000-0000-000000000001, password=<SECRET>, sni=tuic.example.com
TUIC-QUIC = tuic, tuic.example.com, 443, uuid=00000000-0000-0000-0000-000000000001, password=<SECRET>, udp-relay-mode=quicWireGuard
WireGuard 采用点对点加密隧道,通过纯键值选项方式声明:
name = wireguard, [options...]接口属性
addresses(IP 地址列表,必填) 客户端本地分配的虚拟 IP 地址列表(逗号分隔);IPv4 与 IPv6 各支持配置一个。private-key(Base64 字符串,必填) 客户端本地 WireGuard 接口私钥(32 字节)。mtu(整数 576–1420,默认值1280) 隧道最大传输单元;包含 IPv6 地址时建议设置为 1280 或更高。dns(IP 地址列表,默认值为空) 隧道专用的内部域名解析器地址列表。peers(Peer 对象数组,必填) 对端 Peer 节点配置列表,格式为[{key=value,...}]。
Peer 属性
public-key(Base64 字符串,必填) 对端 Peer 的 32 字节公钥。preshared-key(Base64 字符串,未设置) 预共享对称密钥(Preshared Key)。allowed-ips(CIDR 列表,必填) 允许经由此 Peer 路由的目标 IP 网段范围(逗号分隔)。endpoint(host:port格式,必填) 对端服务器的实际物理网络连接地址与 UDP 端口。keepalive(整数 0–65535,单位:秒,未设置) NAT 保活心跳报文发送间隔。reserved(字节数组,未设置) 保留字段,格式如[0,0,0],供特定网络网关要求时提供。
[Proxy]
WG-Node = wireguard, addresses="10.0.0.2, fd00::2", private-key=<SECRET>, mtu=1280, peers=[{public-key=<SECRET>,endpoint=wg.example.com:51820,allowed-ips="0.0.0.0/0, ::/0",keepalive=25}]Tailscale
Tailscale 节点直接接入 Tailnet 网络,通过纯键值选项方式声明:
name = tailscale, [options...]属性配置
auth-key(非空字符串,必填) Tailscale 预授权密钥(Auth Key);日志输出时自动脱敏。control-url(HTTPS URL,默认官方控制面地址) Tailscale 控制面(Headscale / Tailscale)协调服务器地址。http-underlying-proxy(节点名称,未设置) 仅供控制面信令交互与 DERP HTTPS 中继通信使用的底层代理。hostname(字符串,未设置) 本机在 Tailnet 拓扑中声明的主机名。exit-node(节点标识,默认值none) 指定 Tailnet 出口节点;可选none、auto或节点稳定 ID、完整/短域名及 Tailnet IP。dns-server(IP 地址列表,默认控制面自动下发) 自定义覆盖 Tailnet DNS 解析器;IPv6 带端口格式为[IP]:port。derp-only(布尔值,默认值false) 强制全程经由 DERP 中继转发,禁用节点间直连与 UDP NAT 穿透。ephemeral(布尔值,默认值false) 声明为临时节点,设备断开后自动从控制面注销。mtu(整数 576–1420,默认值1280) Tailscale 虚拟接口的数据包 MTU 大小。
路由与 MagicDNS 机制
- 路由匹配顺序:发往 Tailnet 内部节点或子网路由(Subnet Routes)的流量优先于出口节点(Exit Node)的默认路由。
- MagicDNS 拓扑:根据控制面下发的拓扑同步 Tailnet 主机名记录与搜索域(Search Domains)。非内网查询由配置的解析器或出口节点提供递归转发。
[Proxy]
Tailnet = tailscale, auth-key=<SECRET>, hostname=apple-client, exit-node=auto
Tailnet-Proxy = tailscale, auth-key=<SECRET>, exit-node=gateway-node, http-underlying-proxy=SSNodeShadow TLS
Shadow TLS V1/V2/V3 提供到服务端固定后端的 TCP 字节流。通过内层协议节点的 underlying-proxy 引用它;规则和调度组选择内层协议节点。业务数据的加密由 Shadowsocks 等内层协议负责。
属性配置
version(枚举值,默认值3) 可选1、2、3;须与服务端一致,不自动降级。password(字符串,V2/V3 必填) V2/V3 要求非空认证密码;V1 不需要。sni(域名字符串,默认节点 host 地址) 握手网站名称,必须是有效 TLS 服务名称。server-cert-fingerprint-sha256、alpns沿用上文 TLS 选项的格式、默认值及约束。
V1 使用 TLS 1.2;V2 支持 TLS 1.2/1.3;V3 严格使用 TLS 1.3。证书验证保持启用,不支持 early data 或原生 UDP。
[Proxy]
Cover = shadowtls, stls.example.com, 443, version=3, password=<SECRET>, sni=www.example.com
Proxy = ss, stls.example.com, 443, encrypt-method=aes-128-gcm, password=<SECRET>, underlying-proxy=Cover
[Rule]
FINAL, ProxyAnyTLS
AnyTLS 协议强制启用 TLS,并采用多路复用连接池管理。
属性配置
password(字符串,必填) 握手身份认证凭据;支持通过端口后的首个位置参数配置。idle-session-check-interval(正整数,单位:秒,默认值30) 底层连接池空闲会话健康检查周期。idle-session-timeout(正整数,单位:秒,默认值30) 空闲连接保持最大超时时间。min-idle-session(无符号整数,默认值5) 连接池中维持的最小空闲连接储备数。max-streams-per-session(正整数,默认值5) 单条 TLS 会话连接承载的并发数据流上限。
[Proxy]
AnyTLS-Node = anytls, anytls.example.com, 443, password=<SECRET>, idle-session-timeout=60SSH
SSH 协议基于 TCP direct-tcpip 转发流量,支持密码或命名私钥认证,不支持 UDP:
属性配置
username(非空字符串,必填) SSH 登录用户名。password(非空字符串,未设置) SSH 登录密码;与private-key必须且只能填写一个。private-key(Keystore 名称,未设置) 新建 SSH 会话时优先从安全存储获取私钥,缺失时使用配置内同名条目。idle-timeout(无符号整数,单位:秒,默认值180) SSH 隧道连接空闲保活超时时长。server-fingerprint(指纹列表,默认接受任意服务端密钥) 服务端主机公钥指纹验证,格式为算法 Base64公钥,多个值使用双引号包裹并以逗号分隔。
[Proxy]
SSH-Tunnel = ssh, ssh.example.com, 22, username=deploy, password=<SECRET>, idle-timeout=300基本策略
基本策略用于本地直连或流量阻断,不连接外部代理服务器:
| 策略标识 | 命名动作类型 | HTTP 流量行为 | TCP/UDP 流量行为 | 行为说明 |
|---|---|---|---|---|
DIRECT | direct | 直接由本地物理网络发起连接 | 直接由本地物理网络发起连接 | 流量直连,不经过外部代理 |
REJECT | reject | 返回 HTTP 503 状态码响应 | 发送连接重置或关闭 | 拒绝连接策略 |
REJECT-TINYGIF | reject-tinygif | 返回 HTTP 200 及 1×1 像素透明 GIF | 发送连接重置或关闭 | 针对 HTTP 请求返回 1×1 像素透明 GIF |
REJECT-DROP | reject-drop | 静默保持连接,超时后断开 | 静默丢弃报文,不回复响应 | 静默丢弃策略 |
REJECT-NO-DROP | reject-no-drop | 返回 HTTP 503 状态码响应 | 发送连接重置或关闭 | 即时拒绝策略,不转为静默丢弃 |
大写基本策略(如 DIRECT、REJECT)可直接在分流策略和调度组中使用;小写名称可在 [Proxy] 节中自定义别名。
[Proxy]
DirectOutbound = direct
AdBlock = reject
AdImageBlock = reject-tinygif
QuietBlock = reject-dropSing Mux 多路复用
Sing Mux 允许在单条 TCP/TLS 连接中并发传输多个逻辑数据流。支持该特性的代理协议可配置以下选项:
sing-mux(布尔值,默认值false) Sing Mux 多路复用总开关。sing-mux-stream-num-per-conn(正整数,默认值8) 单条底层 TCP 物理连接中并发承载的最大逻辑子流数量。sing-mux-max-connections(正整数,未设置) 节点建立的底层物理复用连接总数上限。sing-mux-padding(布尔值,默认值true) 数据包填充开关,启用时在数据包中添加随机长度填充。sing-mux-idle-timeout(无符号整数,单位:秒,默认保持连接) 复用连接在无活跃数据流时的空闲保活超时时长。
示例声明写法:
[Proxy]
# Shadowsocks 启用 Sing Mux 多路复用
SS-Mux = shadowsocks, ss.example.com, 8388, encrypt-method=aes-256-gcm, password=<SECRET>, sing-mux=true, sing-mux-stream-num-per-conn=16, sing-mux-padding=true
# Trojan 启用 TLS 与 Sing Mux 多路复用
Trojan-Mux = trojan, trojan.example.com, 443, <SECRET>, tls=true, sni=trojan.example.com, sing-mux=true, sing-mux-stream-num-per-conn=8配置示例
基础配置
[Proxy]
# 1. 基础直连与拦截别名
DirectNet = direct
BlockAds = reject-drop
# 2. Shadowsocks(链式代理与多路复用)
LandingNode = shadowsocks, jp.example.com, 8388, aes-256-gcm, <SECRET>
RelayNode = shadowsocks, us.example.com, 8388, chacha20-ietf-poly1305, <SECRET>, underlying-proxy=LandingNode, sing-mux=true
# 3. Trojan(WebSocket 传输与自定义 SNI)
TrojanNode = trojan, hk.example.com, 443, <SECRET>, tls=true, sni=hk.example.com, ws=true, ws-path=/ws
# 4. Hysteria(下行速率限制)
HyNode = hysteria, hy.example.com, 443, auth=<SECRET>, sni=hy.example.com, down=25000000
# 5. WireGuard
WG-Node = wireguard, addresses="10.8.0.5, fd00:8::5", private-key=<SECRET>, mtu=1360, peers=[{public-key=<SECRET>,endpoint=vpn.example.com:51820,allowed-ips="10.0.0.0/8, 172.16.0.0/12"}]
# 6. Tailscale
Tailnet-Mesh = tailscale, auth-key=<SECRET>, hostname=mac-client, exit-node=auto