Skip to content

Repository files navigation

Snell 一键脚本 & Docker 镜像

Stars Forks Pull Requests Docker Pulls License

一键安装与管理 Snell v4 / v5 / v6,支持 ShadowTLS v3、多用户与 BBR, 并提供启动即输出客户端配置的多架构 Docker 镜像。

中文 | English | 作者网站


快速开始

三步拿到一个可用节点,第 ④ 步(ShadowTLS 伪装)可选。详细说明见 使用方法。

① 安装 —— 三选一

方式 A:脚本安装(自动识别 Debian / Ubuntu / CentOS / Alpine ≤ 3.18)

sh -c "$(curl -fsSL https://install.jinqians.com)"

方式 B:docker run

docker run -d --name snell-server --restart unless-stopped \
  -p 6160:6160/tcp -p 6160:6160/udp \
  -e SNELL_VER=v5 -e SNELL_PORT=6160 \
  -v ./snell-config:/etc/snell \
  jinqians/snell-server:v5

方式 C:docker compose —— 新建 compose.yml:

services:
  snell:
    image: jinqians/snell-server:v5
    container_name: snell-server
    restart: unless-stopped
    ports:
      - "6160:6160/tcp"
      - "6160:6160/udp"
    environment:
      - SNELL_VER=v5
      - SNELL_PORT=6160
    volumes:
      - ./snell-config:/etc/snell
docker compose up -d

💡 上面的示例装的是 v5。如果要装 Snell v6,配置方式有变化: v6 新增了两个必须关注的参数 —— mode(加密模式,客户端必须与服务端一致) 和 dns-ip-preference(DNS 解析地址族偏好)。

  • 脚本安装:选择 v6 后脚本会逐项交互询问这两个参数,并列出每个取值的适用场景,回车即用推荐值
  • Docker:通过 -e SNELL_MODE=... 和 -e SNELL_DNS_IP_PREFERENCE=... 设置, 镜像标签要用 :v6 且 SNELL_VER=v6 → 部署 Snell v6

取值含义、选型建议与推荐组合表 → Snell v6 专属参数

② 获取配置 —— 三种装法都会直接输出 Surge 格式配置,复制即可用

# 方式 A(脚本):进入菜单选 “3. 查看配置”
snell

# 方式 B(docker run):配置已打印在容器日志里
docker logs snell-server

# 方式 C(docker compose):
docker compose logs snell

③ 粘贴到 Surge

HK = snell, 1.2.3.4, 6160, psk = your_psk, version = 5, reuse = true, tfo = true

④ 需要 ShadowTLS 伪装?(可选)

套一层 TLS 伪装后,Snell 后端只在本机监听,对外只暴露 ShadowTLS 端口。 详见 ShadowTLS 说明。

展开:脚本 / docker run / docker compose 三种装法

方式 A(脚本):装完 Snell 后进入菜单选 5. ShadowTLS 管理,按提示填端口和 SNI, 脚本会自动把 Snell 改为只监听 127.0.0.1 并生成新的客户端配置。

snell        # 进入菜单 → 5. ShadowTLS 管理

方式 B(docker run):加 4 个环境变量,对外只映射 ShadowTLS 端口,不要映射 6160。

docker run -d --name snell-shadowtls --restart unless-stopped \
  -p 8443:8443/tcp \
  -e SNELL_VER=v5 -e SNELL_PORT=6160 \
  -e SNELL_LISTEN_HOST=127.0.0.1 \
  -e SHADOWTLS_ENABLE=1 \
  -e SHADOWTLS_PORT=8443 \
  -e SHADOWTLS_SNI=www.microsoft.com \
  -v ./snell-config:/etc/snell \
  jinqians/snell-server:v5

docker logs snell-shadowtls     # 首次启动的日志里有 PSK 和 ShadowTLS 密码

方式 C(docker compose):

services:
  snell-shadowtls:
    image: jinqians/snell-server:v5
    container_name: snell-shadowtls
    restart: unless-stopped
    ports:
      - "8443:8443/tcp"
    environment:
      - SNELL_VER=v5
      - SNELL_PORT=6160
      - SNELL_LISTEN_HOST=127.0.0.1
      - SHADOWTLS_ENABLE=1
      - SHADOWTLS_PORT=8443
      - SHADOWTLS_SNI=www.microsoft.com
    volumes:
      - ./snell-config:/etc/snell
