9. 出站协议配置#


出站协议决定 Link1 最终如何连接目标或上游服务。所有静态出站节点写在 proxies 中;订阅、文件、内联或 WARP 动态节点写在 proxy-providers 中。

本章把每个协议当成“用户要配置的一种出口”来讲,不只列字段。读每个协议时请同时看四件事:

  1. 它解决什么问题:普通代理、加密代理、L3 VPN、企业 VPN、还是特殊出口。
  1. 一条连接如何走:Link1 到上游之间使用 TCP、UDP、QUIC、TLS、WireGuard、OpenVPN 还是企业专有协议。
  1. 字段改变什么行为:认证、证书、传输层、DNS、UDP、路由、性能参数分别会影响哪一段。
  1. 常见误区:哪些字段不是这个协议的字段,哪些字段看起来相似但含义不同。

如果你是第一次配置某个协议,建议先复制本章示例,只改服务商给你的账号、地址、端口、密码/密钥;跑通后再调整高级字段。

出站节点通用结构#

proxies:
  - name: node-name
    type: socks5
    server: 127.0.0.1
    port: 1080

通用字段:

字段含义实际影响
name节点名称必须唯一,可被策略组和规则引用
type协议类型决定使用哪个出站协议实现
server / address远端地址大多数协议使用 server;少数协议兼容 address
port远端端口0 通常视为未配置
dialer-proxy前置代理先通过另一个节点拨号,再连接本节点远端
interface-name绑定网卡多网卡/路由器场景控制出口网卡
routing-markLinux mark配合策略路由
ip-versionIP 选择策略控制解析/拨号偏向 IPv4/IPv6
tfoTCP Fast Open支持的 TCP 协议可减少握手延迟
mptcpMultipath TCP支持的平台/协议可使用多路径 TCP
udpUDP 支持影响 UDP 转发、游戏、QUIC、DNS 等

不是每个协议都支持所有通用字段。Link1 会在配置编译期拒绝协议不支持的字段。

通用字段怎样影响数据流#

这些字段不属于某个单独协议,而是影响“Link1 到上游”这一段如何拨号:

字段组字段用户应该怎么理解
命名与引用nametypename 是规则和策略组引用的名字;type 决定后面所有字段按哪个协议解释。
远端定位serveraddressportport-rangeports决定上游在哪里;ports/port-range 通常是端口跳跃或协议特定能力,不是普通备用端口。
前置链路dialer-proxy当前节点不直接连上游,而是先走另一个节点;常用于“先连本地代理,再连企业 VPN/远端节点”。
出口选择interface-namerouting-markip-version控制底层 TCP/UDP 从哪张网卡、哪个策略路由、哪个 IP 族出去。
TCP 能力tfomptcp只影响支持 TCP 的协议;系统或上游不支持时可能无效果。
UDP 能力udp影响 DNS、QUIC、游戏、语音、WireGuard/MASQUE 等 UDP 流量是否能走该节点。

dialer-proxy 是最容易误解的字段。它不是“这个节点的备用节点”,而是“连接这个节点的服务器时,先通过另一个出站”。例如 trojan 节点使用 dialer-proxy: PROXY,表示 Trojan 在连接自己的 server:port 时先通过 PROXY 组建立底层连接;协议握手完成后,这个 Trojan 节点仍按自己的协议处理最终业务流量。

协议总览#

type类别它如何工作何时选择主要风险/注意点
direct特殊出口Link1 直接连接目标 IP/域名内网、国内站、无需代理的目标仍经过 Link1,只是最终直连
reject特殊出口Link1 直接拒绝连接广告、恶意域名、禁止访问可能导致应用反复重试
dns特殊出口把连接交给内置 DNS resolverDNS 规则或内部 DNS 转发普通用户很少手写
http显式代理Link1 连接一个 HTTP proxy,上游再 CONNECT/转发目标公司代理、上游 HTTP 代理HTTP 上游通常不承载 UDP
socks / socks5显式代理Link1 连接 SOCKS5 上游,由 SOCKS5 服务器连接目标本地代理链、简单上游UDP 依赖 SOCKS5 UDP associate
ssh隧道先登录 SSH,再通过 SSH channel 转发 TCP;UDP 需 udpgw有 SSH 服务器、内网跳板主机密钥校验很重要
vmess加密代理VMess 用户身份 + 可选 TLS/WS/H2/gRPC/KCP 等传输兼容旧 VMess 节点alterId、传输层和 TLS 要与服务端一致
vless加密代理VLESS 用户身份 + TLS/REALITY/Vision/传输层REALITY、Vision、XUDP 节点flow、REALITY、SNI 错一个就握手失败
trojan加密代理Trojan 密码认证,通常伪装成 TLS 服务简洁 TLS 代理证书/SNI 与密码都要匹配
ss / shadowsocks加密代理AEAD/2022 等加密代理,可选插件轻量代理、路由器cipher/password/plugin 必须与服务端一致
ssr / shadowsocksr加密代理SS + obfs/protocol 兼容扩展旧 SSR 节点参数组合多,订阅字段容易不一致
shadowtls包装/伪装用 ShadowTLS 包一层 TLS 伪装,再承载后续流量需要 ShadowTLS 上游版本、密码、SNI 必须一致
tuicQUIC 代理基于 QUIC 的认证和 UDP/TCP 转发移动网络、UDP 场景UDP 被阻断时体验会很差
hysteriaQUIC 代理Hysteria v1,带带宽和端口跳跃参数旧 HY1 节点v1/v2 字段不能混用
hysteria2 / hy2QUIC 代理Hysteria2 密码认证 + QUIC + 可选 Salamander 混淆高性能代理、移动网络obfs 和证书参数要匹配
juicityQUIC 代理UUID/password 认证的 QUIC 代理Juicity 服务端拥塞控制和证书参数影响连通
naiveHTTP/2/3 代理NaiveProxy 风格 HTTP/2/3 上游Caddy/NaiveProxy 生态本质是带认证的 HTTP/2/3 上游
snell加密代理Snell PSK 认证,v4/v5 支持 TCP,v3/v4/v5 支持 UDPSnell 服务端版本与 obfs 要匹配
gost-relay代理协议Link1 连接 GOST relay 服务端并发送 relay CONNECTGOST relay TCP 上游、链式跳板首版只支持 TCP,不支持 UDP/TLS/mTLS/mux
anytls加密代理AnyTLS 密码认证 + TLS 隧道AnyTLS 服务端仍要处理 SNI/证书/指纹
brook代理协议Brook 多种 server transport,可选 WS/WSS/QUIC/maskBrook 服务端network 决定许多字段是否可用
mieru代理协议Mieru 用户认证 + TCP/UDP 传输Mieru 服务端transport、multiplexing、handshake 要匹配
trusttunnel隧道HTTP/2 ALPN 的轻量隧道,支持 UDP over streamTrustTunnel 服务端ALPN 必须包含 h2
sudoku扩展协议密码/密钥 + AEAD + padding/table/http-maskSudoku 服务端padding/table/mask 参数需服务端一致
wireguard / wgL3 隧道建立 WireGuard 虚拟三层链路WARP、自建 WG、企业隧道allowed-ips 是隧道路由语义,不是规则
masqueHTTP/3 隧道通过 HTTP/3 MASQUE CONNECT-UDP/IP 建隧道WARP MASQUE、支持 MASQUE 的服务QUIC、URI、证书、MTU 都会影响连通
tailscale组网/VPN登录 Tailnet/Headscale,使用 exit node 或路由设备组网、内网访问受控制面策略和节点授权影响
openvpnVPNOpenVPN 控制面握手 + userspace netstack 转发企业 OpenVPN、传统 VPNDNS/路由来自 push 或配置,不能当普通代理
atrust企业 VPN登录 ATrust,拿到企业路由/DNS 后作为出口深信服/企业接入认证策略、验证码、设备绑定影响很大
feilian企业 VPN登录飞连并选择 VPN 网关飞连企业网络网关选择与会话持久化很关键
easyconnect企业 VPN登录 EasyConnect 后作为企业 VPN 出口EasyConnect 企业网络服务端版本/策略差异较大
warpWARP provider不直接作为 leaf;通过 provider 物化 WireGuard/MASQUE 节点Cloudflare WARP 出口必须写在 proxy-providers,不能写在 proxies

