Shadowsocks (简体中文)
Shadowsocks是一个轻量级socks5代理,最初用 Python 编写。
Contents
安装
可安装 shadowsocks-libev 或者 shadowsocks。
配置
shadowsocks以json为配置文件格式,以下是安装包中的样例:
/etc/shadowsocks/config.json
{ "server":"remote-shadowsocks-server-ip-addr", "server_port":443, "local_address":"127.0.0.1", "local_port":1080, "password":"your-passwd", "timeout":300, "method":"chacha20-ietf", "fast_open":false, "workers":1 }
Name | Explanation |
---|---|
server | 服务端监听地址(IPv4或IPv6) |
server_port | 服务端端口,一般为443
|
local_address | 本地监听地址,缺省为127.0.0.1 可用-b参数设置
|
local_port | 本地监听端口,一般为1080
|
password | 用以加密的密匙 |
timeout | 超时时间(秒) |
method | 参阅 加密 |
fast_open | 是否启用TCP-Fast-Open |
wokers | worker数量,如果不理解含义请不要改 |
客户端
命令行
运行 ss-local
启动客户端;若需指定配置文件的位置:
# sslocal -c /etc/shadowsocks/config.json,或可尝试手动运行:
# sslocal -s 服务器地址 -p 服务器端口 -l 本地端端口 -k 密码 -m 加密方法
配合nohup和&可以使之后台运行,关闭终端也不影响:
#nohup sslocal -s 服务器地址 -p 服务器端口 -l 本地端端口 -k 密码 -m 加密方法 &
增加 -v
参数获取详细log信息
以守护进程形式运行客户端
Shadowsocks的systemd服务可在/etc/shadowsocks/
里调用不同的conf-file.json
(以conf-file
为区分标志),例:
在/etc/shadowsocks/
中创建了foo.json
配置文件,那么执行以下语句就可以调用该配置:
# systemctl start shadowsocks@foo
若需开机自启动:
# systemctl enable shadowsocks@foo
图形界面客户端
安装 shadowsocks-qt5。
配置代理
shadowsocks客户端启动后,其他程序并不会直接应用socks5连接,可使用以下方法对其进行配置。
- 全局代理
使用Iptables (简体中文)等工具,桌面环境用户可使用桌面设置中网络设置里的代理功能。
- 程序设置自身代理
不少程序都能在其设置中添加代理,只需要在其设置中找到网络相关配置,添加socks v5代理,参照本地配置文件中的ip和port填写即可(例如浏览器的配置可参考下文#浏览器配置)。
- 使用工具进行临时代理
例如proxychains-ng(参看Proxy settings#Using a SOCKS proxy)和redsocks-gitAUR。
- 转换为http代理
直接走socks代理有时未必是用户的期望,可使用privoxy等软件转化socks代理为http代理。可使用privoxy和squid。 以Privoxy为例,编辑privoxy配置文件,添加socks5转发(不要漏下1080后面的点):
forward-socks5 / 127.0.0.1:1080 .
默认监听的是本机的8188端口,即localhost:8188
,可更改为监听其他端口,如
listen-address 127.0.0.1:8010
使用systemd启动或重启privoxy.service
服务,就可以使用了。假设转化后的http代理为127.0.0.1:8010,则在终端中启动(以启动chromium为例):
$ chromium %U --proxy-server=127.0.0.1:8010
浏览器配置
- firefox
- 直接在首选项-常规-网络代理中设置“手动代理”或者“自动代理配置的URL(PAC)”(生成pac可使用genpac,或者使用现成的pac如gfwlist to pac)。
- 使用扩展如foxyproxy或switchyomega等。
- Chrome/Chromium
使用插件如switchomega(使用方法参看SwitchyOmega-wiki
服务端
以命令行启动进程
可使用以下方法运行:
- 在配置文件目录内运行
- 在服务器上
cd
到config.json
所在目录: - 运行
ssserver
如果想在后台一直运行,可改执行:nohup ssserver > log &
;
- 手动指定配置参数
# ssserver -s 监听地址(通常为0.0.0.0) -p 监听端口 -k 密码 -m 加密方法 -t 超时时间(秒)
配合nohup和&可使之后台运行,关闭终端也不影响,例如:
# nohup ssserver -s 0.0.0.0 -p 443 -k a29rw4pacnj2ahmf -m aes-192-cfb -t 600 &
以守护进程形式运行
首先在/etc/shadowsocks/foo.json
(foo是文件名,可随意更改)配置文件内填写好相关参数,然后可以使用以下方法使其以守护进程形式在后台运行:
- 使用
-d
参数
# ssserver -c /etc/shadowsocks/foo.json -d start #启动 # ssserver -c /etc/shadowsocks/foo.json -d start #停止 # ssserver -c /etc/shadowsocks/foo.json -d start #重启
- 使用systemd
# systemctl start shadowsocks-server@foo #立即启动 # systemctl enable shadowsocks-server@foo #开机自启动
多端口运行
将配置文件中的server_port
和password
配置删去,添加上"port_password"
字段配置端口及其密码,示例:
/etc/shadowsocks/foo.json
{ "server": yourip, "_comment": { "25":"me", "9999": "girl", "520": "godness" }, "port_password": { "25": "kexuedeshangwang", "520": "loveyoumygodness",, "9999": "forever", }, "local_address": "127.0.0.1", "local_port": 1080, "timeout": 300, "method": "aes-256-cfb", "fast_open": false, "workers": 1, "prefer_ipv6": false }
加密方法
可选的加密方式:
- aes-256-cfb(Shadowsocks经典、传统的加密算法,也是Shadowsocks的作者推荐过的加密算法,移动平台可能开销稍高)
- aes-128-cfb
- aes-192-cfb
- aes-256-ofb
- aes-128-ofb
- aes-192-ofb
- aes-128-ctr
- aes-192-ctr
- aes-256-ctr
- aes-128-cfb8
- aes-192-cfb8
- aes-256-cfb8
- aes-128-cfb1
- aes-192-cfb1
- aes-256-cfb1
- aes-256-gcm
- aes-128-gcm
- aes-192-gcm
- bf-cfb
- camellia-128-cfb
- camellia-192-cfb
- camellia-256-cfb
- cast5-cfb
- chacha20
- idea-cfb
- rc2-cfb
- rc4-md5
- salsa20
- seed-cfb
加密类别列表参见[1]。 并且可以使用[2]脚本来比较和找出在你机器上运行最快的加密方法。
性能优化
- 多用户使用的情况下,简易使用[#多端口运行],尽量避免一个端口有过多用户连接。
- 使用常用端口(如25、443、21等等),GFW为减轻压力,对常用端口检查相对较少。
- 使用python-gevent提升python的shadowsocks运行的速度。
- 使用python-pip安装
M2Crypto
可略微提升加密速度;使用较弱的加密方式CR4-MD5提升加密速度(请根据实际使用情况考虑加密强度的选择)。 - 优化内核参数,参看Optimizing-Shadowsocks进行设置。
- 开启fast open降低延迟
# echo 'net.ipv4.tcp_fastopen = 3' >> /etc/sysctl.conf
- 开启TCPBBR拥塞控制算法
modprobe tcp_bbr echo "tcp_bbr" >> /etc/modules-load.d/modules.conf echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p
检查:
sysctl net.ipv4.tcp_available_congestion_control sysctl net.ipv4.tcp_congestion_control
如果结果都有 bbr字样, 则证明你的内核已开启 bbr。
执行lsmod
,看到有tcp_bbr
模块即说明 bbr 已启动。