之前介绍过finalspeed,在搬瓦工这类openvz架构的vps上为小伙伴加速艾斯艾斯起到了很好的效果。不过作者宣布FS项目暂停维护后,大家使用起来也不是那么方便了。今天无意间在扩软博客看到这款finalspeed的最佳替代品kcptun,涨知识了,尝试了一下结果发现加速效果很明显,而且内存占用很小。以下内容经过实践转载而来,已经在搬瓦工和sentris的便宜货上试过,720p很流畅。
嫌麻烦的同学可以直接用一键脚本了:https://www.cmsky.com/kcptun-for-ss/
Kcptun介绍
Kcptun 是一个非常简单和快速的,基于 KCP 协议的 UDP 隧道,它可以将 TCP 流转换为 KCP+UDP 流。而 KCP 是一个快速可靠协议,能以比 TCP 浪费10%-20%的带宽的代价,换取平均速度提高 30%-40%,且最大延迟降低三倍的传输效果。
Kcptun 是 KCP 协议的一个简单应用,可以用于任意 TCP 网络程序的传输承载,以提高网络流畅度,降低掉线情况。由于 Kcptun 使用 Go 语言编写,内存占用低,而且适用于所有平台,甚至 Arm 平台。
Kcptun 工作示意图:
KCP 协议:https://github.com/skywind3000/kcp
Kcptun 项目地址:https://github.com/xtaci/kcptun
Kcp-server:https://github.com/clangcn/kcp-server
Kcp-server 是在 Kcptun 的基础上,添加了配置文件的支持,并简化了安装过程。本教程不探讨 Kcp-server 的使用,着重介绍 Kcptun 的配置。
部署Kcptun
2016.08.31 v20160831发布,新版支持配置文件!
2016.08.11 v20160811发布,一些优化,非关键更新。
2016.08.06 添加Kcptun可视化运行工具和Android使用说明。
2016.07.25 v20160725发布,降低了网络延迟。
2016.07.16 添加重启脚本、开机启动和端口说明。
2016.07.01 v20160701发布,限定RTO退让的最大值为8xRTT,修正假死问题。
2016.06.27 v20160627发布,新参数-nocomp,需要在两端同时使用以禁止压缩传输。
2016.06.17 添加客户端开机自启批处理,重写软件启动vbs脚本。
本教程以 CentOS 6.5 64位为例。
首先下载 Kcptun,可以到 GitHub 上获取最新版:https://github.com/xtaci/kcptun/releases
用 Xshell 或者 Putty 登陆服务器,下载 Kcptun 的预编译版:
mkdir /root/kcptun cd /root/kcptun wget https://github.com/xtaci/kcptun/releases/download/v20160922/kcptun-linux-amd64-20160922.tar.gz tar -zxf kcptun-linux-amd64-*.tar.gz
注意:请根据你的系统下载对应版本。32位系统下载 kcptun-linux-386-*.tar.gz,64位系统下载 kcptun-linux-amd64-*.tar.gz
解压之后有两个文件:client_linux_amd64 和 server_linux_amd64,一个用于服务器,一个用于客户端。
请在服务端程序相同目录下新建两个文件 start.sh 和 stop.sh。
创建 start.sh,创建之前请执行一下ln -sf /bin/bash /bin/sh
vi /root/kcptun/start.sh
写入以下内容:
#!/bin/bash cd /root/kcptun/ ./server_linux_amd64 -c /root/kcptun/server-config.json > kcptun.log 2>&1 & echo "Kcptun started."
server_linux_amd64 对应服务端文件名,请对应修改。
创建配置文件
vi /root/kcptun/server-config.json
写入以下内容:
{ "listen": ":29900", "target": "127.0.0.1:8388", "key": "test", "crypt": "salsa20", "mode": "fast2", "mtu": 1350, "sndwnd": 1024, "rcvwnd": 1024, "datashard": 70, "parityshard": 30, "dscp": 46, "nocomp": false, "acknodelay": false, "nodelay": 0, "interval": 40, "resend": 0, "nc": 0, "sockbuf": 4194304, "keepalive": 10 }
-l 表示 Kcptun 的服务端监听端口,用于接收外部请求和发送数据,默认 29900;
-t 表示要加速的地址,我这里设置的是我服务器的 艾斯艾斯 端口;
-key 是 Kcptun 的验证密钥,服务端和本地必须一致才能通过验证,请自行设置;
-mode 为加速模式,默认 fast,这里使用 fast2。
响应速度:
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 不变。
SERVER: -mtu 1400 -sndwnd 2048 -rcvwnd 2048 -mode fast2
CLIENT: -mtu 1400 -sndwnd 256 -rcvwnd 2048 -mode fast2 -dscp 46
创建 stop.sh
vi /root/kcptun/stop.sh
写入以下内容:
#!/bin/bash echo "Stopping Kcptun..." PID=`ps -ef | grep server_linux_amd64 | grep -v grep | awk '{print $2}'` if [ "" != "$PID" ]; then echo "killing $PID" kill -9 $PID fi echo "Kcptun stoped."
创建 restart.sh
#!/bin/bash cd /root/kcptun/ sh stop.sh echo "Restarting Kcptun..." sh start.sh
然后可以启动服务端:
sh /root/kcptun/start.sh
/root/kcptun/kcptun.log 为日志信息。
停止服务端请使用:
sh /root/kcptun/stop.sh
重启服务端:
sh /root/kcptun/restart.sh
添加开机启动:
Centos:
chmod +x /etc/rc.d/rc.local;echo "sh /root/kcptun/start.sh" >> /etc/rc.d/rc.local
Ubuntu/Debian:
chmod +x /etc/rc.local;echo "sh /root/kcptun/start.sh" >> /etc/rc.local
配置客户端
客户端需要新建vbs脚本,如果觉得麻烦也可以考虑使用以下图形化客户端工具。
KcptunGUI,来自“诸神的黄昏”。
源码地址:https://git.oschina.net/ragnaroks/KcptunGUI
软件下载:https://git.oschina.net/ragnaroks/KcptunGUI/releases
注意:客户端和服务端参数必须一致的有:
- datashard
- parityshard
- nocomp
- key
- crypt
以下为手动创建启动文件的方法:
以本地 Windows 64位系统为例,首先下载 Kcptun 的 Windows 版本。
我这里先新建一个文件夹,命名为 Kcptun,然后下载:
https://github.com/xtaci/kcptun/releases/download/v20160922/kcptun-windows-amd64-2016022.tar.gz
解压到文件夹下。
由于 Kcptun 是控制台程序,所以我选择使用 vbs 脚本,来达到后台运行的目的:
新建 run.vbs
Dim RunKcptun
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
'获取文件路径
currentPath = fso.GetFile(Wscript.ScriptFullName).ParentFolder.Path & "\"
'配置文件路径
configFile = currentPath & "client-config.json"
'日志文件
logFile = currentPath & "kcptun.log"
'软件运行参数
exeConfig = currentPath & "client_windows_amd64.exe -c " & configFile
'拼接命令行
cmdLine = "cmd /c " & exeConfig & " > " & logFile & " 2>&1"
'启动软件
WshShell.Run cmdLine, 0, False
'等待1秒
'WScript.Sleep 1000
'打印运行命令
'Wscript.echo cmdLine
Set WshShell = Nothing
Set fso = Nothing
'退出脚本
WScript.quit
新建 client-config.json
{ "localaddr": ":12948", "remoteaddr": "10.10.10.10:29900", "key": "test", "crypt": "salsa20", "mode": "fast2", "conn": 1, "autoexpire": 60, "mtu": 1350, "sndwnd": 128, "rcvwnd": 1024, "datashard": 70, "parityshard": 30, "dscp": 46, "nocomp": false, "acknodelay": false, "nodelay": 0, "interval": 40, "resend": 0, "nc": 0, "sockbuf": 4194304, "keepalive": 10 }
localaddr 为 kcptun 本地客户端运行的端口,为 12948;
remoteaddr 服务器 IP 地址 10.10.10.10,Kcptun 服务端口为 29900
key 验证密钥,和服务端一致;
conn 单线连接;
autoexpire 60 表示一分钟之后重新建立连接;
其他参数说明见上面服务端配置的说明。
新建 stop.bat
taskkill /f /im client_windows_amd64.exe
然后双击 run.vbs 运行程序,使用 stop.bat 来停止程序,kcptun.log 为输出的日志信息。
开机启动配置:
新建 startUp.bat:
@echo off title Kcptun 开机启动设置 mode con cols=50 lines=20 color A echo. echo. Kcptun 启动项设置 echo. echo. 此批处理可以将 Kcptun 客户端添加到开机启动 echo. echo. 请将该文件放到 run.vbs 相同目录后运行 echo. echo. 查看说明:https://blog.kuoruan.com/102.html echo. set /p ST=输入 y 添加开机启动,输入 n 取消开机启动: if /I "%ST%"=="y" goto addStartup if /I "%ST%"=="n" goto delStartup :addStartup reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "Kcptun Client" /t REG_SZ /d "\"%~dp0run.vbs\"" /F>NUL exit :delStartup reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "kcptun Client" /F>NUL 2>NUL exit
Shadow*socks 客户端配置
在客户端中新建服务器:
- 服务器 IP 填写本机:127.0.0.1
- 服务器端口填写:12948
正确填写你的 艾斯艾斯 密码,加密方式,协议和混淆方式。
切换到该服务器上,测试是否正确运行。
速度实测
本人在sentris的128M内存vps上测试了看youtube视频能稳定在2000左右,720p流畅。最主要的是vps上内存和CPU占用率非常低,这点完爆finalspeed了。
本文参考链接:https://blog.kuoruan.com/102.html
厘米总结:如果你资金有限,只能买openvz架构的vps,那么我首先推荐你搬瓦工,技术稳定性是低端vps的业界标杆,后台机房随便切换,后台一键S-S很方便。搬瓦工等openvz类vps目前有效的加速方案就是kcptun、finalspeed、net_speeder这三种,前两种需要配合客户端,最后一种不需要客户端但是效果最不明显。如果你能接受5美元一月更好的vps,那么vultr、DO是你不错的选择。

