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