Snell 一键脚本 & Docker 镜像
August 25, 2026 · View on GitHub
Snell 一键脚本 & Docker 镜像
一键安装与管理 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/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 版本限制 |
目录
项目介绍
本项目提供 Snell 服务端的两种部署方式,两者可按需选用:
- 一键脚本 —— 直接在 VPS 上安装 systemd / OpenRC 托管的 Snell,覆盖 Debian、Ubuntu、CentOS、RHEL、Alpine,附带交互式管理菜单
- Docker 镜像 —— 多架构镜像
jinqians/snell-server,docker run一条命令起服务,启动即在日志中输出可粘贴到 Surge 的客户端配置
主要能力:
| 能力 | 说明 |
|---|---|
| Snell 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. 按系统单独安装
| 系统 | 命令 |
|---|---|
| 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 版本限制
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。
Snell 主脚本菜单:
=== 基础功能 === === 增强功能 === === 系统功能 ===
1. 安装 Snell 5. ShadowTLS 管理 8. 更新 Snell
2. 卸载 Snell 6. BBR 管理 9. 更新脚本
3. 查看配置 7. 多用户管理 10. 查看服务状态
4. 重启服务 11. Snell v5/v6 出口控制设置
安装完成后选择 3. 查看配置,脚本会输出带国家/地区标识的 Surge 配置,直接复制即可:
=== 配置信息 ===
当前安装版本: 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
二、Docker 部署
镜像标签
| 标签 | 对应版本 | 说明 |
|---|---|---|
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。
1. 仅 Snell
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 的配置,无需手动拼接:
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 密码,请勿公开分享容器日志。
五、环境变量
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。
相关链接
- 作者网站:jinqians.com
- PSM 项目:jinqians/proxy-stack
- Docker Hub:jinqians/snell-server
- 开源协议:GPL-3.0