首页 > 服务器 > 服务器环境 > 小内存福音,Kcptun Shadowsocks加速方案
2016
12-02

小内存福音,Kcptun Shadowsocks加速方案

本博客曾经发布了通过 Finalspeed 加速 Shadowsocks 的教程,大家普遍反映能达到一个非常不错的速度。Finalspeed 虽好,就是内存占用稍高,不适合服务器内存本来就小的用户;而且现在 Finalspeed 停止维护,就需要寻找一个能替代 Finalspeed 的工具。

今天我就给大家介绍这么一个能替代 Finalspeed 的项目 — Kcptun。

Kcptun介绍

Kcptun 是一个非常简单和快速的,基于 KCP 协议的 UDP 隧道,它可以将 TCP 流转换为 KCP+UDP 流。而 KCP 是一个快速可靠协议,能以比 TCP 浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。

Kcptun 是 KCP 协议的一个简单应用,可以用于任意 TCP 网络程序的传输承载,以提高网络流畅度,降低掉线情况。由于 Kcptun 使用 Go 语言编写,内存占用低(经测试,在64M内存服务器上稳定运行),而且适用于所有平台,甚至 Arm 平台。

Kcptun 工作示意图:

小内存福音,Kcptun Shadowsocks加速方案 - 第1张  | 扩软博客

KCP 协议:https://github.com/skywind3000/kcp

Kcptun 项目地址:https://github.com/xtaci/kcptun

2016.08.31 v20160831发布,新版支持配置文件!

2016.08.29 新的客户端可视化配置工具可选

2016.08.13 发布一键安装脚本 https://blog.kuoruan.com/110.html

2016.08.06 添加Kcptun可视化运行工具和Android使用说明。

2016.06.17 添加客户端开机自启批处理,重写软件启动vbs脚本。

相关项目

以下为 Kcptun 的相关项目,如果有兴趣,可以了解一下。

1.Kcp-server:https://github.com/clangcn/kcp-server

Kcp-server 是在 Kcptun 的基础上,添加了配置文件的支持,并整合了一个socks5代理,可用不用配合其他软件单独使用,而原版 Kcptun 需要配合其他软件使用而不能单独使用。Kcp-server 简化了安装过程,一条命令即可配置完毕。

2.Shadowsocks-Plus:https://github.com/shadowsocks-plus/shadowsocks-plus

基于 Shadowsocks Go 版本,加入了以下特性:

  • 启动后降低权限至 nobody , 增强安全性;
  • 与 kcptun 集成,配合相应客户端可加速传输;
  • 网页控制面板。

部署Kcptun

现在博主编写的一键安装脚本已公开发布测试,支持 Kcptun 一键安装、更新、卸载、配置,欢迎测试使用:Kcptun 服务端一键安装脚本

点击这里查看手动配置方式

使用了一键安装脚本之后不用再手动配置了,可用通过 supervisor 命令管理 kcptun

本教程以 Linux 64位系统为例。

首先下载 Kcptun,可以到 GitHub 上获取最新版:小内存福音,Kcptun Shadowsocks加速方案 - 第2张  | 扩软博客

用 Xshell 或者 Putty 登陆服务器,下载 Kcptun 的预编译版:

注:请根据你的系统下载对应版本。32位系统下载 kcptun-linux-386-*.tar.gz,64位系统下载 kcptun-linux-amd64-*.tar.gz

解压之后有两个文件:client_linux_amd64 和 server_linux_amd64,一个用于服务器,一个用于客户端。

这个项目目前还没有 init 脚本,也还不支持配置文件,于是我写了两个简单的 sh 脚本,用于启动和关闭服务端。请在服务端程序相同目录下新建两个文件 start.sh 和 stop.sh。

下面开始创建启动软件所需要用到的一些文件,都是 vi 的基础操作,我不写具体的编辑保存命令了,不会的可以自己搜索一下。

创建 start.sh

写入以下内容:

server_linux_amd64 对应服务端文件名,请对应修改。

创建配置文件

写入以下内容:

  • listen 表示 Kcptun 的服务端监听端口,用于接收外部请求和发送数据,这里设置为:29900,请选一个你喜欢的端口;
  • target 表示要加速的地址,由于 Kcptun 和 Shadowsocks 在同一服务器,地址填写 127.0.0.1,而 8388 为 Shadowsocks 端口;
  • key 是 Kcptun 的验证密钥,服务端和本地必须一致才能通过验证,请自行设置(可省略)默认:it’s a secrect,这里自定义为了 test;
  • crypt 为加密方式,这里使用了轻量快速的 salsa20;
  • mode 为加速模式,默认 fast,这里使用 fast2;
  • nocomp 为去掉压缩传输,这里设置为 false 表示开启压缩传输;
  • 其他参数的含义请查看帮助。

