使用kcptun来加速shadowsocks
最近gfw升级之后,似乎带来一个全新的特性——TCP阻断。受影响的vps可以ping,但是所有使用tcp协议的应用都会失效,如ssh和shadowsocks,不过udp并未受到影响,个人分析可能tcp的长连接更容易识别。由于shadowsocks并不支持udp通讯,所以需要使用kcptun作为中间层。
基本原理
这是kcptun项目网站的原理图片。
可以看到kcptun的客户端会在本地监听来自应用程序的流量,同时将数据发往服务端,kcptun服务端程序会将数据发往目标端口。客户端和服务端之间使用kcp协议,它基于udp。
安装kcptun
根据你的设备的处理器架构以及系统类型,从https://github.com/shadowsocks/kcptun/releases/latest下载相应的程序。
服务端
将下载好的服务端程序改名为kcp-server,并且复制到
/usr/bin
由于kcptun目前不支持直接生成守护进程,同时为了方便管理,我编写了基于systemd的服务脚本
1
git clone https://github.com/colorfulshark/kcptun-daemon.git
安装服务脚本及配置文件
1
2
3cd kcptun-daemon
chmod +x install.sh
sudo ./install.sh
客户端
Windows:https://github.com/shadowsocks/kcptun/releases/latest
下载解压之后,将客户端程序复制到shadowsocks所在目录,并改名为kcp-client.exe
Android:https://github.com/shadowsocks/kcptun-android/releases/latest
直接安装即可
配置kcptun
这里并不探讨最佳配置,因为每个人的网络情况都不同,所以这里只介绍一个最小的可工作配置。
服务端
服务端的配置文件在/etc/kcptun/config.json
- listen:kcptun的本地监听端口,用于与客户端通讯
- target:服务端接收到数据后转发的地址,这里就是你的shadowsocks所监听的IP地址和端口号
- key:客户端与服务端认证的密钥
- crypt:加密方式,由于shadowsocks本身已经加密,所以不需要设置非常复杂的加密方式
- mode:响应模式,更快的响应可能造成更高的丢包率
注意,shadowsocks的监听端口与kcptun的target端口要一致。
客户端
Windows
- 打开shadowsocks编辑服务器的界面
- 将服务器端口改为kcptun所监听的端口,默认是29900
- 在插件程序中,填入kcp-server.exe
- 在插件选项中,填入
mode=fast;key="it's a secrect"
- 确认即可
Android
- 安装kcptun后,在shadowsocks的服务器编辑界面的Plugin中选择kcptun
- 在Configure中填入
mode=fast;key="it's a secrect"
- 确认后重新连接服务器