docker compose up -d
docker compose logs snell-shadowtls

得到的客户端配置形如(端口填 ShadowTLS 端口,PSK 与 ShadowTLS 密码是两个不同的值):

HK = snell, 1.2.3.4, 8443, psk = your_psk, version = 5, reuse = true, tfo = true, shadow-tls-password = your_stls_password, shadow-tls-sni = www.microsoft.com, shadow-tls-version = 3
我想…… 看这里
用脚本装在 VPS 上 脚本安装
用 Docker / Docker Compose Docker 部署 | Docker Compose
找 PSK、ShadowTLS 密码、客户端配置 查看客户端配置
查 Docker 环境变量 环境变量
加 ShadowTLS 伪装 ShadowTLS
搞不清 v4 / v5 / v6 选哪个 协议介绍
安装 v6,不知道 mode 怎么选 Snell v6 专属参数 | 建议组合
用 Docker 部署 v6 部署 Snell v6
做流量限额 流量管理
Alpine 3.19+ 装不上 Alpine 版本限制
Alpine 重启后连不上 / Docker daemon 未运行 在 Alpine 上启用 Docker

目录


项目介绍

本项目提供 Snell 服务端的两种部署方式,两者可按需选用:

  • 一键脚本 —— 直接在 VPS 上安装 systemd / OpenRC 托管的 Snell,覆盖 Debian、Ubuntu、CentOS、RHEL、Alpine,附带交互式管理菜单
  • Docker 镜像 —— 多架构镜像 jinqians/snell-server,docker run 一条命令起服务,启动即在日志中输出可粘贴到 Surge 的客户端配置

主要能力:

能力 说明
Snell v4 / v5 / v6 三个版本任选,脚本与镜像均可互相切换
多版本共存 同一台机器上不同端口可以分别跑 v4 / v5 / v6,互不影响(脚本方式)
ShadowTLS v3 为 Snell 套一层 TLS 伪装,隐藏原始端口
多用户 单机多端口 / 多 PSK,独立增删改查,每个用户可单独选版本
BBR 一键开启 BBR 拥塞控制
出口控制 Snell v5 / v6 的 egress-interface 设置
自动更新 脚本内置自更新;镜像由 GitHub Actions 每周跟随上游发布
客户端配置输出 脚本与容器都会自动生成 Surge 格式配置,含国家/地区标识

流量管理、VLESS Reality、Hysteria2 等更复杂的场景,请使用同作者的 PSM(Proxy Stack Manager),本项目专注于 Snell 本身。

仓库结构(点击展开)
snell.sh            # Debian / Ubuntu 主脚本(安装、管理、更新)
snell-centos.sh     # CentOS / RHEL 脚本
snell-alpine.sh     # Alpine 3.18 脚本
snell-docker.sh     # Alpine 本地构建 Docker 方案
shadowtls.sh        # ShadowTLS v3 管理
multi-user.sh       # Snell 多用户管理
menu.sh             # 统一管理菜单(Snell / SS-2022 / ShadowTLS 等)
bbr.sh              # BBR 管理
install.sh          # 自动识别系统的安装入口
Dockerfile          # 多架构镜像构建
entrypoint.sh       # 容器入口:生成配置 + 输出客户端配置
build-docker-images.sh  # 本地批量构建镜像
surge.conf          # Surge 参考配置文件

⚠️ 根目录脚本的路径不要变动:服务端已安装的脚本通过 https://raw.githubusercontent.com/jinqians/snell.sh/main/<脚本名>.sh 自更新, *.jinqians.com 短域名也指向这些固定路径,移动文件会导致存量用户的自动更新失效。


使用方法

一、脚本安装

1. 自动识别系统(推荐入门)

脚本会检测发行版并调用对应的安装脚本:

sh -c "$(curl -fsSL https://install.jinqians.com)"