协议配置可以从上游资料反推:

我该选哪种出站#

如果你不是在“自己设计服务端协议”,而是在把别人给你的账号填进 Link1,先按服务商给的材料选协议,不要凭感觉改类型。下面的表是从用户场景出发的选择建议:

场景优先看哪些协议为什么不建议一上来做什么
公司给了 HTTP/SOCKS 代理httpsocks5字段少,通常只有地址、端口、用户名密码。不要误写成 HTTP Engine;HTTP Engine 是内容改写模块,不是上游 HTTP proxy。
机场/订阅节点vmessvlesstrojansshysteria2tuic这些是常见代理节点类型,订阅一般已经包含协议字段。不要随意改 networktlssniflowobfs,它们必须与服务端一致。
自己有一台 SSH 服务器ssh不需要部署专门代理服务,就能通过 SSH channel 转发 TCP。不要把 SSH 当高性能 UDP 代理;UDP 需要 udpgw 支持。
需要高性能、移动网络、UDPhysteria2tuicwireguardmasqueQUIC/WireGuard 类协议更适合 UDP 和网络切换。如果本地网络封 UDP,先排查 UDP 可达性,不要只改密码或证书。
Cloudflare WARP 出口proxy-providers.type=warpWARP 会生成 WireGuard/MASQUE 候选节点,天然是 provider。不要写 proxies[].type=warp
企业 VPN/内网访问openvpnatrustfeilianeasyconnecttailscale这些协议会带来内网路由、企业 DNS 或设备登录态。不要只把它当“代理端口”;DNS、路由、账号状态都要一起看。
局域网/国内站点直连DIRECTdirect目标不需要代理,直连延迟最低。不要把所有流量都塞进远端节点,内网地址应优先直连。
广告/恶意域名拦截REJECTreject直接拒绝连接,减少无意义出站。拦截范围不要过宽,否则应用可能一直重试或功能异常。

一个简单决策树:

你拿到的是现成节点/订阅吗?
  是 -> 按节点 type 填,不要换协议
  否 -> 是企业 VPN/内网账号吗?
         是 -> openvpn / atrust / feilian / easyconnect / tailscale
         否 -> 是 WARP 吗?
                是 -> proxy-providers.type=warp
                否 -> 只是上游代理端口吗?
                       是 -> http / socks5 / naive
                       否 -> 自建服务端按服务端协议选择

TLS、传输和扩展字段#

很多协议共享 TLS 字段:

tls: true
skip-cert-verify: false
servername: example.com
sni: example.com
alpn: [h2]
client-fingerprint: chrome

实际影响:

VMess/VLESS/Trojan 常见传输:

network: ws
ws-opts:
  path: /ws
  headers:
    Host: example.com
network配套字段影响
tcp 或空无或协议默认字段普通 TCP 传输
httphttp-optsHTTP 伪装
wsws-optsWebSocket 传输
h2h2-optsHTTP/2 传输
grpcgrpc-optsgRPC 传输
kcpkcp-optsKCP 传输
xhttpxhttp-optsXHTTP 兼容传输,适用于支持 xHTTP 的 VMess/VLESS/Trojan 类节点

REALITY:

reality-opts:
  public-key: xxxxx
  short-id: abcd
  fingerprint: chrome

ECH:

ech-opts:
  enable: true
  mode: grease
  query-server-name: example.com

SMUX:

smux:
  enabled: true
  protocol: smux
  max-connections: 4
  min-streams: 4
  max-streams: 32

传输子配置字段怎么读#

子配置常见字段实际影响
http-optsmethodpathheadersHTTP 伪装传输使用;path/header 必须与服务端一致。
ws-optspathheadersmax-early-dataearly-data-header-namev2ray-http-upgradeWebSocket 路径、Host 和 early data 行为;CDN/反代场景最常用。
h2-optshostpathHTTP/2 传输的 authority/path。
grpc-optsgrpc-service-namegrpc-user-agentgRPC 服务名和 UA;服务名不匹配会像“端口通但协议不通”。
kcp-optsseedheader-typemtuttiuplink-capacitydownlink-capacitycongestionwrite-bufferread-bufferKCP 传输参数;需要服务端支持,错误参数会导致握手或性能异常。
ss-optsenabledmethodpasswordTrojan 的 Shadowsocks 扩展,不是普通 ss 节点。
plugin / plugin-opts插件名和插件参数Shadowsocks 插件混淆,必须与服务端插件一致。
obfs-optsmodehostSnell/插件类混淆参数。
smuxenabledprotocolmax-connectionsmin-streamsmax-streamspaddingstatisticonly-tcp多路复用设置;可减少连接数,但不适合所有网络,出问题时先关闭。

TLS/REALITY/ECH 字段怎么读#

字段用在哪些协议用户应该怎么理解
tlsVMess/VLESS/Trojan/HTTP/Brook/Naive 等是否给协议套 TLS;不是所有协议都允许手动写。
servername / sniTLS 类协议TLS 握手里的服务名;通常要等于证书域名或服务端要求的伪装域名。
skip-cert-verifyTLS 类协议跳过证书校验,只建议自签或测试;会降低安全性。
alpnTLS/H2/H3/TrustTunnel 等协商应用层协议,例如 h2h3http/1.1
client-fingerprint支持 uTLS 的协议调整 ClientHello 指纹,例如 chrome
pinned-certchain-sha256证书固定场景只接受指定证书链,适合强校验但配置成本高。
reality-opts.public-keyVLESS/REALITY服务端 REALITY 公钥。
reality-opts.short-idVLESS/REALITY服务端分配的短 ID。
reality-opts.fingerprintVLESS/REALITYREALITY 使用的指纹参数。
reality-opts.support-x25519mlkem768VLESS/REALITY后量子/扩展握手能力,必须与服务端兼容。
ech-opts.enable支持 ECH 的 TLS 出站开启 Encrypted ClientHello。
ech-opts.modeECHECH 模式,例如 grease/真实配置。
ech-opts.configECH手工提供 ECHConfig。
ech-opts.query-server-nameECH用哪个域名查询 ECH 配置。

如果你不知道是否需要这些字段,先不要写。服务商给了才写,且字段值要逐字匹配。

特殊出口#

direct#

直连目标服务器。

proxies:
  - name: local-direct
    type: direct
    interface-name: eth0

字段影响:

reject#

拒绝连接。

proxies:
  - name: block
    type: reject

用于广告/恶意流量/不允许访问的规则。内置 REJECT 已存在。

dns#

交给 Link1 内置 DNS resolver 的特殊出口。

proxies:
  - name: dns-out
    type: dns

普通用户通常不需要显式配置。

显式代理协议#

http#

HTTP 上游代理的工作方式是:Link1 先连接上游 HTTP proxy;如果客户端访问 HTTPS,Link1 会向上游发送 CONNECT target:443,由上游建立到目标的 TCP 隧道;如果访问明文 HTTP,则上游可以转发完整 HTTP 请求。

