查看【Surge】专题可浏览更多内容
Snell 是 Surge 团队开发,仅适用于 Surge 用户的精简加密代理协议,以下是一些亮点:
- 极致的性能;
- 支持 UDP over TCP 转发;
- 具有零依赖关系的单一二进制文件 (除了 glibc);
- 一个帮助入门的向导;
- 如果遇到远程错误,代理服务器将向客户端报告。客户端可以针对不同的场景选择对策;
💡 一些版本演变:
Snell v2
提供了完整的 TCP 全状态机支持的 multiplex 支持,以提高性能和减少延迟。
Snell v3
但是在实际使用中,由于大多数网站和程序均已使用 HTTP/2 协议,自带了 multiplex 支持,所以并不会产生很多的底层 TCP 连接,代理层再支持 multiplex 的优化意义不大。
考虑到 multiplex 的支持会导致额外的问题,如单 TCP 连接被限速,更加复杂繁琐的连接错误检查和纠错等。所以在 Snell v3 中已经取消了 multiplex 支持;
Snell v4
新增客户端参数reuse=true
,可选开启 v2 版本的连接复用机制。连接复用机制可以避免后续请求的连接建立开销,但是在出现网络异常或其他问题时,可能会需要更长的时间才能检查到错误并重建连接,优劣参半,建议对于延迟较高的服务器开启。该功能不需要在服务端额外使用参数开启。
取消支持 TLS 流量混淆 (obfs=tls
) 功能;
服务器端程序已不能够与客户端自动协商密码和版本,客户端需手动配置version=4
;
macOS
如果你正在使用 Surge Mac 并想以此部署 Snell Server 是非常简单的,只要在 Surge 的配置文件中加入以下字段:
[Snell Server]
interface = 0.0.0.0
port = 6160
psk = RANDOM_KEY_HERE
obfs = off
interface
:监听地址
port
:端口
psk
:密钥
obfs
:off
为关闭混淆,或使用流量混淆 http
。
Linux
在 Surge 官网根据你的服务器获取独立服务端二进制文件:
https://manual.nssurge.com/others/snell.html
此处以 linux-amd64
为例:
# 如果系统没有预装可能需要先下载安装 wget 及 unzip
# APT
sudo apt update && sudo apt install wget unzip
# DNF
sudo dnf install unzip
# 下载 Snell Server
wget https://dl.nssurge.com/snell/snell-server-v4.0.1-linux-amd64.zip
# 解压 Snell Server 到指定目录
sudo unzip snell-server-v4.0.1-linux-amd64.zip -d /usr/local/bin
然后编写配置文件:
# 可以使用 Snell 的 wizard 生成一个配置文件
sudo snell-server --wizard -c /etc/snell-server.conf
# 或者自己编写一个
sudo vim /etc/snell-server.conf
[snell-server]
listen = 0.0.0.0:11807
psk = AijHCeos15IvqDZTb1cJMX5GcgZzIVE
ipv6 = false
obfs = off
listen
:监听地址及端口;psk
:密钥;ipv6
:如果需要 IPv6 支持将值为 –true
;obfs
:off
为关闭混淆,或使用流量混淆http
;
然后配置 Systemd 服务文件:
sudo vim /lib/systemd/system/snell.service
[Unit]
Description=Snell Proxy Service
After=network.target
[Service]
Type=simple
User=nobody
Group=nogroup
LimitNOFILE=32768
ExecStart=/usr/local/bin/snell-server -c /etc/snell-server.conf
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=snell-server
[Install]
WantedBy=multi-user.target
- 在一些 Linux 发行版 (CentOS7) 中并无
nogroup
群组,但可以尝试修改成Group=nobody
解决或注释Group
; - 如果需要使用特权端口,可以在
[Service]
增加一条:AmbientCapabilities=CAP_NET_BIND_SERVICE
以解决权限不足不能绑定的问题;
然后使用命令:
# 重载服务
sudo systemctl daemon-reload
# 开机运行 Snell
sudo systemctl enable snell
# 开启 Snell
sudo systemctl start snell
# 关闭 Snell
sudo systemctl stop snell
## 查看 Snell 状态
sudo systemctl status snell
对于 Snell v3 可以尝试增加内核缓冲区大小可以显著提高 UDP 性能:
sudo sysctl -w net.core.rmem_max=26214400 sudo sysctl -w net.core.rmem_default=26214400