创建 stop.sh

写入以下内容:

创建 restart.sh

然后可以启动服务端:

/root/kcptun/kcptun.log 为日志信息。

监听日志信息可以使用:

停止服务端请使用:

重启服务端:

添加开机启动:

Centos:

Ubuntu/Debian:

响应速度:

fast3 > [fast2] > fast > normal > default

有效载荷比:

default > normal > fast > [fast2] > fast3

中间 mode 参数比较均衡,总之就是越快越浪费带宽(根据设置,可能会浪费数倍流量),请自行斟酌。推荐模式 fast2。

可用的参数请使用 ./server_linux_amd64 -h 查看:

更深层次的参数调整需要理解 KCP 协议,并通过“隐藏参数”调整。巭孬嫑乱动

下面是作者给的配置参数样例,适用大部分ADSL接入(非对称上下行)的参数(实验环境电信100M ADSL)。其它带宽请按比例调整,比如 50M ADSL,把 CLIENT 的 -sndwnd -rcvwnd 减掉一半,SERVER 不变。

带宽计算公式:

在不丢包的情况下,有最大-rcvwnd 个数据包在网络上正在向你传输,以平均数据包大小avgsize计算,在任意时刻,有:

network_cap = rcvwnd*avgsize

数据流向你,这个值再除以ping值(rtt),等于最大带宽使用量。

max_bandwidth = network_cap/rtt = rcvwnd*avgsize/rtt

举例,设rcvwnd = 1024, avgsize = 1KB, rtt = 400ms,则:

max_bandwidth = 1024 * 1KB / 400ms = 2.5MB/s ~= 25Mbps

(注:以上计算不包括前向纠错的数据量)

前向纠错是最大带宽量的一个固定比例增加:

max_bandwidth_fec = max_bandwidth*(datashard+parityshard)/datashard

举例,设datashard = 10 , partiyshard = 3,则:

max_bandwidth_fec = max_bandwidth * (10 + 3) /10 = 1.3*max_bandwidth = 1.3 * 25Mbps = 32.5Mbps

看不懂?那就别管它,你只要会简易自我调优方法就够了:

  1. 同时在两端逐步增大 client rcvwnd 和 server sndwnd;
  2. 尝试下载,观察如果带宽利用率(服务器+客户端两端都要观察)接近物理带宽则停止,否则跳转到第一步。

基本原则:SERVER 的发送速率不能超过 ADSL 下行带宽,否则只会浪费您的服务器带宽。

如果你有任何问题,欢迎加入我们的QQ群寻求帮助:43391448

配置客户端

首先下载 Kcptun 的客户端文件。

请注意:客户端版本建议和服务端版本一致,有许多朋友没有检查两端造成无法连接!

Windows 64位:

Mac 64位:

注意:

1.0830以后的版本不和之前的版本兼容,请确保两端使用相同的版本!

2.下面的软件截图仅供选择软件时参考,请不要照着填写里边的参数!

当前,Kcptun 已经有可视化配置工具了,你可以自行选择使用。如果不想用工具,可以往后翻,手动创建启动文件。

1.Kcptun客户端配置管理工具,来自 @dfdragon

小内存福音,Kcptun Shadowsocks加速方案 - 第3张  | 扩软博客

下载地址:https://github.com/dfdragon/kcptun_gclient/releases

2.kcptun-gui-windows,来自 @GangZhuo

小内存福音,Kcptun Shadowsocks加速方案 - 第4张  | 扩软博客

下载地址:https://github.com/GangZhuo/kcptun-gui-windows/releases

3.来自“逗比根据地”的 Kcptun tools。由于软件是易语言编写的,可能会被杀毒软件报毒,请各位自行查毒。

小内存福音,Kcptun Shadowsocks加速方案 - 第5张  | 扩软博客

软件说明:http://www.dou-bi.com/ss-jc37/

软件下载地址:https://pan.baidu.com/s/1i5HdlVv

4.KcptunGUI,来自“诸神的黄昏”。

小内存福音,Kcptun Shadowsocks加速方案 - 第6张  | 扩软博客

源码地址:https://git.oschina.net/ragnaroks/KcptunGUI

软件下载:https://git.oschina.net/ragnaroks/KcptunGUI/releases

Mac 系统可以下载使用:https://github.com/dfdragon/kcptun_xclient/releases

注意:客户端和服务端参数必须一致的有:

  • datashard
  • parityshard
  • nocomp
  • key
  • crypt
点击查看手动创建启动文件的方法

由于 Kcptun 是控制台程序,所以我选择使用 vbs 脚本,来达到后台运行的目的。

新建 run.vbs

新建 client-config.json

  • localaddr 为 kcptun 本地客户端运行的端口,为 12948;
  • remoteaddr 服务器 IP 地址 10.10.10.10,Kcptun 服务端口为 29900
  • key 验证密钥,和服务端一致;
  • conn 单线连接;
  • autoexpire 60 表示一分钟之后重新建立连接;
  • 其他参数说明见上面服务端配置的说明。

新建 stop.bat

然后双击 run.vbs 运行程序,使用 stop.bat 来停止程序,kcptun.log 为输出的日志信息。

开机启动配置:

新建 startUp.bat:

上面的配置过程中出现了多个端口,我在这里画个图,方便各位理解各端口的作用(点击看大图):

小内存福音,Kcptun Shadowsocks加速方案 - 第7张  | 扩软博客

Shadowsocks 客户端配置

在客户端中新建服务器:

  • 服务器 IP 填写本机:127.0.0.1
  • 服务器端口填写:12948

正确填写你的 Shadowsocks 密码,加密方式,协议和混淆方式。

切换到该服务器上,测试是否正确运行。

速度实测

我用的服务器是搬瓦工 512M 内存,费利蒙机房,以此测试加速效果。

  • 按结论看,Kcptun 的加速效果略逊于 Finalspeed,估计需要细调配置。
  • 刚运行 Finalspeed 时,内存占用就达到了 9.1% 也就是接近 47M;而此时 Kcptun 占用 0.4%,也就是 2M左右。
  • YouTube 1440p 满跑情况下,FInalspeed 最高内存占用 15.4%,接近 79M;而此时 Kcptun 占用 3% 左右,即 15.5M。
  • 速度方面,Finalspeed 最大速度达到了10000 Kbps +,Kcptun 6000+ Kbps。

以上结论为本人测试所得,仅作为参考;实际情况请自行测试,如有纰漏,欢迎指出。

多人同时使用

如果想多人使用同一个服务器并同时使用 Kcptun 加速,需要启动多个 Kcptun 进程:

1.你使用的是本站的一键安装脚本,请使用命令:

来添加一个新实例,新 Kcptun 实例使用的端口需要与其他实例不一致。

2.你是自己创建的启动脚本:

为了启动多个 Kcptun 服务端,你可以将 start.sh 拷贝一份,然后修改其中的 Kcptun 运行端口。

Android上使用

请看这篇文章:Shadowsocks-Android客户端上的KCP配置说明

在路由器上使用

如果需要在路由器上使用 Kcptun,首先你得有个智能路由器,然后能进入shell。

编译好的客户端文件在这里下载:

https://github.com/bettermanbao/openwrt-kcptun/releases

小米路由器、极路由等一大批国产智能路由器都是 MT7620 的芯片,请下载 ramips 版本。

最后编辑:
作者:
百度ID:“度娘程序员”,博主。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

小内存福音,Kcptun Shadowsocks加速方案》有 287 条评论

  1. Pingback 引用通告: [v16]Kcptun 服务端一键安装脚本,喜闻乐见的多用户支持 | 悠悠狐

  2. Pingback 引用通告: 小白教程:3.5美元申请一个终身使用的VPS(附ss、ssr和openvpn免流云服务搭建方法) | 老王学习笔记

  3. Pingback 引用通告: 利用VPS + Shadowsocks + kcptun科学上网 – Jackie

  4. Google Chrome 54.0.2840.71Google Chrome 54.0.2840.71Windows 7 x64Windows 7 x64

    小白问下,shadowsocks 的地址设置成127.0.0.1后,代码显示加速成功,但是网上不去了,请问后面是切回原来的网络就能使用了吗?

  5. Google Chrome 55.0.2883.87Google Chrome 55.0.2883.87Windows 10 x64Windows 10 x64

    为啥在我机器上内存占用那么高
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    1305 root 20 0 18656 12824 1908 S 0.3 1.7 2:25.79 server_linux_am
    1265 root 20 0 56536 10628 2236 S 0.0 1.4 0:03.54 supervisord

  6. Pingback 引用通告: Kcptun 服务端一键安装脚本 - 笨猫博客

  7. Pingback 引用通告: 为vmware虚拟机设置代理进而实现搭梯子等你懂得的功能-南农肥料网-吧啵肥料泡腾片-多肉-学术交流

  8. Pingback 引用通告: 利用ss和kcp对NCBI数据库ftp访问进行加速-南农肥料网-吧啵肥料泡腾片-多肉-学术交流

  9. Google Chrome 54.0.2840.99Google Chrome 54.0.2840.99Windows 8.1 x64Windows 8.1 x64

    手动教程到了启动start.sh后出现:
    Kcptun started.
    json: cannot unmarshal string into Go struct field Config.mtu of type int
    哪里出问题了?

发表回复

你的邮箱地址不会被公开,垃圾评论将被删除。

有人回复时邮件通知我