适合:公司代理、云服务器上的 HTTP 代理、需要 Basic 认证的上游。它不是 HTTP Engine,也不会自动解密 HTTPS 内容。

proxies:
  - name: http-upstream
    type: http
    server: proxy.example.com
    port: 8080
    username: alice
    password: secret
    tls: false

关键字段:

字段影响
server / portHTTP 代理服务器地址
username / passwordBasic 认证
tls连接上游代理时是否使用 TLS
headers附加请求头
skip-cert-verify / servernameTLS 模式下影响证书和 SNI

socks / socks5#

SOCKS5 上游代理的工作方式是:Link1 把目标地址交给 SOCKS5 服务器,由 SOCKS5 服务器去连接目标。目标可以是域名,也可以是 IP。

DNS 影响:如果 Link1 把域名交给 SOCKS5,上游负责解析;如果 Link1 先解析成 IP,再交给 SOCKS5,则域名信息可能丢失。透明代理/TUN 场景下仍建议先让 Link1 DNS/Fake-IP 提供域名上下文。

UDP 影响:udp: true 表示尝试使用 SOCKS5 UDP associate。上游不支持时,UDP 流量会失败,但 TCP 仍可能正常。

proxies:
  - name: socks-upstream
    type: socks5
    server: 127.0.0.1
    port: 1080
    username: alice
    password: secret
    udp: true

关键字段:

字段影响
server / portSOCKS5 服务器
username / passwordSOCKS5 用户名密码
udp是否使用 SOCKS5 UDP associate
tfoTCP Fast Open,需协议和系统支持

ssh#

SSH 出站的工作方式是:Link1 先登录 SSH 服务器,然后通过 SSH channel 转发 TCP 流量。它更像“把 SSH 服务器当跳板机”,不是传统加密代理协议。

认证可以用密码,也可以用私钥。生产环境强烈建议配置 host-key 校验服务端主机密钥;skip-host-key-verify 只适合临时测试。UDP 不是 SSH 原生能力,Link1 通过 udpgw 模式桥接,因此需要对应网关支持。

proxies:
  - name: ssh-node
    type: ssh
    server: ssh.example.com
    port: 22
    username: root
    private-key: ./id_ed25519
    private-key-passphrase: secret
    host-key:
      - SHA256:xxxxxxxx
    udp: true
    udp-relay-mode: udpgw
    udp-gateway: 127.0.0.1:7300

关键字段:

字段影响
usernameSSH 登录用户,必填
password / private-key二选一认证方式
private-key-passphrase加密私钥密码
host-key允许的服务端主机密钥,建议生产使用
skip-host-key-verify跳过主机密钥校验,不安全
host-key-algorithms限定主机密钥算法
udp开启 UDP 转发能力
udp-relay-mode使用 udpgw
udp-gatewayudpgw 地址,需 udp=true

限制:SSH 不支持 TLS、VMess/VLESS 传输字段、Reality、ECH、SMUX 等代理协议扩展。

VMess / VLESS / Trojan#

这三类协议都常见于“节点订阅”。它们的配置由三层组成:身份字段(uuid/password)、安全层(TLS/REALITY/证书/SNI)、传输层(TCP/WS/H2/gRPC/KCP)。排障时不要只看端口通不通,很多失败发生在 TLS、REALITY 或传输层路径不匹配。

vmess#

proxies:
  - name: vmess-ws
    type: vmess
    server: example.com
    port: 443
    uuid: 00000000-0000-0000-0000-000000000000
    alterId: 0
    cipher: auto
    tls: true
    network: ws
    ws-opts:
      path: /ws
      headers:
        Host: example.com

关键字段:

字段影响
uuidVMess 用户 ID,必填
alterIdVMess 兼容字段
cipherVMess 加密方式
tls / skip-cert-verify / servernameTLS 行为
network + *-opts传输层
udpUDP 转发能力
smux多路复用

vless#

proxies:
  - name: vless-reality
    type: vless
    server: example.com
    port: 443
    uuid: 00000000-0000-0000-0000-000000000000
    flow: xtls-rprx-vision
    encryption: none
    tls: true
    network: tcp
    reality-opts:
      public-key: xxxxx
      short-id: abcd
      fingerprint: chrome

关键字段:

字段影响
uuidVLESS 用户 ID,必填
flowVLESS flow,例如 Vision
encryption通常为 none
tlsVLESS 常与 TLS/REALITY 配合
reality-optsREALITY 参数
packet-addr / xudp / packet-encodingUDP 扩展语义
udp-over-tcp / udp-over-tcp-versionUDP over TCP 兼容扩展

trojan#

proxies:
  - name: trojan-grpc
    type: trojan
    server: example.com
    port: 443
    password: secret
    tls: true
    network: grpc
    grpc-opts:
      grpc-service-name: trojan

关键字段:

字段影响
passwordTrojan 密码,必填
tlsTrojan 通常使用 TLS
network可使用 WS/H2/gRPC 等传输
ss-optsTrojan Shadowsocks 扩展配置
udpUDP 转发能力

Shadowsocks 生态#

Shadowsocks 生态的核心是“加密方法 + 密码”。SS 本身较轻量,插件、UDP-over-TCP、XUDP、packet-addr 等字段是为兼容不同服务端和传输场景而存在。SSR 和 ShadowTLS 是不同的兼容/包装协议,字段不能混用。

ss / shadowsocks#

proxies:
  - name: ss-node
    type: ss
    server: example.com
    port: 8388
    cipher: 2022-blake3-aes-128-gcm
    password: secret
    udp: true
    plugin: obfs
    plugin-opts:
      mode: tls
      host: www.example.com

关键字段:

字段影响
cipher加密方法,必填
password密码,必填
udpUDP 转发
plugin / plugin-opts插件混淆
smux多路复用
udp-over-tcpUDP over TCP
packet-addr / xudpUDP 地址扩展

Shadowsocks cipher 与 plugin 组合#

Shadowsocks 是本章最典型的“加密套件 + 插件”协议。你可以把它理解成两层:

  1. cipherpassword 负责加密 SS 数据流。
  1. pluginplugin-opts 负责把“到 SS 服务端的这条 TCP 连接”伪装或封装成另一种形态。

Link1 的处理顺序是:先连到 server:port,如果配置了插件先让插件包装这条上游连接,然后再在插件连接上运行 Shadowsocks 加密协议。因此,服务端的 cipher、密码和插件参数必须逐项一致。

支持的 cipher:

类别cipher 可填值说明
常规 AEADaes-128-gcmaes-192-gcmaes-256-gcmaes-128-ccmaes-192-ccmaes-256-ccmaes-128-gcm-sivaes-256-gcm-sivchacha20-ietf-poly1305chacha8-ietf-poly1305xchacha20-ietf-poly1305xchacha8-ietf-poly1305推荐优先使用 AEAD。chacha* 系列通常适合无 AES 加速的设备。
扩展 AEADlea-128-gcmlea-192-gcmlea-256-gcmrabbit128-poly1305aegis-128laegis-256deoxys-ii-256-128aez-384ascon128ascon128a只有服务端明确给出时使用;服务端不支持会直接握手失败或无响应。
Shadowsocks 20222022-blake3-aes-128-gcm2022-blake3-aes-256-gcm2022-blake3-chacha20-poly13052022-blake3-chacha8-poly13052022-blake3-aes-128-ccm2022-blake3-aes-256-ccmSS 2022 使用独立密钥格式;不要把旧 SS 密码随意搬到 2022 cipher 上。
旧式 stream cipheraes-128-cfbaes-192-cfbaes-256-cfbaes-128-ctraes-192-ctraes-256-ctrchacha20chacha20-ietfxchacha20xchacha20-ietfrc4-md5为旧服务端兼容保留;新配置不建议优先选择。
明文/测试nonedummy只适合特殊测试或兼容场景,不提供正常加密保护。