2. 多功能管理菜单(推荐 Debian / Ubuntu)

bash <(curl -L -s menu.jinqians.com)

安装后输入 menu 即可再次进入:

=== 安装管理 ===              === 卸载功能 ===          === 系统功能 ===
1. Snell 安装管理             5. 卸载 Snell             8.  更新脚本
2. SS-2022 安装管理           6. 卸载 SS-2022           9.  流量管理(转 PSM)
3. VLESS Reality 安装管理     7. 卸载 ShadowTLS         10. 中国大陆屏蔽管理
4. ShadowTLS 安装管理

选项 3(VLESS Reality)与选项 9(流量管理)已整合到 PSM,选择后会引导安装 PSM。

3. 多版本共存(v4 / v5 / v6 同机运行)

Debian / Ubuntu 脚本支持每个端口单独选版本:v4、v5、v6 的二进制分开存放, 各自的 systemd 服务指向自己的版本,互不影响。

/usr/local/bin/snell-server-v4    # v4 通道
/usr/local/bin/snell-server-v5    # v5 通道
/usr/local/bin/snell-server-v6    # v6 通道
/usr/local/bin/snell-server       # 软链,指向主用户所用的版本

每个用户的配置文件首行会记录它属于哪个通道:

#version-choice = v6
[snell-server]
listen = ::0:7000
psk = ...
mode = default

给某个端口指定版本:主菜单 7. 多用户管理 → 2. 添加新用户, 输入端口后会让你选 v4 / v5 / v6;所选版本没装过会自动下载,不会动到其他端口。

改已有端口的版本:7. 多用户管理 → 4. 修改用户配置 → 4. 修改 Snell 版本。 配置参数(v4/v5 的 ipv6 与 v6 的 mode、dns-ip-preference)会自动转换, 切换失败会自动回滚到原版本。

主菜单 8. 版本管理 提供三个动作:

动作 说明
检查并更新已安装通道 逐个通道比对上游最新版,只重启用到该通道的服务
安装一个新通道 只下载二进制,不改动任何现有用户
切换某个用户使用的通道 含主用户,等价于多用户菜单里的「修改版本」

升级已有安装:直接运行新版脚本即可,会自动把原来的单一 snell-server 迁成版本化布局并给所有配置补上版本标记,服务不中断。这个迁移是幂等的,重复运行无副作用。

客户端记得同步改:v4 写 version = 4,v5 可写 4 或 5, v6 写 version = 6 且必须带上与服务端一致的 mode。

4. 按系统单独安装

系统 命令
Debian / Ubuntu bash <(curl -L -s snell.jinqians.com)
CentOS / RHEL bash <(curl -L -s snell-centos.jinqians.com)
Alpine(Docker 本地构建) sh -c "$(curl -fsSL https://snell-docker.jinqians.com)"
Alpine 3.18 及以下(原生安装) sh -c "$(curl -fsSL https://snell-alpine.jinqians.com)"

Alpine / CentOS 脚本与 Docker 方式暂不支持单机多版本共存, 容器方式请改为按版本各起一个容器(见 Docker 部署)。

Alpine 版本限制

Snell 官方二进制依赖 glibc,而 Alpine 使用 musl,需要借助 sgerrand/alpine-pkg-glibc 兼容包。 该方案在 Alpine 3.19 起失效,因此:

Alpine 版本 原生安装(snell-alpine.jinqians.com) Docker 方案
≤ 3.18 ✅ 可用 ✅ 可用
≥ 3.19 ❌ 脚本会主动拒绝并退出 ✅ 可用(推荐)

install.jinqians.com 检测到 Alpine 时会自动走 Docker 方案(snell-docker.jinqians.com), 所以 Alpine 3.19+ 用它也能装上,只是跑在容器里而非直接跑在宿主机上。 想要纯宿主机安装又必须用 Alpine 的话,只能停留在 3.18。

在 Alpine 上启用 Docker

不走脚本、自己在 Alpine 上装 Docker 再用 docker run / docker compose 时, docker 服务必须加到 default 运行级别:

apk add docker docker-cli-compose
rc-update add docker default    # 不要加到 boot
rc-service docker start

