3 个版本

0.1.2 2023年9月7日
0.1.1 2023年3月27日
0.1.0 2023年2月25日

#1585 in 网络编程

MIT 许可证

430KB
10K SLoC

shoes

shoes 是用 Rust 编写的多协议代理服务器。

支持的协议

  • HTTP/HTTPS (TCP, QUIC)
  • SOCKS5 (TCP, QUIC)
  • Vmess (TCP, QUIC, UDP-over-TCP)
    • AEAD 和 Legacy 模式
    • 支持的加密算法
      • aes-128-gcm
      • chacha20-poly1305
  • Vless (TCP, QUIC)
  • Snell v3 (TCP, QUIC, UDP-over-TCP)
    • 支持的加密算法
      • aes-128-gcm
      • aes-256-gcm
      • chacha20-ietf-poly1305
  • Shadowsocks (TCP, QUIC)
    • 支持的加密算法
      • aes-128-gcm
      • aes-256-gcm
      • chacha20-ietf-poly1305
      • 2022-blake3-aes-128-gcm
      • 2022-blake3-aes-256-gcm
      • 2022-blake3-chacha20-ietf-poly1305
  • Trojan (TCP, QUIC)
    • 支持的加密算法
      • aes-128-gcm
      • aes-256-gcm
      • chacha20-ietf-poly1305

功能

所有支持的协议都可以与以下功能结合使用

  • TLS 支持 基于 SNI 的转发
  • Websocket 隐藏 (Shadowsocks SIP003)
  • 上游代理支持:通过其他代理服务器路由连接
  • 转发规则(允许列表/阻止列表):根据 IP 或主机名阻止或重定向连接
  • 热重载:更新的配置将自动重新加载
  • 子网掩码和代理组

示例

以下是一个运行 WSS vmess 和 shadowsocks 服务器,所有请求都通过 SOCKS 代理路由的示例

# Listen on all IPv4 interfaces, port 443 (HTTPS)
- address: 0.0.0.0:443
  transport: tcp
  # Use TLS as the first protocol layer
  protocol:
    type: tls
    # Set a default target, for any (or no) SNI
    default_target:
      cert: cert.pem
      key: key.pem
      # ..which goes to a websocket server
      protocol:
        type: ws
        # .. where we have different supported proxy protocols, based on HTTP request path and headers.
        targets:
          - matching_path: /vmess
            matching_headers:
              X-Secret-Key: "secret"
            protocol:
              type: vmess
              # allow any cipher, which means: none, aes-128-gcm, or chacha20-poly1305.
              cipher: any
              user_id: b0e80a62-8a51-47f0-91f1-f0f7faf8d9d4
          - matching_path: /shadowsocks
            protocol:
              type: shadowsocks
              cipher: 2022-blake3-aes-256-gcm
              password: Hax8btYlNao5qcaN/l/NUl9JgbwapfqG5QyAtH+aKPg=
  rules:
    # Allow clients to connect to all IPs
    - mask: 0.0.0.0/0
      action: allow
      # Forward all requests through a local SOCKS server.
      client_proxy:
        address: 127.0.0.1:5000
        protocol:
          type: socks
          username: socksuser
          password: secretpass

有关其他 YAML 配置示例,请参阅 示例目录

安装

GitHub 发布 上提供 x86_64 和 Apple aarch64 的预编译二进制文件。

否则,如果您系统上安装了较新的 Rust 和 cargo,可以使用 cargo 安装 shoes。

cargo install shoes

使用方法

shoes [OPTIONS] <YAML CONFIG PATH> [YAML CONFIG PATH] [..]

OPTIONS:

    -t, --threads NUM
        Set the number of worker threads. This usually defaults to the number of CPUs.

    -d, --dry-run
        Parse the config and exit.

配置格式

抱歉,尚未编写 YAML 配置格式的正式文档。您可以参考 示例,或者如果您需要帮助,可以打开一个问题。

路线图

  • 代理客户端链式连接
  • SOCKS 和 Shadowsocks UDP 支持

类似项目

依赖项

~22–38MB
~645K SLoC