配置中也兼容部分大小写、下划线或 ss-2022-* 别名;用户文档只列推荐写法。

支持的 plugin:

pluginplugin-opts 核心组合TCP 行为UDP 行为适合场景
不配置直接运行 SS 加密流udp: true 时使用原生 SS UDP最简单、最稳定。
obfsmode: httpmode: tls;可选 hostsimple-obfs 风格 HTTP/TLS 伪装插件本身不支持 UDP packet;如果确实要 UDP,需服务端支持并改用 udp-over-tcp 这类流式方案老服务端、轻量伪装。
v2ray-pluginmode: websocket/ws;可选 hostpathheaderstlsmuxv2ray-http-upgradeskip-cert-verifyfingerprintcertificate/private-keyech-opts把 SS TCP 包进 WebSocket,可再叠 TLS、HTTP Upgrade、mux插件本身不支持 UDP packet;需要 UDP 时优先确认服务端是否支持 udp-over-tcpCDN/反代/WebSocket 服务端。
gost-pluginmode: websocket/ws;可选 hostpathheaderstlsmuxfingerprintcertificate/private-keyech-optsGOST 风格 WebSocket 包装;mux 默认开启插件本身不支持 UDP packet;需要 UDP 时依赖流式 UDP 方案对接 GOST 插件生态。
cloaktransport: direct/cdn;必填 uidpublicKeyserverName;可选 proxyMethodencryptionMethod: plain/aes-gcm/aes-256-gcm/aes-128-gcm/chacha20-poly1305browserSig: chrome/firefox/safaricdnOriginHostcdnWsUrlPathnumConnstreamTimeoutkeepAliveudpCloak 握手和会话伪装,可直连或走 CDN 模式只有 plugin-opts.udp: true 时插件提供 UDP over stream packet 能力Cloak 服务端、强伪装场景。
shadow-tls可选 passwordhostversion: 1/2/3alpnstrict-modeskip-cert-verifyfingerprintclient-fingerprintcertificate/private-key在 SS 外层叠 ShadowTLS 伪装;host 默认取上游 host不支持插件 UDP packet需要与 ShadowTLS 插件服务端对接。
restls必填 password;可选 hostversion-hint: tls12/tls13restls-scriptfingerprint: chrome/firefox/safari/iosskip-cert-verify在 SS 外层叠 Restls 握手不支持插件 UDP packetRestls 服务端。

使用组合时按下面顺序排查:

ssr / shadowsocksr#

proxies:
  - name: ssr-node
    type: ssr
    server: example.com
    port: 8388
    cipher: aes-256-cfb
    password: secret
    obfs: tls1.2_ticket_auth
    obfs-param: example.com
    protocol: auth_sha1_v4
    protocol-param: ''

关键字段:

字段影响
cipherSSR 加密方法
password密码
obfs / obfs-param混淆方式和参数
protocol / protocol-paramSSR 协议插件
udpUDP 转发

ShadowsocksR cipher / obfs / protocol 组合#

SSR 的配置由三件事同时决定:cipher 负责加密,obfs 负责流量外观,protocol 负责 SSR 认证/分片格式。Link1 支持下表组合:

组合维度可填值用户应该怎么选
ciphernonerc4-md5aes-128-cfbaes-192-cfbaes-256-cfbaes-128-ctraes-192-ctraes-256-ctrchacha20chacha20-ietfxchacha20以服务商给出的值为准;SSR 多为旧节点,不建议自行升级 cipher。
obfsplainhttp_simplehttp_postrandom_headtls1.2_ticket_authtls1.2_ticket_fastauth以服务端为准。obfs-param 通常是伪装域名或 HTTP 头参数。
protocoloriginauth_sha1_v4auth_aes128_md5auth_aes128_sha1auth_chain_aauth_chain_b以服务端为准。protocol-param 常见格式是用户 ID/密码类参数,订阅给什么就填什么。

这些维度在配置层可以组合,但真实是否可用取决于 SSR 服务端是否也使用同一组合。SSR 排障不要只看 cipherobfsprotocol 任意一个不匹配都会表现为连接建立后无数据、很快断开或 UDP 异常。

shadowtls#

proxies:
  - name: shadowtls-node
    type: shadowtls
    server: example.com
    port: 443
    password: secret
    version: 3
    sni: www.example.com

关键字段:

字段影响
passwordShadowTLS 密码,必填
versionShadowTLS 版本
sni / servername伪装 TLS 域名
certificate / private-key同时配置时作为证书材料
dialer-proxy可组合前置代理;设置后部分 socket 字段不可用

QUIC / 高性能代理协议#

这一组协议主要跑在 QUIC/UDP 上。它们通常对移动网络、丢包和 UDP 业务更友好,但前提是本地网络、运营商、路由器和上游都允许 UDP。遇到“TCP 网站能打开,视频/游戏/QUIC 不通”,优先检查 udp、防火墙和上游 UDP 支持。

带宽字段 up/down 是协议调度和拥塞控制的重要输入,不是简单展示文字;写得过高可能导致丢包,写得过低可能限制吞吐。

tuic#

proxies:
  - name: tuic-node
    type: tuic
    server: example.com
    port: 443
    uuid: 00000000-0000-0000-0000-000000000000
    password: secret
    udp: true
    udp-relay-mode: native
    congestion-controller: bbr
    reduce-rtt: true

关键字段:

字段影响
uuid / passwordTUIC 认证
udp-relay-modeUDP 转发模式,如 native / quic
congestion-controller拥塞控制:cubicnew_renobbrbrutal
reduce-rtt减少握手 RTT
request-timeout请求超时
heartbeat-interval心跳间隔
disable-sni禁用 SNI
max-udp-relay-packet-sizeUDP relay 包大小上限
bbr-profilecongestion-controller: bbr 时选择 BBR 参数档,支持 standardconservativeaggressive;不写控制器但写了 bbr-profile 时会默认启用 BBR。

hysteria#

proxies:
  - name: hy1-node
    type: hysteria
    server: example.com
    port: 443
    auth-str: secret
    protocol: udp
    up: 50 Mbps
    down: 200 Mbps
    sni: example.com

关键字段:

字段影响
auth / auth-strHysteria v1 认证
protocoludpwechat-video
up / down带宽提示,影响拥塞/速率策略
obfs / obfs-password混淆
ports / hop-interval端口跳跃
recv-window / recv-window-connQUIC 窗口

faketcp 属于 Linux raw-socket 相关能力,Spark 不提供该非全平台协议特性。

hysteria2 / hy2#

proxies:
  - name: hy2-node
    type: hysteria2
    server: example.com
    port: 443
    password: secret
    obfs: salamander
    obfs-password: obfs-pass
    sni: example.com
    skip-cert-verify: false
    up: 50 Mbps
    down: 200 Mbps

关键字段:

字段影响
passwordHysteria2 密码
obfs: salamander / obfs-passwordSalamander 混淆
sni / servernameTLS SNI
up / down带宽提示
ports / hop-interval端口跳跃
skip-cert-verify证书校验
bbr-profilecongestion-controller: bbr 时选择 BBR 参数档,支持 standardconservativeaggressive
realm-optsRealm 转发配置,用于通过 realm server / STUN 协助转发 Hysteria2。

Hysteria2 的可选混淆组合很少,支持下面两种写法:

字段组合可填值实际影响
不配置混淆不写 obfs / obfs-password直接使用 Hysteria2 QUIC/TLS 流量。
Salamander 混淆obfs: salamander + obfs-password: <secret>QUIC 包外观会经过 Salamander 混淆;只填 obfs-password 或只填 obfs 都会被拒绝。