Alpine 的 docker 服务声明依赖网络(need net),而云厂商 Alpine 镜像的网络服务在 default 运行级别。 docker 放在 boot 运行级别时依赖不满足,重启后 dockerd 不会被拉起,所有容器离线, 表现为客户端连不上、docker compose ps 报 Cannot connect to the Docker daemon。 已经这样装过的机器执行下面三行即可修复(容器配置了 restart: unless-stopped 会自动恢复):

rc-update del docker boot
rc-update add docker default
rc-service docker start

snell-docker.jinqians.com 脚本(v1.4 起)会自动做这项校正。

Snell 主脚本菜单:

1.  安装 Snell   7.  多用户管理
2.  卸载 Snell   8.  版本管理(更新 / 追加通道 / 切换通道)
3.  查看配置     9.  更新脚本
4.  重启服务     10. 查看服务状态
5.  ShadowTLS 管理  11. Snell v5/v6 出口控制设置
6.  BBR 管理     0.  退出脚本

安装完成后选择 3. 查看配置,脚本会输出带国家/地区标识的 Surge 配置,直接复制即可:

=== 配置信息 ===
已安装通道: v4 v5 v6

主用户配置:
端口: 57891
版本: Snell v5
HK = snell, 1.2.3.4, 57891, psk = xxxxxxxxxxxx, version = 4, reuse = true, tfo = true
HK = snell, 1.2.3.4, 57891, psk = xxxxxxxxxxxx, version = 5, reuse = true, tfo = true

用户配置 (端口: 7000):
版本: Snell v6
HK = snell, 1.2.3.4, 7000, psk = yyyyyyyyyyyy, version = 6, mode = default, reuse = true, tfo = true

二、Docker 部署

镜像地址:jinqians/snell-server

镜像标签

标签 对应版本 说明
latest Snell v5.0.1 固定跟随 v5 通道,不会自动升到 v6
v4 Snell v4.1.1 v4 通道最新
v5 Snell v5.0.1 v5 通道最新
v6 Snell v6.0.0rc2 v6 通道最新(预发布)
v4.0.0 v4.0.1 v4.1.0 v4.1.1 Snell v4 固定版本
v5.0.0 v5.0.1 Snell v5 固定版本
v6.0.0b1 … v6.0.0b4 v6.0.0rc v6.0.0rc2 Snell v6 固定版本(预发布)

架构支持:v4 / v5 为 amd64、arm64、armv7;v6 上游未提供 armv7 构建,仅 amd64、arm64。

Alpine 宿主机:先按 在 Alpine 上启用 Docker 把 docker 服务加到 default 运行级别, 否则重启后 dockerd 不会启动,容器全部离线。

1. 仅 Snell

容器以非特权用户 nobody(uid 65534)运行,挂载的配置目录必须对其可写, 否则 entrypoint 无法生成配置。启动前执行一次: mkdir -p ./snell-config && chown -R 65534:65533 ./snell-config

docker run -d --name snell-server \
  --restart unless-stopped \
  -p 6160:6160/tcp \
  -p 6160:6160/udp \
  -e SNELL_VER=v5 \
  -e SNELL_PORT=6160 \
  -v ./snell-config:/etc/snell \
  jinqians/snell-server:v5

# 查看客户端配置
docker logs snell-server

2. Snell + ShadowTLS v3

Snell 后端只在容器内监听 127.0.0.1,对外仅暴露 ShadowTLS 端口,因此不需要映射 6160。

docker run -d --name snell-shadowtls \
  --restart unless-stopped \
  -p 8443:8443/tcp \
  -e SNELL_VER=v5 \
  -e SNELL_PORT=6160 \
  -e SNELL_LISTEN_HOST=127.0.0.1 \
  -e SHADOWTLS_ENABLE=1 \
  -e SHADOWTLS_PORT=8443 \
  -e SHADOWTLS_SNI=www.microsoft.com \
  -v ./snell-config:/etc/snell \
  jinqians/snell-server:v5

docker logs snell-shadowtls

3. 部署 Snell v6

