# 前言

一个简单的 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 加密算法包括:

  1. AES-128-GCM

  2. AES-192-GCM

  3. AES-256-GCM

  4. Chacha20-IETF-Poly1305

  5. XChacha20-IETF-Poly1305

  6. 2022-BLAKE3-AES-128-GCM

  7. 2022-BLAKE3-AES-256-GCM

  8. 2022-BLAKE3-Chacha20-IETF-Poly1305

这个选择就看你心情了,记得客户端和服务端的加密算法选择必须是一致的,否则无法成功解密

AES-GCM 的话,密钥长度越大理论上安全性就越高(然而实际上 128 位也非常安全),同时对硬件的压力就越大,不过一般而言压力都不算很大

Chacha20-IETF-Poly1305 是一种 AEAD 流密码,性能很高,如果你的设备 CPU 不太好可以选,不过一般而言 AES-128-GCM 也足够快

"method":"aes-128-gcm",

当然,如果你很叛逆,你一定要用老式流密码或者不带认证的块密码,那也是完全可以的。只要你的客户端和服务端同时支持,而且你很自信:

  1. RC4

  2. RC4-MD5

  3. AES-128-CTR

  4. xxxxxxxxxx hexo dbash

  5. AES-256-CTR

  6. AES-128-CFB

  7. AES-192-CFB

  8. AES-256-CFB

  9. AES-128-CFB8

  10. AES-192-CFB8

  11. AES-256-CFB8

  12. AES-128-OFB

  13. AES-192-OFB

  14. AES-256-OFB

  15. BF-CFB

  16. CAST5-CFB

  17. DES-CFB

  18. IDEA-CFB

  19. RC2-CFB

  20. SEED-CFB

  21. Camellia-128-CFB

  22. Camellia-192-CFB

  23. Camellia-256-CFB

  24. Camellia-128-CFB8

  25. Camellia-192-CFB8

  26. Camellia-256-CFB8

  27. Salsa20

  28. Chacha20

  29. Chacha20-IETF

  30. 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 等,这里不一一列举。