Shadowsocks (简体中文)
Shadowsocks 是一个轻量级 SOCKS5 代理。
安装
安装 shadowsocks-libev (Libev) 或 shadowsocks (Python)。推荐使用 shadowsocks-libev。
配置
Shadowsocks 以 JSON 为配置文件格式,以下是软件包中的样例:
/etc/shadowsocks/config.json
{ "server":"my_server_ip", "server_port":8388, "local_address": "127.0.0.1", "local_port":1080, "password":"mypassword", "timeout":300, "method":"chacha20-ietf-poly1305", "fast_open": false, "workers": 1, "prefer_ipv6": false }
- 若需同时指定多个服务端地址,使用如下语法
"server":["1.1.1.1", "2.2.2.2"]
. - 要找出在你的机器上运行最快的方式,可以运行这个脚本。
名称 | 解释 |
---|---|
server | 服务端监听地址 |
server_port | 服务端端口 |
local_address | 本地监听地址 |
local_port | 本地端口 |
password | 用于加密的密码 |
timeout | 超时时间(秒) |
method | 加密方式,默认为 chacha20-ietf-poly1305
|
mode | 是否启用 TCP / UDP 转发,参阅 shadowsocks-libev(8) |
fast_open | 是否启用 TCP Fast Open |
workers | worker 数量 |
使用
客户端
守护进程管理
Start/enable shadowsocks-libev@配置文件.service
.
如在 /etc/shadowsocks/
中创建了 foo.json
配置文件,那么以下命令就可以使用该配置:
# systemctl start shadowsocks-libev@foo.service
为其它程序配置代理
Shadowsocks 客户端启动后,其它程序并不会直接使用,可使用以下方法对其进行配置。
全局代理
使用 iptables 等工具。
程序设置
不少程序都能在其设置中添加代理。只需要在其设置中找到网络相关配置,添加 SOCKS5 代理,参照本地配置文件中的地址和端口填写即可(例如浏览器可参考下文 #浏览器配置)。
使用工具进行临时代理
例如 proxychains-ng 和 tsocks. 参见 Proxy server#Using a SOCKS proxy.
转换为 HTTP 代理
直接使用 SOCKS5 代理有时未必是用户的期望,可使用 Privoxy 或 Squid 等软件转换为 HTTP 代理。
以 Privoxy 为例,编辑配置文件,添加 SOCKS5 转发:
forward-socks5 / 127.0.0.1:1080 .
默认监听的是本机的 8118 端口,即 localhost:8118
,可更改为监听其他端口:
listen-address 127.0.0.1:8010
127.0.0.1
为 0.0.0.0
或直接删除 127.0.0.1
.重启 privoxy.service
.
假设转换后的 HTTP 代理为 127.0.0.1:8118
,则在终端中启动(以 Chromium 为例):
$ chromium --proxy-server="http://127.0.0.1:8118"
浏览器配置
- Firefox
- 使用如 SwitchyOmega 或 FoxyProxy 等扩展。
- 直接在 首选项 > 常规 > 网络代理 中设置 手动代理配置 或者 自动代理配置的 URL(PAC)。
- 使用 手动代理配置:在 SOCKS 主机 栏填上 Shadowsocks 设置的本地地址和端口,点选 SOCKS v5,保存即可。
- 使用 自动代理配置的 URL(PAC):可使用 genpac 工具生成。
- Chrome/Chromium
- 使用 SwitchyOmega 等插件。
服务端
加密方法
- Stream Cipher[失效链接 2021-05-17 ⓘ] 无法保证数据的完整性与安全性,在可能时应使用 AEAD Cipher[失效链接 2021-05-17 ⓘ].
- Stream Cipher 现在被认为安全性不足,请切换至 AEAD Cipher.
AEAD Cipher | |||||
---|---|---|---|---|---|
Name | Alias | Key Size | Salt Size | Nonce Size | Tag Size |
AEAD_CHACHA20_POLY1305 | chacha20-ietf-poly1305 | 32 | 32 | 12 | 16 |
AEAD_AES_256_GCM | aes-256-gcm | 32 | 32 | 12 | 16 |
AEAD_AES_128_GCM | aes-128-gcm | 16 | 16 | 12 | 16 |
守护进程管理
shadowsocks-libev: start/enable shadowsocks-libev-server@配置文件.service
shadowsocks: start/enable shadowsocks-server@配置文件.service
多端口运行
将配置文件中的 server_port
和 password
配置删去,添加上 "port_password"
字段配置端口及其密码,示例:
/etc/shadowsocks/config.json
{ "server": "0.0.0.0", "port_password": { "8381": "foobar1", "8382": "foobar2", "8383": "foobar3", "8384": "foobar4" }, "timeout": 300, "method": "aes-256-cfb" }
性能优化
- 使用常用端口如
443
等。GFW 为减轻压力,对常用端口检查相对较少。 - 启用 TCP Fast Open.
- 启用 BBR.
- 安装 python-m2crypto 和 python-gevent 提升 shadowsocks 的速度。
- 优化内核参数,参见 Optimizing-Shadowsocks.