v6 需要额外指定 SNELL_MODE,参数含义与选型见 Snell v6 专属参数。 镜像用 :v6 标签,环境变量 SNELL_VER=v6,两者必须同时设置。

docker run -d --name snell-v6 --restart unless-stopped \
  -p 6160:6160/tcp -p 6160:6160/udp \
  -e SNELL_VER=v6 \
  -e SNELL_PORT=6160 \
  -e SNELL_MODE=default \
  -e SNELL_DNS_IP_PREFERENCE=default \
  -v ./snell-config:/etc/snell \
  jinqians/snell-server:v6

docker logs snell-v6

Docker Compose 写法:

services:
  snell:
    image: jinqians/snell-server:v6
    container_name: snell-v6
    restart: unless-stopped
    ports:
      - "6160:6160/tcp"
      - "6160:6160/udp"
    environment:
      - SNELL_VER=v6
      - SNELL_PORT=6160
      - SNELL_MODE=default              # default / unshaped / unsafe-raw
      - SNELL_DNS_IP_PREFERENCE=default # default / prefer-ipv4 / prefer-ipv6 / ipv4-only / ipv6-only
      # - SNELL_DNS=1.1.1.1,8.8.8.8
    volumes:
      - ./snell-config:/etc/snell

几个常用组合(完整对照见 建议组合):

-e SNELL_MODE=default   -e SNELL_DNS_IP_PREFERENCE=default      # 常规使用,不确定时用这个
-e SNELL_MODE=unshaped  -e SNELL_DNS_IP_PREFERENCE=default      # 线路干净,追求吞吐(约 +10%)
-e SNELL_MODE=default   -e SNELL_DNS_IP_PREFERENCE=ipv4-only    # VPS 无 IPv6 出口
-e SNELL_MODE=default   -e SNELL_DNS_IP_PREFERENCE=ipv6-only    # IPv6 Only VPS

容器日志会直接输出带 mode 的客户端配置,客户端 mode 必须与服务端一致:

Snell = snell, 1.2.3.4, 6160, psk = xxx, version = 6, mode = unshaped, reuse = true, tfo = true

⚠️ 修改 v6 参数时注意:环境变量只在首次生成配置文件时生效。 挂载目录里已有 snell-server.conf 后,改 SNELL_MODE 重启容器不会生效, 容器会在日志里提示这一点。想修改有两种方式:

# 方式一:直接改配置文件(保留 PSK,推荐)
sed -i 's/^mode = .*/mode = unshaped/' ./snell-config/snell-server.conf
docker restart snell-v6

# 方式二:删除配置文件让容器重新生成(PSK 会变,客户端需同步更新)
rm ./snell-config/snell-server.conf
docker restart snell-v6

4. 切换 Snell 版本

需同时修改镜像标签和 SNELL_VER;删除旧配置文件会重新生成 PSK,保留则沿用原 PSK:

docker rm -f snell-server
rm -f ./snell-config/snell-server.conf     # 想保留原 PSK 就跳过这一步

docker run -d --name snell-server \
  --restart unless-stopped \
  -p 6160:6160/tcp -p 6160:6160/udp \
  -e SNELL_VER=v6 -e SNELL_PORT=6160 -e SNELL_MODE=default \
  -v ./snell-config:/etc/snell \
  jinqians/snell-server:v6

5. 本地构建镜像

./build-docker-images.sh                      # 构建全部通道与版本
USE_BUILDX=1 PUSH=1 ./build-docker-images.sh  # 多架构构建并推送

三、Docker Compose

仅 Snell —— 创建 compose.yml:

services:
  snell:
    image: jinqians/snell-server:v5
    container_name: snell-server
    restart: unless-stopped
    ports:
      - "6160:6160/tcp"
      - "6160:6160/udp"
    environment:
      - SNELL_VER=v5
      - SNELL_PORT=6160
      # - SNELL_PSK=自定义PSK        # 不填则首次启动随机生成
      # - SNELL_SERVER_IP=1.2.3.4    # 不填则容器自动探测公网 IP
      # - SNELL_NODE_NAME=HK         # 客户端配置里的节点名
    volumes:
      - ./snell-config:/etc/snell

