一键安装与管理 Snell v4 / v5 / v6,支持 ShadowTLS v3、多用户与 BBR, 并提供启动即输出客户端配置的多架构 Docker 镜像。
三步拿到一个可用节点,第 ④ 步(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/snelldocker 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/snelldocker 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短域名也指向这些固定路径,移动文件会导致存量用户的自动更新失效。
脚本会检测发行版并调用对应的安装脚本:
sh -c "$(curl -fsSL https://install.jinqians.com)"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。
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。
| 系统 | 命令 |
|---|---|
| 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 部署)。
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 再用 docker run / docker compose 时,
docker 服务必须加到 default 运行级别:
apk add docker docker-cli-compose
rc-update add docker default # 不要加到 boot
rc-service docker startAlpine 的 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 startsnell-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
镜像标签
| 标签 | 对应版本 | 说明 |
|---|---|---|
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 不会启动,容器全部离线。
容器以非特权用户
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-serverSnell 后端只在容器内监听 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-shadowtlsv6 需要额外指定 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-v6Docker 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
需同时修改镜像标签和 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./build-docker-images.sh # 构建全部通道与版本
USE_BUILDX=1 PUSH=1 ./build-docker-images.sh # 多架构构建并推送仅 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/snellSnell + 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 连接会在自然断开后失效。
如果你的需求不止 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 是 Surge 团队设计的轻量级加密代理协议,以极简的协议设计和加密传输兼顾隐私保护与传输性能。 目前** Surge/shadowrocket等 客户端支持** Snell。
| 特性 | 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
安装或升级到 v6 时,脚本会交互式询问下面两个参数;Docker 则通过环境变量设置。
服务端与客户端必须完全一致,不一致将无法连接。
| 取值 | 行为 | 建议场景 |
|---|---|---|
default |
流量混淆 + AES 加密 | 默认推荐。特征伪装最完整,抗识别与抗封锁能力最强 |
unshaped |
关闭混淆,仅 AES 加密 | 吞吐比 default 提升约 10%。线路干净、以速度为先,或已叠加 ShadowTLS 等外层伪装时使用 |
unsafe-raw |
明文转发,不加密不混淆 |
控制服务端解析目标域名后优先使用哪种地址族出站,与监听地址无关。
| 取值 | 行为 | 建议场景 |
|---|---|---|
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.1Docker 用环境变量设置同样的参数:
-e SNELL_VER=v6 -e SNELL_MODE=unshaped -e SNELL_DNS_IP_PREFERENCE=defaultv6 的
listen还支持逗号分隔的多地址监听,例如listen = 0.0.0.0:6160,[::]:6160,可显式同时绑定 IPv4 与 IPv6, 不再依赖系统的双栈兼容行为。本项目脚本暂未提供该项的交互配置,需要时可手动编辑配置文件。
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.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。
- 作者网站:jinqians.com
- PSM 项目:jinqians/proxy-stack
- Docker Hub:jinqians/snell-server
- 开源协议:GPL-3.0