realm-opts 适合服务端不直接暴露常规端口、需要通过 realm server/STUN 协调转发的场景。配置后必须提供 server-urltokenrealm-id 和至少一个 stun-servers;不能和 ports 端口跳跃同时使用。realm-opts.proxy 表示访问 realm 控制面时使用的出口,不等同于节点自己的 dialer-proxy

realm-opts:
  enable: true
  server-url: https://realm.example
  token: xxxxx
  realm-id: hy2-realm
  stun-servers:
    - stun.example:3478
  sni: realm.example
  proxy: PROXY

cipherprotocolnetworkplugin 等旧协议字段不属于 Hysteria2;如果从别的订阅格式转换过来看到这些字段,通常会被忽略或校验拒绝。

juicity#

proxies:
  - name: juicity-node
    type: juicity
    server: example.com
    port: 443
    uuid: 00000000-0000-0000-0000-000000000000
    password: secret
    sni: example.com
    congestion-controller: bbr

关键字段:uuidpasswordsniskip-cert-verifycongestion-controllerudp

naive#

proxies:
  - name: naive-node
    type: naive
    server: example.com
    port: 443
    username: alice
    password: secret
    tls: true

NaiveProxy 使用 HTTP/2/HTTP/3 风格的上游代理。关键字段:usernamepasswordtlsskip-cert-verifyservernamealpn

其他代理协议#

这一组协议各自有独立服务端生态。它们不像 VMess/VLESS 那样共享大量传输字段,因此最重要的是按服务端文档逐项对应:版本、密码/密钥、混淆、mask、padding、UDP 策略都必须匹配。

snell#

proxies:
  - name: snell-node
    type: snell
    server: example.com
    port: 443
    psk: secret
    version: 3
    udp: true
    obfs-opts:
      mode: tls
      host: www.example.com

关键字段:

字段影响
pskSnell 密钥
version1/2/3/4/5
udpSnell v3/v4/v5 支持 UDP over TCP
reuse当前显式不支持;reuse: true 会报错,默认等价于 false
obfs-optsSnell 混淆配置

Snell 支持的版本/混淆组合:

字段组合可填值实际影响
version12345;不写默认为 1版本必须与服务端一致;5 按 v4-compatible client 处理;udp: true 允许 version: 3/4/5
不配置混淆不写 obfs-optsobfs-opts.mode 为空直接运行 Snell 协议。
HTTP 混淆obfs-opts.mode: http,可选 obfs-opts.host首包伪装成 HTTP 请求;host 不写时由实现使用默认值。
TLS 混淆obfs-opts.mode: tls,可选 obfs-opts.host首包伪装成 TLS 形态;必须与服务端配置一致。

network 按 TCP 行为处理;Snell 不是通用 WebSocket/TLS 传输协议,不支持 ws-optsgrpc-opts 等传输子配置。

gost-relay#

proxies:
  - name: relay-node
    type: gost-relay
    server: relay.example.com
    port: 8420
    username: user
    password: pass
    dialer-proxy: DIRECT

gost-relay 是 GOST relay v1 的轻量 TCP 出站实现。Link1 先连接 server:port,发送 relay CONNECT 请求,再把后续 TCP 流量转发给目标地址。它适合把 GOST relay 服务端作为链式跳板,或者作为其他出站的 dialer-proxy 使用。

关键字段:

字段影响
server / portGOST relay 服务端地址。
username / password可选 relay 用户认证,单字段最长 255 字节。
dialer-proxy可选前置出站;连接 relay 服务端时先通过指定节点。
interface-name / routing-mark / tfo控制连接 relay 服务端这一段的底层 TCP 拨号。

首版限制:只支持 TCP CONNECT;udp: truetls: truenetwork: udp 会在配置编译期报错。GOST relay 的 TLS/mTLS、mux、UDP forward/associate 不在本阶段实现范围内。

anytls#

proxies:
  - name: anytls-node
    type: anytls
    server: example.com
    port: 443
    password: secret
    sni: example.com

关键字段:passwordsni/servernameskip-cert-verifyudpalpnclient-fingerprint

brook#

proxies:
  - name: brook-node
    type: brook
    server: example.com
    port: 443
    password: secret
    network: ws
    ws-opts:
      path: /ws
    tls: true

关键字段:

字段影响
passwordBrook 密码
networktcpwsquic 等受实现校验
without-brook-protocol部分 WS/WSS/QUIC 模式兼容字段
fragmentBrook WSS server fragment 配置
http-mask*HTTP mask 兼容字段
udp-over-tcp仅特定 Brook server transport 支持

mieru#

proxies:
  - name: mieru-node
    type: mieru
    server: example.com
    port: 443
    username: alice
    password: secret
    transport: TCP

关键字段:usernamepasswordserverporttransportmultiplexinghandshake-mode

trusttunnel#

proxies:
  - name: trust-node
    type: trusttunnel
    server: example.com
    port: 443
    username: alice
    password: secret
    alpn: [h2]
    udp: true
    udp-over-stream: true

关键字段:

字段影响
username / password可选认证;有密码时需要用户名
alpn必须包含 h2
udp-over-streamUDP over stream
udp-relay-mode只允许 native
congestion-controllercubicnew_renobbr
certificate / private-key成对配置

sudoku#

proxies:
  - name: sudoku-node
    type: sudoku
    server: example.com
    port: 443
    password: secret
    aead-method: chacha20-poly1305
    udp: true
    sudoku-udp-policy: uot
    padding-min: 1
    padding-max: 8

关键字段:

字段影响
password / key至少一个用于认证/密钥
aead-methodchacha20-poly1305aes-128-gcmnone
padding-min / padding-maxpadding 范围,0-100
table-typeprefer_asciiprefer_entropy
custom-table / custom-tables需配合 table-type=prefer_entropy
http-mask / httpmaskHTTP mask 开关/兼容配置
http-mask-modelegacystreampollauto
http-mask-host / path-rootHTTP mask 目标表现
http-mask-multiplexoffautoon
sudoku-udp-policyrejectdirectuot

Sudoku 支持的安全/混淆组合:

组合维度可填值实际影响
aead-methodchacha20-poly1305aes-128-gcmnone;不写使用默认加密数据帧。none 只允许在 enable-pure-downlink: true 的特殊纯下行场景使用。
paddingpadding-min / padding-max0100,且 max 不能小于 min改变包长分布;两端不一致会影响兼容。
tabletable-type: prefer_asciiprefer_entropy;自定义表需 prefer_entropy控制数据变换表。自定义表必须是 8 个字符,且 x=2,p=2,v=4
HTTP maskhttp-mask: truehttp-mask-mode: legacy/stream/poll/auto,可配 http-mask-hostpath-roothttp-mask-tls让 Sudoku 流量外观更像 HTTP;相关字段必须在 http-mask: true 时才有意义。
HTTP mask multiplexhttp-mask-multiplex: off/auto/on控制 HTTP mask 下的多路复用;不启用 HTTP mask 时不能单独配置。
UDP 策略sudoku-udp-policy: reject/direct/uotreject 拒绝 UDP;direct 直连 UDP;uot 使用 UDP-over-TCP 思路承载。

Sudoku 目前只实现 TCP 出站网络;如果配置 network,只能是 tcp 或留空。

L3 隧道与组网协议#

L3 隧道与普通代理最大的区别是:它们得到的是一条“虚拟网络链路”,而不只是一个 CONNECT/SOCKS 转发。DNS、路由、MTU、隧道地址、allowed routes 都会影响能访问哪些地址。

