Snell 是 Surge 团队开发的轻量加密代理协议,与 Surge 客户端配合最佳,单连接复用、低协议开销、对移动网络友好。源码不再开源,作者只在官方文档页面发布二进制构建。
本文以 Debian 12 (x86_64) 为例搭建 Snell v5 服务端,并附 Surge 客户端配置与排错要点。
前置条件
- 一台具备 root 权限的 VPS
- 已开放可对外访问的端口
- Surge iOS / Mac 或其他声明支持 Snell v5 的客户端
下载二进制
打开 Snell 官方文档 找到对应架构的下载地址,撰文时最新版本是 v5.0.0:
apt update && apt install -y wget unzip
# 按机器架构选其一wget https://dl.nssurge.com/snell/snell-server-v5.0.0-linux-amd64.zip # x86_64# wget https://dl.nssurge.com/snell/snell-server-v5.0.0-linux-aarch64.zip # ARM64
unzip snell-server-v5.0.0-linux-amd64.zipinstall -m 755 snell-server /usr/local/bin/snell-serverrm snell-server snell-server-v5.0.0-linux-amd64.zipSnell 客户端与服务端版本必须匹配。Surge 4.x 默认带 Snell v4 客户端,新版本 Surge 已支持 v5;服务端选哪一版要看你的客户端。
编写配置
mkdir -p /etc/snellopenssl rand -base64 24 # 生成强密码备用vim /etc/snell/snell-server.conf写入:
[snell-server]listen = 0.0.0.0:30443psk = PASTE_YOUR_PASSWORD_HEREipv6 = falseobfs = off| 字段 | 说明 |
|---|---|
listen | 监听地址与端口;IPv6 用 [::]:30443 |
psk | Pre-Shared Key,使用上一步生成的随机串 |
ipv6 | 出站是否优先 IPv6 |
obfs | off / http / tls,HTTP/TLS 混淆增加被识别难度但有少量开销 |
配置 systemd
vim /etc/systemd/system/snell.service写入:
[Unit]Description=Snell Proxy ServerAfter=network-online.targetWants=network-online.target
[Service]Type=simpleUser=nobodyGroup=nogroupLimitNOFILE=65535AmbientCapabilities=CAP_NET_BIND_SERVICENoNewPrivileges=trueExecStart=/usr/local/bin/snell-server -c /etc/snell/snell-server.confRestart=on-failureRestartSec=3s
[Install]WantedBy=multi-user.target启动并设置自启:
systemctl daemon-reloadsystemctl enable --now snellsystemctl status snellActive: active (running) 即正常。日志:journalctl -u snell -f。
防火墙放行
# ufwufw allow 30443/tcp
# firewalldfirewall-cmd --permanent --add-port=30443/tcpfirewall-cmd --reload云厂商安全组也要放行同一端口。
客户端配置(Surge 示例)
在 Surge 配置文件 [Proxy] 段添加一行:
my-snell = snell, your-server-ip, 30443, psk=YOUR_PSK, version=5, obfs=off字段需要与服务端 version / obfs / psk 完全一致;version 写错或 PSK 不匹配都会显示 connection reset。
常见问题
connection reset by peer
最常见是 PSK 或 version 客户端服务端不一致;其次是 obfs 字段双方未对齐。
端口可达但握手失败
Snell v5 与 v4 不互通,确认两边版本一致。snell-server -v 看服务端版本。
bind: address already in use
端口被旧进程占用,ss -ltnp | grep 30443 找到占用进程;或之前手动跑过未退出,先 systemctl stop snell 再启动。
性能调优 单台 VPS 跑大量连接时建议同时启用 BBR:
cat >> /etc/sysctl.conf <<'EOF'net.core.default_qdisc=fqnet.ipv4.tcp_congestion_control=bbrEOFsysctl -p服务搭建完成后即可在 Surge 的代理切换面板里使用这个节点。