[中文](README.md) | [English](README.en.md)
# Snell 一键脚本与 Docker 镜像
支持 Snell v4 / v5 / v6、Snell 多用户、ShadowTLS v3、流量管理,以及 Docker / Docker Compose 部署。
## 脚本安装
### 自动识别系统安装
```bash
sh -c "$(curl -fsSL https://install.jinqians.com)"
```
### Debian / Ubuntu 多功能管理菜单
推荐 Debian / Ubuntu 用户优先使用管理菜单,可安装和管理 Snell、ShadowTLS、多用户、流量限制等功能。
```bash
bash <(curl -L -s menu.jinqians.com)
```
### 按系统选择脚本
| 系统 | 命令 | 说明 |
|------|------|------|
| Debian / Ubuntu | `bash <(curl -L -s snell.jinqians.com)` | Snell 主安装脚本 |
| CentOS | `bash <(curl -L -s snell-centos.jinqians.com)` | CentOS 版 Snell 安装脚本 |
| Alpine 本地构建 | `sh -c "$(curl -fsSL https://snell-docker.jinqians.com)"` | Alpine 本地构建安装 |
| Alpine 3.18 | `sh -c "$(curl -fsSL https://snell-alpine.jinqians.com)"` | Alpine 3.18 安装 |
### ShadowTLS 说明
在脚本中为 Snell 配置 ShadowTLS 后,脚本会把 Snell 后端改为仅监听 `127.0.0.1:Snell端口`,客户端只连接 ShadowTLS 对外端口。这样可以避免原始 Snell 端口继续暴露在公网。
## Docker 快速使用
Docker Hub 镜像:`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.0b4 | v6 当前 Beta 版本 |
| `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.0b2` / `v6.0.0b3` / `v6.0.0b4` | Snell v6 beta | 固定版本标签 |
架构支持:
- v4 / v5: `linux/amd64`、`linux/arm64`、`linux/arm/v7`
- v6: `linux/amd64`、`linux/arm64`
### 运行 Snell v5
```bash
docker run -d --name snell-server \
--restart unless-stopped \
-p 6160:6160/tcp \
-p 6160:6160/udp \
-e SNELL_PORT=6160 \
-e SNELL_VER=v5 \
-v ./snell-config:/etc/snell \
jinqians/snell-server:v5
```
查看自动生成的 PSK:
```bash
cat ./snell-config/snell-server.conf
```
### 运行 Snell + ShadowTLS
```bash
docker run -d --name snell-shadowtls \
--restart unless-stopped \
-p 8443:8443/tcp \
-e SNELL_PORT=6160 \
-e SNELL_VER=v5 \
-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
```
启用 ShadowTLS 后,客户端连接 `8443`。Snell 后端只在容器内监听 `127.0.0.1:6160`,通常不需要映射 Snell 原始端口。
查看客户端需要的密钥:
```bash
grep '^psk' ./snell-config/snell-server.conf
cat ./snell-config/shadowtls-password
```
客户端填写:
| 项目 | 填写内容 |
|------|----------|
| 服务器 | VPS 公网 IP 或域名 |
| 端口 | ShadowTLS 对外端口,示例为 `8443` |
| Snell 版本 | `5` |
| Snell PSK | `./snell-config/snell-server.conf` 里的 `psk` |
| ShadowTLS 密码 | `./snell-config/shadowtls-password` 的内容,或手动传入的 `SHADOWTLS_PASSWORD` |
| ShadowTLS SNI | `SHADOWTLS_SNI`,默认 `www.microsoft.com` |
| ShadowTLS 版本 | `3` |
Surge 示例:
```text
HK = snell, 服务器IP, 8443, psk = your_16_plus_char_psk, version = 5, reuse = true, tfo = true, shadow-tls-password = your_shadowtls_password, shadow-tls-sni = www.microsoft.com, shadow-tls-version = 3
```
## Docker Compose
### Snell + ShadowTLS
创建 `compose.yml`:
```yaml
services:
snell-shadowtls:
image: jinqians/snell-server:v5
container_name: snell-shadowtls
restart: unless-stopped
ports:
- "8443:8443/tcp"
environment:
- SNELL_PORT=6160
- SNELL_VER=v5
- SNELL_LISTEN_HOST=127.0.0.1
- SHADOWTLS_ENABLE=1
- SHADOWTLS_PORT=8443
- SHADOWTLS_SNI=www.microsoft.com
volumes:
- ./snell-config:/etc/snell
```
启动:
```bash
docker compose up -d
```
查看配置:
```bash
docker logs snell-shadowtls
cat ./snell-config/snell-server.conf
cat ./snell-config/shadowtls-password
```
停止并删除:
```bash
docker compose down
```
## Docker 环境变量
| 变量 | 默认值 | 说明 |
|------|--------|------|
| `SNELL_VER` | `v4` | Snell 配置模式:`v4`、`v5`、`v6` |
| `SNELL_PORT` | `6160` | Snell 后端监听端口 |
| `SNELL_PSK` | 自动生成 | Snell PSK |
| `SNELL_LISTEN_HOST` | `0.0.0.0` | Snell 监听地址;搭配 ShadowTLS 时使用 `127.0.0.1` |
| `SNELL_IPV6` | `true` | v4 / v6 配置项 |
| `SNELL_TFO` | `true` | v4 / v6 配置项 |
| `SHADOWTLS_ENABLE` | `0` | 设置为 `1` 启用 ShadowTLS |
| `SHADOWTLS_PORT` | `8443` | ShadowTLS 对外监听端口 |
| `SHADOWTLS_PASSWORD` | 自动生成 | ShadowTLS 密码,会保存到 `/etc/snell/shadowtls-password` |
| `SHADOWTLS_SNI` | `www.microsoft.com` | ShadowTLS TLS 伪装 SNI |
## 切换 Docker 版本
切换版本时同时修改镜像标签和 `SNELL_VER`。
```bash
# v4
docker run -d --name snell-server \
--restart unless-stopped \
-p 6160:6160/tcp \
-p 6160:6160/udp \
-e SNELL_PORT=6160 \
-e SNELL_VER=v4 \
-v ./snell-config:/etc/snell \
jinqians/snell-server:v4
# v6
docker run -d --name snell-server \
--restart unless-stopped \
-p 6160:6160/tcp \
-p 6160:6160/udp \
-e SNELL_PORT=6160 \
-e SNELL_VER=v6 \
-v ./snell-config:/etc/snell \
jinqians/snell-server:v6
```
## 本地构建 Docker 镜像
```bash
./build-docker-images.sh
```
多架构构建并推送:
```bash
USE_BUILDX=1 PUSH=1 ./build-docker-images.sh
```
## 协议简介
展开查看
### Snell 协议
Snell 协议是由 Surge 团队设计的一种轻量级、高效的加密代理协议,专注于提供安全、快速的网络传输服务。该协议通过简洁的设计和加密技术,满足用户对隐私保护和高性能传输的需求。
### Snell v4 vs v5 对比
| 特性 | Snell v4 | Snell v5 |
|------|----------|----------|
| 状态 | 稳定版 | 最新版 |
| 安全性 | 支持 | 支持 |
| QUIC Proxy | 不支持 | 支持 |
| Dynamic Record Sizing | 不支持 | 支持 |
| 出口控制 | 不支持 | 支持 |
### ShadowTLS
ShadowTLS 是一个轻量级的 TLS 伪装工具,可以模拟正常 HTTPS 流量,用于提升连接隐蔽性和稳定性。
## 流量管理
流量管理说明[展开查看]
### 功能说明
通过 iptables 对 Snell 节点进行流量计数,支持设置月度流量上限,超限后自动暂停节点,每月指定日期自动重置。
### 计量原理
Snell 以明文 TCP 监听在指定端口,流量管理通过在 iptables 中添加专用计数规则(`PSM_TRF` 链)统计该端口的进出字节数,不影响数据包的正常转发。超限时向 `INPUT` 链插入 DROP 规则,阻断新连接。
```
客户端 ──TCP──▶ iptables 计数 ──▶ snell-server
│
超限时 DROP
```
### 使用方式
在管理菜单中选择 **9. 流量管理**,进入交互向导:
```
1. 添加 / 修改流量限制 → 选择节点,设置上限 (GB) 和每月重置日
2. 查看流量状态 → 显示各节点已用流量、剩余、暂停状态
3. 手动暂停节点 → 立即阻断指定节点的新连接
4. 手动恢复节点 → 移除 DROP 规则,恢复正常访问
5. 重置流量统计 → 清零计数,并恢复被暂停的节点
```
### 自动检查定时器
首次配置后会提示安装 systemd 定时器(`psm-traffic.timer`),每分钟执行一次检查:
- 累计流量 ≥ 限额 → 自动暂停节点
- 到达重置日 → 清零计数并恢复节点
手动查看定时器状态:
```bash
systemctl status psm-traffic.timer
```
### 注意事项
- 流量计数基于 iptables 字节计数器,**服务器重启后计数器归零**,但已累计的流量数据保存在 `/etc/psm/traffic/state.json` 中,下次计数从断点续计
- 暂停节点仅阻断**新连接**,已建立的 TCP 连接会在自然断开后失效
- 若系统使用 nftables,需确认 iptables 兼容层已启用(`iptables-legacy` 或 `iptables-nft`)
- Snell 使用 TCP,流量计数不包含 UDP
## 🥇 赞助
+ [ZMTO](https://console.zmto.com/?affid=1567)
+ [ZMTO 测评](https://vps.jinqians.com/zmto/)
## 手搓snell
[点击跳转](https://vps.jinqians.com/snell-v4%e9%83%a8%e7%bd%b2%e6%95%99%e7%a8%8b/)
surge配置文件[点击展开]
## Surge配置文件
自用配置文件:https://raw.githubusercontent.com/jinqians/snell.sh/refs/heads/main/surge.conf
### 配置文件说明
- Snell V4 配置示例
- Snell V5 配置示例
- Snell + ShadowTLS 配置示例
- VMESS 配置示例
- surge 订阅示例
脚本输出示例[点击展开]
### Snell v4 配置
```
=== 配置信息 ===
当前安装版本: Snell v4
# 原始 Snell 配置
HK = snell, 1.2.3.4, 57891, psk = xxxxxxxxxxxx, version = 4, reuse = true, tfo = true
HK = snell, ::1, 57891, psk = xxxxxxxxxxxx, version = 4, reuse = true, tfo = true
```
### Snell v5 配置
```
=== 配置信息 ===
当前安装版本: Snell v5
# Snell v5 配置(支持 v4 和 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
```
### Snell + ShadowTLS 配置
```
=== 配置信息 ===
# 带 ShadowTLS 的配置
HK = snell, 1.2.3.4, 8989, psk = xxxxxxxxxxxx, version = 4, reuse = true, tfo = true, shadow-tls-password = yyyyyyyyyyyy, shadow-tls-sni = www.microsoft.com, shadow-tls-version = 3
HK = snell, ::1, 8989, psk = xxxxxxxxxxxx, version = 4, reuse = true, tfo = true, shadow-tls-password = yyyyyyyyyyyy, shadow-tls-sni = www.microsoft.com, shadow-tls-version = 3
```