Snell + ShadowTLS:

services:
  snell-shadowtls:
    image: jinqians/snell-server:v5
    container_name: snell-shadowtls
    restart: unless-stopped
    ports:
      - "8443:8443/tcp"
    environment:
      - SNELL_VER=v5
      - SNELL_PORT=6160
      - SNELL_LISTEN_HOST=127.0.0.1
      - SHADOWTLS_ENABLE=1
      - SHADOWTLS_PORT=8443
      - SHADOWTLS_SNI=www.microsoft.com
    volumes:
      - ./snell-config:/etc/snell

常用命令:

docker compose up -d                  # 启动
docker compose logs snell-shadowtls   # 查看客户端配置
docker compose down                   # 停止并删除

四、查看客户端配置

容器首次启动(新生成配置时)会在日志中打印一份可直接粘贴到 Surge 的配置,无需手动拼接;后续重启不再在日志中打印明文 PSK:

docker logs snell-server              # docker run 启动
docker compose logs snell-shadowtls   # docker compose 启动

输出示例:

==============================================================
  Snell 客户端配置 (Surge 格式)
==============================================================
  服务器          : 1.2.3.4
  端口            : 8443
  PSK             : duBN4HXibFaJejO2LC61/A==
  Snell 版本      : 5
  ShadowTLS       : v3, SNI = www.microsoft.com
  ShadowTLS 密码  : vwiOI52JPMPYhpTA/n/BKQ==
  Snell 后端端口  : 6160 (仅容器内监听)
--------------------------------------------------------------
Snell = snell, 1.2.3.4, 8443, psk = duBN4HXibFaJejO2LC61/A==, version = 5, reuse = true, tfo = true, shadow-tls-password = vwiOI52JPMPYhpTA/n/BKQ==, shadow-tls-sni = www.microsoft.com, shadow-tls-version = 3
--------------------------------------------------------------

同一份内容也会写入挂载目录,随时可查:

cat ./snell-config/client-config.txt      # 客户端配置
cat ./snell-config/snell-server.conf      # 服务端配置
cat ./snell-config/shadowtls-password     # ShadowTLS 密码
  • 服务器地址由容器自动探测公网 IP 得到;探测失败会显示为 服务器IP,可用 SNELL_SERVER_IP 手动指定。
  • 端口按容器内监听端口输出,若宿主机映射了不同端口请自行替换。
  • 首次启动的日志中含 PSK 与 ShadowTLS 密码,请勿公开分享;后续重启的日志不再含明文 PSK。
  • 任何时候都可以用 docker exec <容器名> cat /etc/snell/client-config.txt 查看完整客户端配置。

五、环境变量

Snell 通用

变量 默认值 说明
SNELL_VER 跟随镜像标签 Snell 配置模式:v4 / v5 / v6
SNELL_PORT 6160 Snell 监听端口
SNELL_PSK 自动生成 Snell PSK
SNELL_LISTEN_HOST 0.0.0.0 监听地址;搭配 ShadowTLS 时用 127.0.0.1
SNELL_IPV6 true v4 配置项;v6 下会转换为 dns-ip-preference(false → ipv4-only)
SNELL_TFO true v4 配置项,v5 / v6 不再写入

仅 Snell v6

变量 默认值 说明
SNELL_MODE default 加密模式 default / unshaped / unsafe-raw,客户端必须一致
SNELL_DNS_IP_PREFERENCE 跟随 SNELL_IPV6 default / prefer-ipv4 / prefer-ipv6 / ipv4-only / ipv6-only
SNELL_DNS 未设置 自定义 DNS 服务器,多个用逗号分隔

ShadowTLS

变量 默认值 说明
SHADOWTLS_ENABLE 0 设为 1 启用 ShadowTLS v3
SHADOWTLS_PORT 8443 ShadowTLS 对外监听端口
SHADOWTLS_PASSWORD 自动生成 生成后保存到 /etc/snell/shadowtls-password
SHADOWTLS_SNI www.microsoft.com TLS 伪装 SNI

客户端配置输出