用户要特别区分两层路由:

wireguard / wg#

proxies:
  - name: wg-node
    type: wireguard
    private-key: xxxxx
    ip: 172.16.0.2/32
    ipv6: 2606:4700::1/128
    mtu: 1280
    peers:
      - server: engage.cloudflareclient.com
        port: 2408
        public-key: xxxxx
        pre-shared-key: optional
        allowed-ips:
          - 0.0.0.0/0
          - ::/0

关键字段:

字段影响
private-key本端 WireGuard 私钥
ip / ipv6本端隧道地址
public-key / pre-shared-keypeer 密钥
reservedreserved bytes,部分服务商需要
allowed-ips允许路由的网段
peers多 peer 列表
mtu隧道 MTU
persistent-keepaliveNAT 保活
amnezia-wg-optionAmneziaWG 扩展
dns / remote-dns-resolve远端 DNS 相关

WireGuard DNS 与 allowed-ips#

allowed-ips 是 WireGuard peer 的隧道路由前缀,不是 Link1 顶层规则。通常服务商给 0.0.0.0/0::/0,表示进入这个出站后的目标都允许走该 peer;如果只给企业内网前缀,则只有这些内网 IP 在隧道内可达。

dnsremote-dns-resolve 用于解决“这个域名应该在哪里解析”。VPN 类型默认 remote-dns-resolve: true:当目标仍是域名时,Link1 会优先让该 VPN runtime 使用隧道 DNS 解析。dns 可手动指定隧道 DNS;如果 runtime 没有服务端下发或配置的 DNS,开启远端解析会直接报错,不会静默回退到本地 DNS。需要复用本地/全局 DNS 时,可以显式写 remote-dns-resolve: false

masque#

proxies:
  - name: masque-node
    type: masque
    server: example.com
    port: 443
    uri: https://example.com/.well-known/masque/udp/1.1.1.1/443/
    sni: example.com
    handshake-mode: strict
    congestion-controller: bbr
    mtu: 1280

关键字段:

字段影响
uriMASQUE 目标 URI
sni / servernameTLS SNI
handshake-modestrict 或兼容模式
network默认 h3;可写 h3/http3/quich2/http2h2 走 HTTP/2 fallback,不支持 QUIC 拥塞控制相关字段。
congestion-controllerQUIC 拥塞控制:cubicnew_renobbrbrutal,仅 network=h3 生效。
bbr-profileBBR 参数档,支持 standardconservativeaggressive;只支持 network=h3,不写控制器但写它时会默认启用 BBR。
cwnd初始拥塞窗口,仅 network=h3 生效。
up / downbrutal 拥塞控制的带宽提示,仅 network=h3 生效。
dialer-proxy连接 MASQUE endpoint 时使用前置出口;设置后不能同时使用 interface-name / routing-mark
remote-dns-resolve / dns远端 DNS
mtu隧道 MTU

MASQUE DNS 与 URI#

MASQUE 的 uri 不只是普通网址,它描述了 HTTP/3 MASQUE 服务端接受 CONNECT-UDP/IP 的位置。server/port 决定连接哪个 endpoint,sni/servername 决定 TLS 握手域名,uri 决定 MASQUE 请求目标。三者可能相同,也可能由服务商分别给出。

dnsremote-dns-resolve 的含义和 WireGuard 类似:它们用于控制进入 MASQUE 隧道后的域名解析。VPN MASQUE 默认 remote-dns-resolve: true,可显式设为 false 退回本地/全局 DNS。对 WARP MASQUE 来说,provider 会把 WARP 状态中的 DNS 和 remote resolve 参数物化到生成的 MASQUE 节点。

tailscale#

proxies:
  - name: tailnet
    type: tailscale
    auth-key: tskey-xxxxx
    hostname: link1-router
    control-url: https://headscale.example.com
    exit-node: 100.64.0.10
    auto-route: true
    route-rule-set: tailnet-routes

关键字段:

字段影响
auth-key登录 Tailscale/Headscale 的 key
hostname节点名
control-url控制面 URL,Headscale 场景使用
ephemeral临时节点
accept-routes是否接受控制面下发路由,默认 true
exit-node使用指定 exit node 出口
exit-node-allow-lan-access使用 exit node 时是否保留本地 LAN 访问
remote-dns-resolve默认 true,目标域名使用 Tailscale MagicDNS / tailnet DNS 解析
auto-route默认 true,自动注入动态 RULE-SETMATCH
route-rule-set默认 $<proxy-name>,动态路由规则集名
dialer-proxyTailscale 控制面和 DERP/peer 建连使用的前置出口

route-rule-set 默认直接使用代理名加 $ 前缀。若代理名或显式规则集名包含逗号,自动注入的 RULE-SET 会按通用规则语法使用双引号包裹并转义。

Tailscale MagicDNS#

Tailscale 出站默认 remote-dns-resolve: true。当规则把一个域名目标交给该出站时,Link1 会先通过内嵌 Tailscale runtime 的 DNS manager 查询 MagicDNS / tailnet DNS,再用解析出的 tailnet IP 建立连接;如果 Tailscale DNS 没有返回地址,会报错,不会静默回退到本地 DNS。确实想复用本地或全局 DNS 时,可以显式写 remote-dns-resolve: false

全局 DNS 也可以直接引用某个 Tailscale 出站:

dns:
  nameserver-policy:
    '+.tailnet.ts.net':
      - ts://tailnet

tailscale://tailnetts://tailnet 等价,都表示“使用名为 tailnet 的 Tailscale 出站提供的 MagicDNS / tailnet DNS”。

dialer-proxy 会作用到 Tailscale 自身的系统拨号路径:控制面、DERP/relay、peer 直连建连都会优先通过指定出口。当前实现使用 Link1 裁剪后的 Tailscale fork,并把底层 WireGuard 路径接到 Link1 内部 WireGuard;目标是只保留出站所需子集,同时保留后续扩展 WireGuard 变体能力的空间。

openvpn#

OpenVPN 出站不是普通“远程代理端口”,而是完整 VPN 客户端。Link1 会先和 OpenVPN 服务端建立控制通道,完成 TLS/证书/用户名密码认证,然后创建 userspace 隧道网络,把被规则选中的连接放进这个隧道。配置 dialer-proxy 时,OpenVPN 连接 remote 的 TCP/UDP 底层通道会先通过指定出站;UDP remote 要求前置出站具备 UDP 能力。

它的数据流可以理解为:

应用连接
  -> Link1 rules 选中 ovpn-node
  -> OpenVPN userspace netstack
  -> OpenVPN 控制/数据通道
  -> VPN 服务端
  -> 企业内网或公网目标

最小示例:

proxies:
  - name: ovpn-node
    type: openvpn
    server: vpn.example.com
    port: 1194
    network: udp
    username: alice
    password: secret
    ca: ./certs/ca.crt
    certificate: ./certs/client.crt
    private-key: ./certs/client.key
    private-key-passphrase: optional-passphrase
    route-rule-set: ovpn-node-routes

多 remote 示例:

proxies:
  - name: ovpn-node
    type: openvpn
    ca: ./certs/ca.crt
    username: alice
    password: secret
    remotes:
      - server: vpn1.example.com
        port: 1194
        protocol: udp
        sni: vpn.example.com
      - server: vpn2.example.com
        port: 443
        protocol: tcp
        servername: vpn.example.com

OpenVPN 字段说明#

