跳转至

Shadowsocks 完整协议支持

WutherCore 的 Shadowsocks 客户端与服务端统一使用 shadowsocks-rust 1.24.0。TCP、UDP、经典流加密、AEAD、扩展 AEAD、Shadowsocks 2022(SIP022)以及 EIH 多用户验证共享同一套上游协议实现和重放保护。

客户端

节点可以来自 ss:// SIP002 URI、订阅或手工节点。URI 查询参数支持 SIP003:

ss://BASE64(method:password)@server.example:8388/?plugin=v2ray-plugin%3Btls%3Bhost%3Dcdn.example&plugin-mode=tcp_only#example
  • plugin:插件可执行文件;分号后的内容作为插件选项。
  • plugin-opts / plugin_opts:独立插件选项,优先于内联选项。
  • plugin-args / plugin_args:JSON 字符串数组(或单个参数),作为独立命令行参数传给插件。
  • plugin-mode / plugin_modetcp_onlyudp_onlytcp_and_udp

插件按 SIP003 环境变量规范作为受管子进程启动,首次连接会等待插件就绪。插件模式未覆盖请求的 TCP/UDP 载体时会明确报错,不会绕过插件直连。

启用的加密族包括经典 AES/Camellia/RC4/ChaCha20 流加密,AES-GCM 与 ChaCha20-IETF-Poly1305,AES-CCM、AES-GCM-SIV、XChaCha20、SM4 扩展 AEAD,以及全部 BLAKE3 Shadowsocks 2022 方法。具体名称以 shadowsocks-rust 1.24.0 接受的标准名称为准。2022 密码必须是长度匹配的 Base64;EIH 客户端身份链使用 SIP022 的冒号分隔格式。

服务端

listen.shadowsocks 接受单个对象或数组:

version: 1
profile: server

listen:
  panel: false
  shadowsocks:
    - tag: ss-classic
      address: 0.0.0.0
      port: 8388
      method: aes-256-gcm
      password: replace-with-a-strong-password
      mode: tcp_and_udp
      handshake-timeout: 10s
      udp-timeout: 5m
      max-connections: 4096
      max-udp-associations: 4096

    - tag: ss-sip003
      address: 0.0.0.0
      port: 8443
      method: aes-256-gcm
      password: replace-with-a-strong-password
      mode: tcp_only
      plugin: v2ray-plugin
      plugin-opts: server;tls;host=cdn.example
      plugin-args: [--loglevel, warning]
      plugin-mode: tcp_only
      plugin-startup-timeout: 10s

    - tag: ss-2022-eih
      address: 0.0.0.0
      port: 8390
      method: 2022-blake3-aes-128-gcm
      password: MDEyMzQ1Njc4OWFiY2RlZg==
      mode: tcp_and_udp
      users:
        - name: alice
          key: YWJjZGVmZ2hpamtsbW5vcA==
字段 默认值 含义
enabled true 是否启动
address / host 127.0.0.1 监听 IP
port 必填 TCP/UDP 端口,不能为 0
method 必填 标准 Shadowsocks 方法名
password 必填 密码或 2022 Base64 PSK/EIH 密钥链
mode tcp_and_udp tcp_onlyudp_onlytcp_and_udp
plugin 未启用 SIP003 服务端插件可执行文件
plugin-opts / plugin_opts 未设置 传入 SS_PLUGIN_OPTIONS 的插件选项
plugin-args / plugin_args [] 直接传给插件进程的独立命令行参数
plugin-mode / plugin_mode 继承 mode 插件载体模式;必须与监听模式一致
plugin-startup-timeout / plugin_startup_timeout 10s 受管插件和内部回环监听的启动上限
users [] 仅 SIP022 EIH 使用的用户名称与 Base64 密钥
handshake-timeout 10s TCP 认证及目标头读取上限
udp-timeout 5m UDP 关联空闲回收时间
max-connections 4096 单监听 TCP 并发上限
max-udp-associations 4096 单监听 UDP 关联上限
tag 自动生成 路由与观测标签,必须唯一

未知字段会被拒绝。启动前会验证方法、密码/PSK、EIH 用户 Base64 与精确密钥长度、空或重复用户名、模式、插件字段依赖关系、插件/监听载体一致性、标签及按传输层区分的端口冲突。启用 SIP003 时,插件按服务端模式监听公开地址,Shadowsocks 解密服务只绑定插件分配的回环地址;插件进程由监听句柄托管并随关闭一并终止。tcp_and_udp 会先完成两个内部 socket 的预绑定再启动任务,任一绑定失败都会整体回滚。

运行与安全语义

  • TCP 在解密并认证目标头后才进入统一入站路由。
  • UDP 按客户端地址、SIP022 会话 ID 和目标地址隔离关联,并保留真实响应源地址。
  • 监听级共享上下文让重放检测跨 TCP 连接和 UDP 数据包生效。
  • 无效密文、错误密码、未知 EIH 用户及重放包会在进入路由前拒绝。
  • TCP 连接、UDP 关联、单关联队列和空闲时间都有界;关闭会取消全部子任务。
  • 客户端 UDP 复用运行时已施加 VPN protect、接口/mark 绑定和回环登记的原始 socket;独立密文缓冲保证较小的调用方明文缓冲不会被加密开销挤爆。
  • mesh 预检会按模式分别声明 TCP/UDP 独占监听资源。

Rust 版本

shadowsocks-rust 1.24.0 的 MSRV 为 Rust 1.88,本项目工作区的 rust-version 因此同步提升为 1.88;CI 与发布流程使用满足该下限的 stable 工具链。