2016年8月30日 下午8:55 51楼
请问在执行sh /root/kcptun/start.sh的时候显示
/root/kcptun/start.sh: line 3: syntax error near unexpected token `;&’
/root/kcptun/start.sh: line 3: `./server_linux_amd64 -l :29900 -t 127.0.0.1:8388 -key test -mtu 1400 -sndwnd 2048 -rcvwnd 2048 -mode fast2 > kcptun.log 2>&1 &’
是什么问题呢?
2016年8月31日 下午2:56 1层
@saberjang 已经提示你了,第三行;&这里错了~
2016年9月1日 上午3:52 52楼
我和楼上一样的问题~
貌似vi start.sh的内容有问题。
编辑完了,执行start.sh就会报那一段的语法错误
kcptun.log 2>&1 & 后面改成这个就能正常启动了~
我把8388改成了我自己的SS端口443,其他配置没变
图形客户端显示正在运行了,可是就是上不去网。
日志也执行不了,说是操作受限。
折腾了4个小时,望博主指导下~
2016年9月14日 上午10:46 53楼
mac怎么配置啊
2016年9月28日 下午3:19 54楼
[code]2016/09/28 03:17:00 broken pipe
2016/09/28 03:17:00 remote address: 221.7.240.134:58403
2016/09/28 03:17:00 broken pipe
2016/09/28 03:17:00 remote address: 221.7.240.134:58403
2016/09/28 03:17:09 broken pipe
2016/09/28 03:17:21 remote address: 221.7.240.134:58410
2016/09/28 03:17:21 broken pipe
2016/09/28 03:17:21 remote address: 221.7.240.134:58410
2016/09/28 03:17:21 broken pipe
2016/09/28 03:17:21 remote address: 221.7.240.134:58410
2016/09/28 03:17:21 broken pipe
2016/09/28 03:17:21 remote address: 221.7.240.134:58410
2016/09/28 03:17:21 broken pipe
2016/09/28 03:17:22 remote address: 221.7.240.134:58410
2016/09/28 03:17:22 broken pipe
2016/09/28 03:17:30 broken pipe
2016/09/28 03:17:41 remote address: 221.7.240.134:58410[/code]
链接日志是这个 但是 浏览器就是无法访问 哪里不对
2016年9月28日 下午4:29 1层
@KSkenn [code]Kcptun已后台运行,监听本地2000端口
2016/09/28 16:27:33 version: 20160823
2016/09/28 16:27:33 listening on: [::]:2000
2016/09/28 16:27:33 encryption: salsa20
2016/09/28 16:27:33 nodelay parameters: 1 20 2 1
2016/09/28 16:27:33 remote address: webserver.orzone.org:9900
2016/09/28 16:27:33 sndwnd: 128 rcvwnd: 1024
2016/09/28 16:27:33 compression: true
2016/09/28 16:27:33 mtu: 1350
2016/09/28 16:27:33 datashard: 10 parityshard: 3
2016/09/28 16:27:33 acknodelay: false
2016/09/28 16:27:33 dscp: 0
2016/09/28 16:27:33 sockbuf: 4194304
2016/09/28 16:27:33 keepalive: 10
2016/09/28 16:27:33 conn: 1
2016/09/28 16:27:33 stream opened
2016/09/28 16:27:33 stream opened
2016/09/28 16:27:33 stream opened
2016/09/28 16:28:00 stream opened
2016/09/28 16:28:01 stream opened
2016/09/28 16:28:03 stream closed
2016/09/28 16:28:03 stream closed
2016/09/28 16:28:03 stream closed
2016/09/28 16:28:21 [ERR] yamux: Invalid protocol version: 1
2016/09/28 16:28:21 stream closed
2016/09/28 16:28:21 [ERR] yamux: keepalive failed: session shutdown
2016/09/28 16:28:21 stream closed
2016/09/28 16:28:21 session shutdown
2016/09/28 16:28:21 stream opened
2016/09/28 16:28:33 stream opened
2016/09/28 16:28:51 stream closed
2016/09/28 16:28:51 stream opened
2016/09/28 16:28:53 [ERR] yamux: Invalid protocol version: 1
2016/09/28 16:28:53 stream closed
2016/09/28 16:28:53 [ERR] yamux: keepalive failed: session shutdown
2016/09/28 16:28:53 stream closed
2016/09/28 16:28:53 session shutdown
2016/09/28 16:28:54 stream opened
2016/09/28 16:29:00 stream opened[/code]
这个是客户端的日志
2016年12月6日 上午1:18 2层
@KSkenn 我也报这个错,请问你解决了吗
2017年6月12日 下午1:20 2层
@KSkenn 我也是这个,请问你解决了吗?
2017年11月30日 上午2:51 3层
@AIO 你们解决了吗
2017年11月30日 上午2:52 3层
@AIO 解决了吗?
2016年10月3日 下午7:28 55楼
搬瓦工128M 速度不比FS 差 但费流量 看个400多M视频 流量1G多 有速度没流量了! FS没那么严重
kcp小白不会配置 电信光钎50M nocomp压缩与不压缩 那个比较省流量
太多参数 小白不会调
2016年10月5日 上午11:29 56楼
服务器挂了?已无法安装
2016年10月6日 下午12:33 57楼
博主的start文件内容写错了,运行自然会报错
2016年10月6日 下午3:08 1层
@卖老湿 谢谢提醒,已修正!
2016年10月10日 下午5:45 58楼
json配置文件有误, “nodelay”, “interval”,”resend”,”nc”这几个参数只有在mode是manual的情况下才能生效
2016年10月12日 下午11:28 59楼
大哥你真是神人啊,骨骼精奇,叼叼叼。
我还没试,看上去好复杂的样子,想问问,这电脑上的客户端是不是每次加速都得打开?iPhone能用吗
2016年10月15日 上午2:29 60楼
你好,楼主,请问一下我按照教程配置了,为什么浏览器提示502 Server dropped connection,服务端一直connection refused,谢谢!
服务端日志:
2016/10/14 14:19:13 version: 20160922
2016/10/14 14:19:13 listening on: [::]:29900
2016/10/14 14:19:13 target: 127.0.0.1:11135
2016/10/14 14:19:13 encryption: salsa20
2016/10/14 14:19:13 nodelay parameters: 1 20 2 1
2016/10/14 14:19:13 sndwnd: 1024 rcvwnd: 1024
2016/10/14 14:19:13 compression: true
2016/10/14 14:19:13 mtu: 1350
2016/10/14 14:19:13 datashard: 70 parityshard: 30
2016/10/14 14:19:13 acknodelay: false
2016/10/14 14:19:13 dscp: 46
2016/10/14 14:19:13 sockbuf: 4194304
2016/10/14 14:19:13 keepalive: 10
2016/10/14 14:19:23 remote address: 183.134.71.203:4524
2016/10/14 14:19:51 broken pipe
2016/10/14 14:19:53 broken pipe
2016/10/14 14:20:26 remote address: 183.134.71.203:6884
2016/10/14 14:20:26 dial tcp 127.0.0.1:11135: getsockopt: connection refused
2016/10/14 14:20:26 dial tcp 127.0.0.1:11135: getsockopt: connection refused
2016/10/14 14:20:26 dial tcp 127.0.0.1:11135: getsockopt: connection refused
2016/10/14 14:20:26 dial tcp 127.0.0.1:11135: getsockopt: connection refused
客户端日志:
2016/10/15 02:23:07 version: 20160922
2016/10/15 02:23:07 listening on: [::]:12000
2016/10/15 02:23:07 encryption: salsa20
2016/10/15 02:23:07 nodelay parameters: 1 20 2 1
2016/10/15 02:23:07 remote address: 45.78.XX.XX:29900
2016/10/15 02:23:07 sndwnd: 128 rcvwnd: 1024
2016/10/15 02:23:07 compression: true
2016/10/15 02:23:07 mtu: 1350
2016/10/15 02:23:07 datashard: 70 parityshard: 30
2016/10/15 02:23:07 acknodelay: false
2016/10/15 02:23:07 dscp: 46
2016/10/15 02:23:07 sockbuf: 4194304
2016/10/15 02:23:07 keepalive: 10
2016/10/15 02:23:07 conn: 1
2016/10/15 02:23:07 autoexpire: 60
2016/10/15 02:23:27 stream opened
2016/10/15 02:23:27 stream opened
2016/10/15 02:23:27 stream closed
2016/10/15 02:23:27 stream opened
2016/10/15 02:23:27 stream closed
2016年10月17日 下午11:06 61楼
hi,可否有定时重启的代码。想每天自动重启kcp
2016年10月21日 上午2:22 62楼
我又前来学习了。下一步在搬瓦工上折腾KCP。
2016年11月11日 上午10:19 63楼
我在搬瓦工上建好了,加速也不错,但过段时间就连不上,等一段时间恢复了,过会又连不上,客户端有stream opened信息,服务器端无信息。是不是被搬瓦工禁止了?在服务器端有时候会出现broken pipe的信息。
2016年12月6日 下午9:38 64楼
感谢分享
2016年12月13日 下午6:41 65楼
请问博主能够录个操作视频?这样方便更多小白学习
2016年12月18日 下午12:45 66楼
为什么每次打开这个页面,会自动跳到评论这里,每次想看内容都不得不点一下top
2017年1月9日 下午12:19 67楼
楼主为什么我的不行啊?设置之后没法上谷歌
Incorrect Usage.
NAME:
kcptun – kcptun client
USAGE:
client_windows_amd64.exe [global options] command [command options] [arguments…]
VERSION:
20160823
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
–localaddr value, -l value local listen address (default: “:12948”)
–remoteaddr value, -r value kcp server address (default: “vps:29900”)
–key value pre-shared secret between client and server (default: “it’s a secrect”) [%KCPTUN_KEY%]
–crypt value aes, aes-128, aes-192, salsa20, blowfish, twofish, cast5, 3des, tea, xtea, xor, none (default: “aes”)
–mode value profiles: fast3, fast2, fast, normal (default: “fast”)
–conn value set num of UDP connections to server (default: 1)
–mtu value set maximum transmission unit for UDP packets (default: 1350)
–sndwnd value set send window size(num of packets) (default: 128)
–rcvwnd value set receive window size(num of packets) (default: 1024)
–datashard value set reed-solomon erasure coding – datashard (default: 10)
–parityshard value set reed-solomon erasure coding – parityshard (default: 3)
–dscp value set DSCP(6bit) (default: 0)
–nocomp disable compression
–help, -h show help
–version, -v print the version
2017年1月9日 下午7:30 68楼
测试成功 20M 电信。 用这个 速度一下子上去了。。
2017年1月16日 下午7:29 69楼
好麻烦,有简单点的吗
2017年1月27日 上午10:59 70楼
博主这个kcp能给网站80端口加速不?
2017年2月4日 上午9:03 1层
@禅猫 可以,不过你总不能让所有访问网站的人都安装客户端吧!
2017年2月7日 下午2:03 71楼
用着用着就broken pipe了,过几分钟会自行恢复
2017年4月28日 上午10:48 72楼
提醒各位!! 服务器端版本要和本地客户端版本要一致!
2017年5月17日 下午9:27 73楼
感谢你的分享。在client-config.json中,我有几个问题想请教:
1. 为啥要设为单线连接 “conn”: 1?
2. 为啥要设置60秒自动过期 “autoexpire”: 60?
谢谢你~
2017年5月25日 下午5:43 74楼
请问下这个有安卓客户端么,如果没有的话,我服务端配置了这个加速,安卓客户端还能继续连么
2017年7月5日 下午9:51 75楼
请问博主,在客户端配置文件client-config.json文件中,为什么“remoteaddr=10.10.10.10:29990”,这里的remoteaddr不应该是kcptun服务端的真实ip地址吗?我按照博主的教程,设置10.10.10.10后,kcptun客户端无法科学上网,把10.10.10.10改成自己的kcptun服务器的地址就能正常访问了,请问博主这里是不是没有详细说明一下