变量 默认值 说明
SNELL_NODE_NAME Snell 输出配置中的节点名
SNELL_SERVER_IP 自动探测 手动指定服务器地址(IP 或域名)
SNELL_IP_LOOKUP 1 设为 0 关闭公网 IP 自动探测

流量管理

本仓库的脚本不再内置流量管理(原实现不够完善已下线),流量限额统一交由 PSM(Proxy Stack Manager) 处理。 在管理菜单中选择 9. 流量管理 会直接引导你安装 PSM。

PSM 的流量管理能力:

  • 按节点设置**月度流量上限(GB)**与每月自动重置日
  • 超限自动暂停节点,重置或手动恢复后自动解封
  • 基于 iptables 精确计数,数据持久化保存,服务器重启后断点续计
  • 统一管理 Snell / SS-2022 / Xray 等多种协议的节点流量
# 安装 PSM
bash <(curl -fsSL https://psm.jinqians.com)

# 进入后选择:15. 流量管理

注意:Snell 使用 TCP,流量计数不含 UDP;暂停节点只阻断新连接, 已建立的 TCP 连接会在自然断开后失效。


PSM:更完整的代理管理方案

如果你的需求不止 Snell,推荐使用同作者的 PSM — Proxy Stack Manager: 一个用单条 psm 命令统一管理多协议、多内核的 Linux 代理服务端工具。

bash <(curl -fsSL https://psm.jinqians.com)
维度 内容
支持协议 VLESS Reality / Vision / XHTTP、Shadowsocks、Hysteria2、Snell、AnyTLS
并行内核 Xray、sing-box、mihomo 三套内核可同时运行
端口复用 Nginx SNI 分流,多协议共用 443 端口
证书管理 基于 acme.sh 自动申请与续期
流量管理 流量统计、月度限额、超限自动暂停
通知 Telegram Bot 推送
安全加固 SSH 加固、Fail2ban、蜜罐
其他 多语言界面(中/英/韩/俄)、Docker 应用管理、备份还原、节点 URI 与二维码导出

怎么选?

场景 建议
只想快速起一个 Snell 节点 用本项目的一键脚本或 Docker 镜像
需要 Snell + 其他协议、443 复用、证书、流量限额 用 PSM
本项目菜单里的 VLESS Reality / 流量管理 均已整合进 PSM

协议介绍

Snell

Snell 是 Surge 团队设计的轻量级加密代理协议,以极简的协议设计和加密传输兼顾隐私保护与传输性能。 目前** Surge/shadowrocket等 客户端支持** Snell。

Snell v4 / v5 / v6 对比

特性 Snell v4 Snell v5 Snell v6 (RC)
状态 稳定版 稳定版 预发布(rc2)
QUIC Proxy 不支持 支持 已移除
Dynamic Record Sizing 不支持 支持 支持
出口控制 (egress-interface) 不支持 支持 支持
部署级协议多样性 不支持 不支持 支持(PSK 派生)
加密模式 mode 不支持 不支持 default / unshaped / unsafe-raw
obfs 混淆 支持 http 支持 http 已移除
地址族控制 ipv6 ipv6 新增 dns-ip-preference,本项目在 v6 下统一使用它
多地址监听 不支持 不支持 支持(listen 逗号分隔)
armv7l 官方构建 提供 提供 不提供

选择建议:追求稳定选 v5(服务端 v5 同时兼容 v4 客户端),需要尝鲜 v6 特性再选 v6,老设备 / armv7 只能用 v4 / v5。

客户端配置格式

# v4 / v5
HK = snell, 1.2.3.4, 6160, psk = your_psk, version = 5, reuse = true, tfo = true

# v6:mode 必须与服务端一致
HK = snell, 1.2.3.4, 6160, psk = your_psk, version = 6, mode = default, reuse = true, tfo = true

Snell v6 专属参数

安装或升级到 v6 时,脚本会交互式询问下面两个参数;Docker 则通过环境变量设置。

mode(加密模式)

服务端与客户端必须完全一致,不一致将无法连接。

取值 行为 建议场景
default 流量混淆 + AES 加密 默认推荐。特征伪装最完整,抗识别与抗封锁能力最强
unshaped 关闭混淆,仅 AES 加密 吞吐比 default 提升约 10%。线路干净、以速度为先,或已叠加 ShadowTLS 等外层伪装时使用
unsafe-raw 明文转发,不加密不混淆 ⚠️ 数据可被完整还原,公网切勿使用。仅用于内网或可信链路的性能测试

dns-ip-preference(DNS 解析地址族偏好)

控制服务端解析目标域名后优先使用哪种地址族出站,与监听地址无关。

取值 行为 建议场景
default 跟随系统默认解析行为 默认推荐,适配绝大多数 VPS
prefer-ipv4 双栈可用时优先 IPv4,失败回落 IPv6 IPv6 出口质量差,或目标站点 IPv6 解锁较差
prefer-ipv6 双栈可用时优先 IPv6,失败回落 IPv4 IPv6 线路更优,或需要 IPv6 解锁流媒体
ipv4-only 只使用 IPv4 解析结果 VPS 无 IPv6 出口,避免连接 IPv6 目标时白等超时
ipv6-only 只使用 IPv6 解析结果 IPv6 Only 的 VPS(无 IPv4 出口)

建议组合

场景 mode dns-ip-preference
常规使用(不确定时) default default
线路易被干扰、需要最强伪装 default default
干净线路、追求最大吞吐 unshaped default
已叠加 ShadowTLS,外层已有伪装 unshaped default
纯 IPv4 VPS(无 IPv6 出口) default ipv4-only
IPv6 Only VPS default ipv6-only
需要 IPv6 解锁流媒体 default prefer-ipv6
内网 / 可信链路性能测试 unsafe-raw default

对应的服务端配置文件:

[snell-server]
listen = ::0:6160
psk = your_psk
mode = unshaped
dns-ip-preference = default
dns = 1.1.1.1

Docker 用环境变量设置同样的参数:

-e SNELL_VER=v6 -e SNELL_MODE=unshaped -e SNELL_DNS_IP_PREFERENCE=default

v6 的 listen 还支持逗号分隔的多地址监听,例如 listen = 0.0.0.0:6160,[::]:6160,可显式同时绑定 IPv4 与 IPv6, 不再依赖系统的双栈兼容行为。本项目脚本暂未提供该项的交互配置,需要时可手动编辑配置文件。

ShadowTLS

ShadowTLS 是轻量级 TLS 伪装工具,把代理流量伪装成访问正常 HTTPS 站点的流量,用于提升隐蔽性与稳定性。本项目使用 ShadowTLS v3。

启用后 Snell 后端改为仅监听 127.0.0.1:Snell端口,客户端只连接 ShadowTLS 对外端口,原始 Snell 端口不再暴露在公网:

客户端 ──TLS 伪装──▶ ShadowTLS(:8443) ──明文──▶ Snell(127.0.0.1:6160)
# Snell + ShadowTLS:端口填 ShadowTLS 端口
HK = snell, 1.2.3.4, 8443, psk = your_psk, version = 5, reuse = true, tfo = true, shadow-tls-password = your_stls_password, shadow-tls-sni = www.microsoft.com, shadow-tls-version = 3

Surge 配置文件

仓库内提供一份可参考的 Surge 完整配置:surge.conf

https://raw.githubusercontent.com/jinqians/snell.sh/refs/heads/main/surge.conf

包含的内容:

段落 内容
[General] DNS、跳过代理、日志级别等基础参数
[Proxy] Snell v4 / v5、Snell + ShadowTLS、VMess 等节点写法示例
[Proxy Group] 策略组划分示例
[Rule] 常用分流规则
[URL Rewrite] / [MITM] 重写与 MITM 示例

配置中的服务器地址与 PSK 均为示例,使用前请替换成你自己的节点信息。

手搓 Snell 教程:Snell v4 部署教程


赞助

感谢以下赞助商对本项目的支持:

如果这个项目对你有帮助,欢迎点一个 ⭐ Star。


相关链接

About

SNELL V4/SNELL V5/SNELL V6 一键安装脚本,支持Debian/Ubuntu/Centos/Alpine

Topics

Resources

Stars

735 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages