首页 > 服务器 > 服务器环境 > 小内存福音,Kcptun Shadowsocks加速方案
2017
03-01

小内存福音,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

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加速方案 - 第5张  | 扩软博客

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/xtaci/kcptun/releases

小米路由器、极路由等大部分国产智能路由器都是 MT7620 的芯片,请下载 mipsle 版本。如果运行失败请尝试下载 mips 或者 arm 版。

Openwrt/LEDE 用户可以使用我写的 Luci-app-kcptun:OpenWrt平台Kcptun Web管理界面

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

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

  1. Google Chrome 56.0.2924.87Google Chrome 56.0.2924.87Windows 10 x64Windows 10 x64

    KCPTUN配置时输入的sndwnd、rcvwnd和配置完成后显示的sndwnd\rcvwnd反了。

  2. Pingback 引用通告: [v16]Kcptun 服务端一键安装脚本,喜闻乐见的多用户支持 - 狂奔的蜗牛

  3. Pingback 引用通告: Kcptun 一键安装更新脚本 - 伊甸园

  4. Google Chrome 57.0.2987.110Google Chrome 57.0.2987.110Windows 10 x64Windows 10 x64

    你好,请问这个文章里面用到的代码高亮是个插件?

  5. Edge 14.14393Edge 14.14393Windows 10 x64Windows 10 x64

    Setting up Install Process
    Repository base is listed more than once in the configuration
    Repository updates is listed more than once in the configuration
    Repository extras is listed more than once in the configuration
    求支持啊!
    Repository centosplus is listed more than once in the configuration
    Repository contrib is listed more than once in the configuration
    Loading mirror speeds from cached hostfile
    * epel: linux.mirrors.es.net
    * remi-safe: mirror.bebout.net
    Package curl-7.19.7-52.el6.x86_64 already installed and latest version
    Package wget-1.12-8.el6.x86_64 already installed and latest version
    Package python-setuptools-0.6.10-3.el6.noarch already installed and latest version
    Package 2:tar-1.23-15.el6_8.x86_64 already installed and latest version
    Nothing to do
    Searching for supervisor
    Reading https://pypi.python.org/simple/supervisor/
    Download error on https://pypi.python.org/simple/supervisor/: unknown url type: https — Some packages may not be found!
    Couldn’t find index page for ‘supervisor’ (maybe misspelled?)
    Scanning index of all packages (this may take a while)
    Reading https://pypi.python.org/simple/
    Download error on https://pypi.python.org/simple/: unknown url type: https — Some packages may not be found!
    No local packages or download links found for supervisor
    error: Could not find suitable distribution for Requirement.parse(‘supervisor’)

    安装 Supervisor 失败!

  6. Pingback 引用通告: 服务器双边加速kcp-tun | Zの小屋

  7. Pingback 引用通告: Kcptun 服务端一键安装脚本,喜闻乐见的多用户支持 – 若水

  8. Pingback 引用通告: 翻墙折腾记录 - FQXYI's Blog

  9. Pingback 引用通告: Kcptun 服务端一键安装脚本 – cynthiaの个人站点

  10. Pingback 引用通告: 小内存福音,Kcptun Shadowsocks加速方案 | 姜维博客

发表回复

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

有人回复时邮件通知我