使用 Shadowsocks 有一段时间了,基本上也找到了比较靠谱的使用方法。

除了基本的优化方法之外,还有一些其他的用法。

这里我们介绍利用 Haproxy 来做 Shadowsocks 中继来实现加速的效果。

很多时候,我们自己的网络直连国外的 Shadowsocks 服务器由于各种的网络原因,国际出口带宽限制等,速度会比较慢。这时,某些情况下,我们可以试试曲线救国。利用国内某个网络比较好的主机做中继,利用他的优秀的网络,连接上国外。实现总体加速的效果。

之所以想尝试这种方式,是因为自己手上管理着国内校园网的一台主机,并且可以使用 IPv6。我的 DO 主机都是默认开启了 IPv6 支持的,我们学校的 IPv6 管理不严,几乎没有什么限制,国际出口带宽,通过下载测试文件,达到过 50 M 带宽。而且这个校园网的主机,在全国大部分地方的网络还是比较通畅的。

首先,Shadowsocks 官方是有介绍 Relay 的文档的。

这里我们简要的介绍一下。

官方文档里,最先介绍的是利用 iptables 做的转发。但是这种方法不够直观,而且不利于调优。我们比较推荐利用 Haproxy 的方式。

Haproxy 本来是一个 4/7 层的负载均衡软件,这里,我们可以利用他来实现中继或者负载均衡的效果。

首先要在国内的主机上安装 Haproxy。如果需要 IPv6 的支持的话,你需要安装 Haproxy 1.5 版本。

然后是配置文件/etc/haproxy/haproxy.cfg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
global
ulimit-n 51200

defaults
log global
mode tcp
option dontlognull
contimeout 10000
clitimeout 150000
srvtimeout 150000

frontend ss-in
bind *:8388
default_backend ss-out

backend ss-out
server server1 US_VPS_IP:8388 maxconn 20480

上面是 Haproxy 1.4 的配置文件,到 1.5 版本之后,contimeout、clitimeout、srvtimeout 官方建议改成timeout connecttimeout clienttimeout server

timeout connect在 shadowsocks 的官方文档里写的是1000毫秒,但是在实际使用过程中发现,这样子经常会出现连接断掉的情况,建议改成10000,也就是10秒。

backend里面,写上你的 shadowsocks 的地址即可。IPv6 也一样写法。

然后运行即可haproxy -f /etc/haproxy/haproxy.cfg

同时,如果你有多个 Shadowsocks 的话,还可以继续写在backend里面,可以起到负载均衡的作用。但是这样的话,就建议,这多个 Shadowsocks 的密码得是相同的,要不然本机的 shadowsocks 就不好处理了。