字段必填/默认实际影响
server / port / network没有 remotes 时必填;network 默认 UDP声明默认 remote;network 只允许 UDP/TCP 及其兼容写法。
remotes[]可选多个 OpenVPN remote 候选。Link1 会按状态选择/切换 remote。
remotes[].server / port / protocolremote 内必填单个 remote 的地址、端口和传输协议。
remotes[].sni / servername可选单个 remote 的 TLS 名称,优先使用 sni
username / password视服务端而定用户密码认证。
ca通常必填校验 OpenVPN 服务端证书;如果不写 ca,必须显式 skip-cert-verify: true
certificate / private-key成对配置客户端证书认证;只写一个会被拒绝。
private-key-passphrase可选加密私钥的密码。
auth可选OpenVPN auth digest。
cipher / data-ciphers可选数据通道加密算法;支持 AES-128-GCMAES-192-GCMAES-256-GCMCHACHA20-POLY1305,以及传统 AES-128-CBC/AES-256-CBCAES-CBC 会按 AES-128-CBC 处理,data-ciphers 是候选列表。
tls-auth / tls-crypt / tls-crypt-v2互斥OpenVPN TLS 控制通道保护;三者只能选一个。
key-direction配合 tls-auth只能是 01bidirectional,且必须配合 tls-auth
ip / ipv6可选手动指定本端隧道地址;服务端 push ifconfig 时可由服务端下发。
dns可选手动指定 VPN DNS 服务器 IP;服务端 push DNS 时会被 push 结果覆盖。
remote-dns-resolve默认 true目标域名由 OpenVPN runtime 使用 pushed/configured VPN DNS 解析;显式 false 时改用本地/全局 DNS。
mtu可选隧道 MTU;服务端 push tun-mtu 时也可能更新。
request-timeout默认 30sOpenVPN 握手超时,单位毫秒。
ping-interval / ping-timeout默认 10s / 60skeepalive 与断线检测;服务端 push 也可覆盖。
reneg-sec默认 3600sTLS 重协商间隔。
route-rule-set默认 $<proxy-name>暴露一个动态规则集,用于匹配 VPN 服务端 push 的路由前缀。
auto-route默认 true自动把 RULE-SET,<route-rule-set>,<proxy-name> 插入到 MATCH 前。
interface-name / routing-mark可选OpenVPN 连接服务端这一段的底层出口控制。

route-rule-set 默认直接使用代理名加 $ 前缀。若代理名或显式规则集名包含逗号,自动注入的 RULE-SET 会按通用规则语法使用双引号包裹并转义。

不支持的常见字段:

OpenVPN DNS 是怎么工作的#

OpenVPN DNS 有三层来源,优先级从高到低:

  1. 服务端 push 的 DNS:OpenVPN 服务端可能在 PUSH_REPLY 中下发 dhcp-option DNS 10.8.0.1。Link1 会记录到 OpenVPN runtime snapshot 中。
  1. 节点里的 dns 字段:如果服务端不 push DNS,你可以手动写 dns: [10.8.0.1]
  1. 全局 Link1 DNS:当 remote-dns-resolve: false,或某次 DNS 查询不是某个出站拨号目标的一部分时,普通 DNS 仍按 dns.nameservernameserver-policy 等全局配置执行。

OpenVPN 默认 remote-dns-resolve: true。被规则选中并进入 OpenVPN 出站的域名目标,会由 OpenVPN runtime 使用 pushed/configured DNS 解析;如果没有可用 VPN DNS,会报错而不是回退本地 DNS。

如果需要让全局 DNS 策略中的某些企业域名也显式调用 OpenVPN 内部 DNS,可以在 dns.nameserver-policyopenvpn://<节点名>

dns:
  enable: true
  nameserver:
    - https://223.5.5.5/dns-query
  nameserver-policy:
    '+.corp.example.com':
      - openvpn://ovpn-node
    '+.internal.example.com':
      - openvpn://ovpn-node

含义:

openvpn://ovpn-noderemote-dns-resolve 使用同一类远端 DNS 能力,但入口不同:前者是全局 DNS policy 的 nameserver,后者是 OpenVPN 出站拨目标域名时的解析策略。

OpenVPN 路由是怎么工作的#

OpenVPN 服务端可能 push 路由,例如 route 10.0.0.0 255.0.0.0 或 IPv6 route。Link1 会把这些前缀记录到该节点的 runtime snapshot。

route-rule-set 会把这些前缀暴露成一个动态规则集:

proxies:
  - name: ovpn-node
    type: openvpn
    server: vpn.example.com
    port: 1194
    ca: ./certs/ca.crt
    route-rule-set: corp-vpn-routes
    auto-route: true

rules:
  - DOMAIN-SUFFIX,corp.example.com,ovpn-node
  - MATCH,PROXY

auto-route: true 时,Link1 会自动把类似下面的规则插入到 MATCH 前:

rules:
  - RULE-SET,corp-vpn-routes,ovpn-node
  - MATCH,PROXY

注意:OpenVPN 动态 route rule-set 主要匹配服务端 push 的 IP 前缀;企业域名仍建议通过 dns.nameserver-policy 指到 openvpn://ovpn-node,解析出企业内网 IP 后再让路由规则命中。

常见 OpenVPN 问题#

现象常见原因处理
配置编译报 ca is empty没有 CA 且未跳过证书校验配置 ca,或测试时显式 skip-cert-verify: true
certificate and private-key must be configured together客户端证书和私钥只写了一个两个都写,或两个都不写
企业域名解析失败没有 pushed/configured VPN DNS,或显式关闭了远端解析配置 dns、检查服务端 push,或确认是否需要 remote-dns-resolve: false
内网 IP 不走 VPN服务端未 push 路由,或 auto-route=false检查 OpenVPN snapshot routes 和 route-rule-set
UDP remote 不通网络阻断 UDP改用 TCP remote 或检查防火墙

WARP provider#

WARP 是 Cloudflare 的动态出口能力。Link1 不把它设计成 proxies[].type=warp,而是设计成 proxy-providers.type=warp。原因是:WARP 不是一个固定 leaf 节点,而是一个会生成节点的“节点来源”。

为什么必须是 provider:

  1. 一个 WARP 配置可能生成多个出口:同一个 WARP 状态可以物化出 wireguardmasque 两类节点。
  1. auto 模式需要持久状态:账号、密钥、endpoint、reserved bytes、MASQUE 参数等需要被管理和复用。
  1. 它天然适合策略组选择:provider 生成的节点可以进入 selecturl-testfallback 等策略组,由用户或健康检查选择。
  1. 它不是订阅下载:WARP provider 不使用 urlpathformatproxy 这些订阅字段;它从 WARP 状态构建本地节点。
  1. 避免配置歧义:如果允许 proxies[].type=warp,用户会误以为它像普通协议一样只有一个固定 server/port;实际 WARP 需要先决定 transport 和状态来源。

最常见写法:

proxy-providers:
  warp:
    type: warp
    mode: auto
    transports:
      - masque
      - wireguard

proxy-groups:
  - name: WARP
    type: select
    use: [warp]
    proxies:
      - DIRECT

rules:
  - MATCH,WARP

这份配置的含义:

WARP auto 模式字段#

字段默认/限制实际影响
type必须是 warp声明这是 WARP provider。
mode默认 auto自动加载/生成 WARP 状态。
transports默认 masque + wireguard希望物化哪些候选;只支持 masquewireguard
license-keymode=auto 支持使用指定 WARP license。manual 模式写它会被拒绝。
endpoint-host / endpoint-portauto 使用默认 endpoint指定 WARP endpoint。
mtu默认 WARP MTU影响生成的隧道 MTU。
persistent-keepalive默认 WARP keepaliveWireGuard NAT 保活。
dialer-proxy可选传递给生成出的 WireGuard/MASQUE 节点,让这些节点连接 WARP endpoint 时使用前置出口。

