# 前言
一个简单的 Shadowsocks-Libev 服务器搭建过程,系统为 Ubuntu,因为自带了 Snap 应用商店等多种工具包,很方便。
当然你得提前准备一台 VPS,建议用 Vultr,Digital Ocean 之类的,性价比高,随用随抛。配置可以丐中丐,流量和带宽一定不能差了。
如果你追求稳定,那么建议最好还是不要用 Shadowsocks 协议。
# 系统更新与软件安装
首先例行更新:
apt-get update -y | |
apt-get upgrade -y |
然后用 Snap 应用商店安装 Core
snap install core |
Snap 安装 Shadowsocks-Libev
snap install shadowsocks-libev --edge |
# 配置文件
用 nano 打开 Shadowsocks 配置文件路径,当然如果你会 vim,那更好
nano /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json |
以下是一个示例的配置文件:
{ | |
"server":["::0","0.0.0.0"], | |
"server_port":16384, | |
"method":"aes-128-gcm", | |
"password":"IRBa9FdVrSL147CL", | |
"mode":"tcp_and_udp", | |
"fast_open":true | |
} |
简单介绍一下这个配置文件中可能需要修改的地方:
# 服务器端口号
这是 Shadowsocks 服务端的监听端口号,你可以随便换一个你喜欢的端口号,但是换成 80, 443 之类的常用端口也不能提高你的安全性
"server_port":16384, |
# 对称加密算法
Shadowsocks 使用多种对称加密算法,这里建议选择 AEAD 加密算法(性能高、抗重放攻击、兼容性好),Shadowsocks 支持的 AEAD 加密算法包括:
-
AES-128-GCM
-
AES-192-GCM
-
AES-256-GCM
-
Chacha20-IETF-Poly1305
-
XChacha20-IETF-Poly1305
-
2022-BLAKE3-AES-128-GCM
-
2022-BLAKE3-AES-256-GCM
-
2022-BLAKE3-Chacha20-IETF-Poly1305
这个选择就看你心情了,记得客户端和服务端的加密算法选择必须是一致的,否则无法成功解密
AES-GCM 的话,密钥长度越大理论上安全性就越高(然而实际上 128 位也非常安全),同时对硬件的压力就越大,不过一般而言压力都不算很大
Chacha20-IETF-Poly1305 是一种 AEAD 流密码,性能很高,如果你的设备 CPU 不太好可以选,不过一般而言 AES-128-GCM 也足够快
"method":"aes-128-gcm", |
当然,如果你很叛逆,你一定要用老式流密码或者不带认证的块密码,那也是完全可以的。只要你的客户端和服务端同时支持,而且你很自信:
-
RC4
-
RC4-MD5
-
AES-128-CTR
-
xxxxxxxxxx hexo dbash
-
AES-256-CTR
-
AES-128-CFB
-
AES-192-CFB
-
AES-256-CFB
-
AES-128-CFB8
-
AES-192-CFB8
-
AES-256-CFB8
-
AES-128-OFB
-
AES-192-OFB
-
AES-256-OFB
-
BF-CFB
-
CAST5-CFB
-
DES-CFB
-
IDEA-CFB
-
RC2-CFB
-
SEED-CFB
-
Camellia-128-CFB
-
Camellia-192-CFB
-
Camellia-256-CFB
-
Camellia-128-CFB8
-
Camellia-192-CFB8
-
Camellia-256-CFB8
-
Salsa20
-
Chacha20
-
Chacha20-IETF
-
XChacha20
那么举个例子,你就可以这样设置,当然很多客户端和服务端已经弃用流密码了,不保证这些加密算法都还能兼容:
"method":"rc4-md5",
如果你用这些老加密算法设置失败了,服务端会自动把加密算法设置为 Chacha20-IETF-Poly1305。
# 预共享密钥(PSK)
客户端与服务端之间共享的一个密钥字符串,Shadowsocks 安全性的基石。客户端与服务器的 PSK 必须是一致的。
虽然说你输入的这个密钥并不会真的直接被加密算法使用,但是还是建议使用 12 字节以上的,具有一定随机性的 PSK。
这并不是说 AES-GCM 或者 Chacha20 不可靠,而是 Shadowsocks 长期依赖一个 PSK 进行通信。以下是一个例子:
"password":"xMZpoL46GhfrJgEP" |
# 传输层协议
使用的传输层协议,看你自己的需求来设置
TCP + UDP:
"mode":"tcp_and_udp", |
TCP:
"mode":"tcp_only", |
# TCP Fast Open
打开没问题,因为目前 Shadowsocks 的密码学安全性似乎没什么问题:
"fast_open":true |
当然你要是就是不想开,那你就把它关了:
"fast_open":false |
至此,Shadowsocks 服务端配置文件基本参数设置完毕,nano 可以 Ctrl+X 退出,保存 Y,并回车。
# 运行 Shadowsocks 服务与防火墙
# 运行 Shadowsocks 服务
使用以下命令来开启服务端的 Shadowsocks-Libev 服务:
systemctl start snap.shadowsocks-libev.ss-server-daemon.service |
可以使用这个命令来查看你的 Shadowsocks-Libev 服务器运行状态:
systemctl status snap.shadowsocks-libev.ss-server-daemon.service |
如果正常运行,那么你会看到绿色的提示信息。记得观察一下加密算法,如果你的加密算法设置不被兼容或者拼写出错,那么服务器会将其自动修改为 Chacha20-IETF-Poly1305,客户端连接的时候别弄错了。
可以设置一下 Shadowsocks 的开机自启动,以免一个 reboot 或者 IDC 维护了一下就掉线了:
systemctl enable snap.shadowsocks-libev.ss-server-daemon.service |
# 配置防火墙
很简单,首先,如果你是通过 SSH 连接的 VPS,给防火墙添加这条规则,以免开了防火墙以后掉线:
ufw allow ssh
然后让防火墙开放 Shadowsocks 的监听端口,注意,把此处的端口号改成自己的端口号:
ufw allow 16384 |
最后开启防火墙,并允许开机自启动,SSH 用户需要确认一下:
ufw enable |
最后,在客户端配置相同的加密算法,预共享密钥,端口号,并填上服务器的 IPv4 或 IPv6 地址,即可完成连接,使用 Shadowsocks 代理服务器。
这是一个 Shadowsocks-Windows 的 GUI 客户端的下载地址:Shadowsocks-Windows(C#)
当然你也可以使用其它的代理客户端进行连接,如 v2rayN,Sing-Box 等,这里不一一列举。