使用kcptun加速梯子

2018/02/1814:41:19 发表评论


摘要:在国内如果经常要访问一些诸如Google、Facebook、Youtube等在天朝根本不存在的网站,最便捷的方式就是用Shadowsocks搭梯子。但是往往梯子太长,即使梯子带宽足够宽,线路质量也是不忍直视。本文介绍如何使用KCPTun来加速Shadowsocks代理速度。


1、KCPtun介绍


KCPTun是一个使用可信UDP来加速TCP传输速度的网络软件。 

官网:https://github.com/xtaci/kcptun

我们知道TCP协议是可信的数据流传输协议。简单来说,如果数据传输过程中发生了丢包,TCP协议会重新发送相应数据包,如果数据包到达顺序与发送顺序不一致,TCP协议会进行数据包重组,即:TCP协议可以通过控制帧来保证数据流的传输顺序和正确性。但TCP协议的控制机制比较复杂,在线路质量差导致丢包率极高时,传输效率就会指数级下降。

UDP协议是数据报协议,由于比TCP简单得多,传输效率和延迟率都要优于TCP协议,但UDP协议不是可信传输协议,不能保证数据正确与可达,所以只能应用在一些对单个数据包的正确与可达不是要求很严格(比如:IM)、但对数据传输延迟率有很高要求(比如:视频流或者多人在线游戏)的场合。

那么,有没有一种传输协议既可信又能保证传输效率呢?这就是R-UDP:可信UDP协议,一种在UDP协议基础上增加了部分TCP的控制逻辑来保证数据正确完整的协议。目前已经有很多可用库(rUDP、enet等等),虽然没有成为像TCP/UDP这样的标准协议,但已经广泛运用到了大型多人在线游戏等领域。KCPTun就是利用这种可信UDP(KCP over UDP),来大幅加速TCP传输效率的。

KCP 是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。 

参见:http://blog.csdn.net/linshuhe1/article/details/52191625

KCPTun原理图: 

这里写图片描述

KCPTun官方性能实测值:从68Kbps提高到31Mbps,飞一般的感受! 

这里写图片描述

2、软件安装


windows下需要安装几个软件:

kcptun,根据系统平台下载对应的版本:https://github.com/xtaci/kcptun/releases

image.png

windows下的kcptun图形化客户端:kcptun_gclient: https://github.com/dfdragon/kcptun_gclient/releases

这个图形化客户端不是必须的,我一般不喜欢用,占资源。


3、kcptun服务端配置


我比较喜欢用命令行的方式,windows中也一样,这里我下载的是Linux版本的kcptun客户端(64位),假设我的客户端路径放在/root/kcptun目录下。

梯子命令行如下,监听端口为9999,密码为hello,以deamon进程的方式在后台运行:

/usr/bin/ssserver -p 9999 -k hello -d start

则我直接运行:

/root/kcptun/server_linux_amd64 -l :19900 -t 127.0.0.1:9999 -key hello -mtu 1400 -sndwnd 2048 -rcvwnd 2048 -mode fast2

参数说明:

-t 127.0.0.1:9999  指向本机Shadowsocks的服务端口,本例中是9999

-l :19900          KCPTun服务端端口,这个值在下一节KCPTun客户端设置中需要用到

--key mykey        KCPTun服务端与客户端连接用的secret key

--crypt aes-128    KCPTun服务端与客户端通信时使用aes-128加密(不必须,基于安全性的考虑推荐使用)

--mode fast2       KCPTun服务端与客户端数据传输模式。

根据官方文档:

   响应速度:  fast3 > fast2 > [fast] > normal > default

   有效载荷比:default > normal > [fast] > fast2 > fast3

4、kcptun客户端配置


4.1 Linux客户端配置


由于我本机使用的是Linux机器,所以我直接运行以下命令,来连接服务端的kcptun:

/root/kcptun/client_linux_amd64 -l :12948 -r 1.1.1.1:19900 --key hello --mode fast2 --sndwnd 2048 --rcvwnd 2048

其中:1.1.1.1为服务器的IP地址,请自行更换。


4.2 Windows客户端配置


如果你的机器是windows,则可以使用上文中提到的kcptun_gclient图形化客户端,如下所求:

image.png

或者在cmd中使用命令行,我的做法是,新建一个kcptun.bat文件,假设我的windows客户端路径放在D:\soft\kcptun\client_windows_amd64.exe,那么我可以填下以下参数:

D:\soft\kcptun\client_windows_amd64 -l :12948 -r 1.1.1.1:19900 --key hello --mode fast2 --sndwnd 2048 --rcvwnd 2048

5、梯子客户端配置


5.1、Linux下客户端配置

Linux系统中安装比较方便,可以直接使用pip工具来安装python版本的ss工具,命令如下:

pip install shadowsocks

如果系统中没有pip命令,联网情况下,可以使用如下方式安装pip命令:

Ubuntu系统中:

sudo apt-get install python-pip

CentOS系统中:

sudo yum install python-pip

然后就可以让梯子来代理kcptun的网络了,命令如下:

sslocal -s 127.0.0.1 -p 12948 -k hello -l 1080  -d start

Linux中可以使用Firefox浏览器来进行配置代理比较方便,具体操作为:Preferences->Advanced->Network->Settings

image.png

5.2、Windows下客户端配置


梯子客户端ss下载: https://github.com/shadowsocks/shadowsocks-windows/releases

Windows下的比较简单,如图,只要红色部分几个重要信息填一下即可:

image.png

Win下的客户端做得相对来说要智能一些,只要开启系统代理后,一般的浏览器(firefox除外),都是可以自动代理上网的,一般chrome浏览器会速度会比较稳定些。如果你需要在Linux下使用chrome浏览器扶墙,那么就需要安装一个chrome SwitchyOmega插件,这个会在我博客另外的文章进行说明《谷歌浏览器插件使用之Proxy SwitchyOmega》!

这样就可以来加速扶墙了!

最后附上启动脚本,方便停止与运行扶墙程序:

#!/bin/bash
if [ $# -lt 1 ];then
    echo "$0 start|stop"
    exit 0
fi
SERVER="www.example.com"
start()
{
    echo "Starting..."
    /home/chin/kcptun/client_linux_amd64 -l :12948 -r ${SERVER}:19900 -key hello -mode fast2 -sndwnd 2048 -rcvwnd 2048 &
    /usr/local/bin/sslocal -s 127.0.0.1 -p 12948 -k hello -l 1080 -b 0.0.0.0 -m aes-256-cfb -d start
}
stop()
{
    echo "Stoping..."
    CLIENT_PID=`ps -ef | grep client_linux_amd64 | grep -v grep | awk '{print $2}'`
    kill -9 $CLIENT_PID
    /usr/local/bin/sslocal -s 127.0.0.1 -p 12948 -k hello -l 1080 -b 0.0.0.0 -m aes-256-cfb -d stop
}
case $1 in
    start)
        start
    ;;
    stop)
        stop
    ;;
    *)
        echo "$0 start|stop"
        exit 0
    ;;
esac
exit 0

PS:由于时间紧,写得比较匆忙,有不明白的小伙伴可以给我的博客留言。

  • 微信扫码赞助
  • weinxin
  • 支付宝赞助
  • weinxin

发表评论

您必须才能发表评论!