不再支持的 discovery 字段:probe-timeoutcountwg-candidatesmasque-candidates。这些字段属于旧的 discovery 设计,写入配置会被拒绝。

WARP manual 模式字段#

manual 模式适合你已经有完整 WARP 参数,不希望 Link1 自动生成状态。

proxy-providers:
  warp-manual:
    type: warp
    mode: manual
    transports: [wireguard, masque]
    wireguard:
      private-key: xxxxx
      public-key: xxxxx
      ip: 172.16.0.2
      ipv6: 2606:4700::1
      reserved:
        bytes: [0, 0, 0]
      server: engage.cloudflareclient.com
      port: 2408
      allowed-ips:
        - 0.0.0.0/0
        - ::/0
      mtu: 1280
      persistent-keepalive: 25
    masque:
      private-key: xxxxx
      public-key: xxxxx
      ip: 172.16.0.2
      ipv6: 2606:4700::1
      server: masque.cloudflareclient.com
      port: 443
      uri: https://masque.cloudflareclient.com/
      sni: masque.cloudflareclient.com
      dns:
        - 1.1.1.1
      remote-dns-resolve: true
      mtu: 1280
      congestion-controller: bbr
子块字段实际影响
wireguardprivate-keypublic-keyWARP/WireGuard 本端私钥和 peer 公钥。
wireguardipipv6本端隧道地址;至少要有一个。
wireguardreserved.bytesWARP reserved bytes,某些账号必需。
wireguardserverportWARP WireGuard endpoint。
wireguardallowed-ips进入隧道的允许前缀;不写时默认 IPv4 全局,带 IPv6 时也包含 ::/0
wireguardmtupersistent-keepaliveMTU 和 NAT 保活。
masqueprivate-keypublic-keyipipv6MASQUE 账号和隧道地址。
masqueserverporturisniMASQUE HTTP/3 endpoint 和 TLS 名称。
masquednsremote-dns-resolveMASQUE 内 DNS 和远端解析行为。
masqueskip-cert-verify跳过 MASQUE endpoint 证书校验,不建议生产使用。
masquemtucongestion-controllercwndupdownQUIC/隧道性能参数。

manual 模式规则:

provider 生成的节点是什么#

WARP provider 最终会生成普通 Link1 出站节点:

WARP transport生成的 leaf type用户看到的行为
wireguardwireguard像普通 WireGuard 隧道一样转发。
masquemasque像 MASQUE/HTTP3 隧道一样转发,默认开启 UDP。

因此后续策略组、规则、健康检查都面对这些生成后的节点,而不是直接面对 warp。这也是 warp 必须放在 provider 的根本原因。

WARP 常见问题#

现象常见原因处理
proxies[].type=warp 被拒绝WARP 不允许作为 leaf改写为 proxy-providers.<name>.type: warp
provider 没生成节点auto 状态为空或指定 transport 没有可用状态看 App Provider 页面和日志,确认 WARP 状态是否生成
写了 url/path/format 被拒绝WARP provider 不是订阅 provider删除这些字段
manual 模式报缺少 wireguard/masquetransports 里启用了对应 transport补齐对应子块或从 transports 删除
MASQUE 不通、WireGuard 可用本地或网络限制 HTTP/3/QUIC在策略组中切到 WireGuard,或检查 UDP/QUIC
WireGuard 不通、MASQUE 可用WireGuard endpoint/UDP 被阻断使用 MASQUE transport 或检查 endpoint/UDP

企业 VPN 协议#

企业 VPN 协议依赖目标服务端版本、登录策略、验证码、设备绑定和企业安全策略。它们更像“把企业 VPN 作为 Link1 出口”,不是普通机场订阅节点。

企业 VPN 通常会返回两类动态信息:

因此这类协议经常和 dns.nameserver-policyroute-rule-set、策略组一起使用,而不是把所有流量无脑交给企业 VPN。

atrust#

proxies:
  - name: atrust-node
    type: atrust
    server: vpn.example.com
    username: alice
    password: secret
    auth-type: auth/psw
    remote-dns-resolve: true
    route-rule-set: corp-routes

关键字段:

字段影响
serverATrust 服务地址
username / password登录凭据
auth-typeauth/pswauth/casauth/smsCheckCode
phone / code / cas-ticket对应认证方式参数
remote-dns-resolve默认 true,目标域名使用 VPN DNS 远端解析
session-persist会话持久化
route-rule-set默认 $<proxy-name>,企业路由规则集名
request-timeout登录/请求超时

限制:不支持普通代理的 TLS/QUIC/network 等字段;dialer-proxy 会同时作用于登录控制面和企业隧道底层连接。

feilian#

proxies:
  - name: feilian-node
    type: feilian
    server: vpn.example.com
    company-name: example
    username: alice
    password: secret
    vpn-select-strategy: default
    remote-dns-resolve: true

关键字段:

字段影响
company-name / server至少一个用于定位企业
username / password登录凭据
vpn-server-name指定 VPN 网关
vpn-select-strategy网关选择策略
remote-dns-resolve默认 true,目标域名使用 VPN DNS 远端解析
session-persist会话持久化
dialer-proxy飞连控制面、VPN ping/connect 请求和 WireGuard underlay 都使用指定前置出口;UDP 模式要求前置出口支持 UDP。

easyconnect#

proxies:
  - name: easyconnect-node
    type: easyconnect
    server: vpn.example.com
    port: 443
    username: alice
    password: secret
    remote-dns-resolve: true

关键字段:

字段影响
server / portEasyConnect 服务地址
username / password登录凭据
remote-dns-resolve默认 true,目标域名使用 VPN DNS 远端解析
auto-setup-routes自动设置 VPN 路由
route-rule-set默认 $<proxy-name>,企业路由规则集名
request-timeout请求超时

企业 VPN 动态 route-rule-set 的自动注入同样遵循通用规则语法;代理名或规则集名包含逗号时,会自动 quote 对应字段。

限制:不支持普通代理的 TLS、QUIC、network 等字段;dialer-proxy 会同时作用于登录控制面和隧道数据连接。

入站协议监听器#

虽然本章主要讲出站,但 Link1 也能作为部分协议服务端。

VLESS listener#

listeners:
  - name: vless-in
    type: vless
    listen: 0.0.0.0
    port: 443
    certificate: ./certs/server.crt
    private-key: ./certs/server.key
    users:
      - username: alice
        uuid: 00000000-0000-0000-0000-000000000000
        flow: xtls-rprx-vision
    ws-path: /ws
    proxy: PROXY

关键字段:usersuuidcertificateprivate-keyws-pathgrpc-service-namedecryptionreality-configproxy

Hysteria2 listener#

listeners:
  - name: hy2-in
    type: hysteria2
    listen: 0.0.0.0
    port: 443
    certificate: ./certs/server.crt
    private-key: ./certs/server.key
    users:
      alice: password1
      bob: password2
    up: 100 Mbps
    down: 500 Mbps
    obfs: salamander
    obfs-password: secret
    alpn: [h3]
    masquerade: https://www.example.com
    proxy: PROXY

关键字段:userscertificateprivate-keyupdownobfsobfs-passwordmax-idle-timealpnignore-client-bandwidthmasqueradeproxy

协议选择建议#

场景建议
第一次验证directsocks5
普通远程代理hysteria2tuicvlesstrojanss
UDP/游戏/移动网络优先 hysteria2tuicwireguardmasque
企业内网访问openvpntailscaleatrustfeilianeasyconnect
路由器透明代理支持 UDP 的协议 + DNS/Fake-IP/TUN
需要 WARP 出口proxy-providers.type=warp

兼容边界#