Snell 为 sing-box 1.14.0 新增。请安装 1.14.0 及以上,并在写入配置前用
sing-box version确认。字段说明见 Snell inbound 与 outbound。
一、Snell v6 简介
Snell v6 使用预共享密钥(PSK)派生协议画像,并通过 mode 控制流量整形方式。不同 PSK 会产生不同的部署特征,因此不要在多个服务之间重复使用同一个 PSK。
常用模式:
| 模式 | 说明 |
|---|---|
default |
默认流量整形模式,适合生产环境 |
unshaped |
不应用流量整形,回退到 v4 风格的随机数据流特征 |
unsafe-raw |
明文调试模式,不提供加密能力,禁止用于生产环境 |
二、部署前准备
- 一台使用 systemd 的 Linux VPS,具备 root 或
sudo权限;官方安装脚本覆盖 deb / rpm / Arch / OpenWrt,不是任意发行版; - 云安全组和本机防火墙(ufw / firewalld / nftables)都放行 TCP
443,且未被其他程序占用——只改安全组不够; - 准备一串长度为 12–255 字节的随机 PSK。
三、安装 sing-box
curl -fsSL https://sing-box.app/install.sh | sh
sing-box version输出中的版本号必须 ≥ 1.14.0,否则入站类型 snell 无法识别。若要钉死版本:
curl -fsSL https://sing-box.app/install.sh | sh -s -- --version 1.14.0脚本会下载 sing-box、安装 systemd 服务(以 sing-box 用户运行,配置目录 /etc/sing-box/)。
四、生成 PSK
PSK 的字符串长度必须在 12–255 字节之间。推荐用 sing-box 自带命令生成 32 字节随机值的 Base64 编码(44 个字符,稳定落在范围内):
sing-box generate rand --base64 32复制输出结果,稍后填入配置中的 psk。也可以用 OpenSSL 生成同样长度的随机值:
openssl rand -base64 32长度按 Base64 文本本身计算:原始随机值不要超过 189 字节(Base64 后约 252 个字符),超出 255 字节上限会导致配置校验失败。不要使用短密码、可猜测字符串或多个服务器共用的 PSK。
五、写入服务端配置
将以下配置写入 /etc/sing-box/config.json:
{
"log": {
"level": "info",
"timestamp": true
},
"inbounds": [
{
"type": "snell",
"listen": "::",
"listen_port": 443,
"version": 6,
"psk": "CHANGE_THIS_TO_A_GENERATED_PSK"
}
],
"outbounds": [
{
"type": "direct"
}
]
}必须修改的字段
| 配置项 | 说明 |
|---|---|
inbounds[0].psk |
替换为刚刚生成的随机 PSK(长度 12–255 字节,按字符串本身计) |
inbounds[0].listen_port |
服务端监听端口,默认 443 |
inbounds[0].listen |
默认 ::(IPv6 + IPv4)。机器禁用 IPv6、启动报 cannot assign requested address 时改为 0.0.0.0 |
mode默认为default(流量整形),推荐保持默认,仅在明确了解影响时修改。可选"reuse": true启用连接复用(Snell v2CONNECT),一般保持默认即可。
设置配置文件权限(官方服务以 sing-box 用户运行,600、属主 root 即可):
sudo chmod 600 /etc/sing-box/config.json六、多用户配置(可选)
如果需要为不同用户设置独立密钥,可以使用 users。顶层 psk 作为服务器密钥,每个用户使用自己的 userkey:
{
"inbounds": [
{
"type": "snell",
"listen": "::",
"listen_port": 443,
"version": 6,
"psk": "SERVER_PSK",
"users": [
{
"name": "user1",
"userkey": "USER1_KEY"
},
{
"name": "user2",
"userkey": "USER2_KEY"
}
]
}
],
"outbounds": [
{
"type": "direct"
}
]
}name 仅用于日志标识,可以省略;userkey 用于对应用户认证。
对应用户的客户端出站需要同时填写服务端顶层 psk 和该用户的 userkey:
"psk": "SERVER_PSK",
"userkey": "USER1_KEY"七、检查并启动
sudo sing-box check -c /etc/sing-box/config.json
sudo systemctl enable sing-box
sudo systemctl restart sing-box
sudo systemctl status sing-box --no-pagercheck 没有输出且退出码为 0 表示配置通过。status 应为 active (running);否则查看日志:
sudo journalctl -u sing-box --output cat -e八、服务管理
| 操作 | 命令 |
|---|---|
| 查看状态 | sudo systemctl status sing-box --no-pager |
| 启动 | sudo systemctl start sing-box |
| 停止 | sudo systemctl stop sing-box |
| 重启 | sudo systemctl restart sing-box |
| 禁用开机自启 | sudo systemctl disable sing-box |
| 查看最近日志 | sudo journalctl -u sing-box --output cat -e |
| 实时查看日志 | sudo journalctl -u sing-box --output cat -f |
九、客户端配置参考
下面是一份可直接 sing-box check 的最小客户端配置:本地 mixed 入站 + 一个出站。出站必须放在 outbounds 数组里,不能把出站对象单独当成完整配置文件。
{
"log": {
"level": "info",
"timestamp": true
},
"inbounds": [
{
"type": "mixed",
"listen": "127.0.0.1",
"listen_port": 1080
}
],
"outbounds": [
{
"type": "snell",
"tag": "snell-out",
"server": "YOUR_SERVER_IP",
"server_port": 443,
"psk": "CHANGE_THIS_TO_A_GENERATED_PSK",
"version": 6
}
]
}本机 SOCKS / HTTP 代理为 127.0.0.1:1080。
要点:
| 客户端字段 | 说明 |
|---|---|
server |
VPS 公网 IP |
server_port |
与服务端 listen_port 一致 |
psk |
始终填服务端顶层 psk;服务端启用多用户时,还需填写属于该用户的 userkey |
version |
与服务端 version 一致,Snell v6 为 6 |
Snell 协议自带加密,没有 TLS 层。把服务开在 443 能过防火墙,但流量不像 HTTPS,按需换端口或接受可探测性。v6 的
mode需要两端一致:客户端默认为default,与服务端默认相同;服务端改用unshaped时客户端也要同步修改(unsafe-raw仅供调试)。客户端同样需要 sing-box 1.14.0+。
十、故障排查
1. 服务启动失败
sudo sing-box check -c /etc/sing-box/config.json
sudo journalctl -u sing-box -n 100 --no-pager重点排查:
sing-box version是否 ≥ 1.14.0;version是否写为数字6;- PSK 是否为空或长度不在 12–255 字节范围内;
- 443 端口是否被其他程序占用(
sudo ss -lntp | grep ':443'); - 禁用 IPv6 的机器是否仍在听
::(改为0.0.0.0)。
2. 客户端无法连接
依次确认:
systemctl status为active (running);- 客户端地址、端口和 PSK 完全一致;
- 云安全组和系统防火墙放行 TCP 443;
- 两端
mode是否一致(默认均为default); - 多用户时客户端填对应
userkey; - 服务端日志中没有认证失败或协议版本错误。
3. 是否应该使用 unsafe-raw
不应该。unsafe-raw 仅适合本地调试、流量不加密;生产环境应使用 default,或在了解兼容性影响后使用 unshaped。
4. 如何确认版本兼容性
出现 unknown inbound type、unsupported version 等错误时,说明当前版本不支持 Snell v6,升级到 1.14.0+ 后重试。
十一、安全建议
- PSK 用生成命令出,长度落在 12–255 字节,不要短口令、不要多机复用;
config.json权限600;- 不要在生产环境使用
unsafe-raw; - 443 上无 TLS,被主动探测时特征与 HTTPS 不同;
- 定期升级 sing-box,升级后重新执行
sing-box check。