镜像域名: doub.bid 提供给无翻墙能力的人使用,请大家互相通知~~ 有能力的建议访问 doub,io!
投稿文章 | 广告投放 | 交流群:Telegram

Shadowsocks另一种双边加速软件 —— KCPTun(服务端教程)

Shadowsocks Toyo 33评论
文章目录
[显示]
本文最后更新于 2017年1月8日 16:03 可能会因为没有更新而失效。如已失效或需要修正,请留言!

本来是不想写 KCPTun 的教程的,几个月前就发现这个软件了,也有人想让我写,但是我很讨厌Finalspeed和Netspeed,所以连带着KCPTun后也不喜欢。

但是最近发现很多软件都开始支持这玩意了,比如Shadowsocks安卓版、V2ray、一些路由器固件,再加上最近让我写这个软件的人也挺多,那我就干脆写了吧,反正最近没东西写挺无聊的。

本篇教程是 KCPTun 服务端的教程,客户端的请看:KCPTun 客户端教程 + 自写KcpTun Tools辅助工具 ,其他KCPTun教程 请看:这里


KCPTun简介

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

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

Kcptun 工作示意图:

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

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

KCPTun安装

本教程使用的是 Debian 64x 系统。

下载KCPTun,并解压:

注意:下面的KCPTun文件下载可能不是最新的地址,最新文件的下载地址看这里:Github-kcptun-releases,直接替换第三行 wget 后面链接的版本号就行了。
注意:KCPTun不分系统版本,只分主系统和位数,比如 64x 就选择 kcptun-linux-amd64-XXX.tar.gz32x 就选择 kcptun-linux-386-XXX.tar.gz ,Centos/Debian/Ubuntu都一样。
mkdir /root/kcptun
# 新建一个文件夹
cd /root/kcptun
# 进入刚才新建的文件夹
wget https://github.com/xtaci/kcptun/releases/download/v20161222/kcptun-linux-amd64-20161222.tar.gz
# 下载最新的 kcptun-linux-amd64 文件
tar -zxvf kcptun-linux-amd64-20161222.tar.gz
# 解压刚才下载的文件

解压之后会发现只有两个文件: client_linux_amd64 server_linux_amd64,第一个是是客户端文件(linux的客户端),第二个是服务端文件。

目前KCPTun已经加入了配置文件设定,但没有任何启动脚本,所以需要新建一些脚本。

注:下面需要 vi 操作,不会的可以看这个 vi 教程:Linux中VIM编辑器的真 · 简单使用教程 ,
简单的说就是 vi XXX 打开文件,按 I键 进入编辑模式,然后输入内容后按 Esc键 退出编辑模式,然后按 :wq 保存并退出。

创建 start.sh:

vi /root/kcptun/start.sh

写入以下内容:

#!/bin/bash
cd /root/kcptun/
./server_linux_amd64 -c /root/kcptun/server-config.json 2>&1 &
echo "Kcptun started."

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

创建配置文件:

vi /root/kcptun/server-config.json

写入以下内容:

{
    "listen": ":2333",
    "target": "127.0.0.1:8388",
    "key": "dou-bi.co",
    "crypt": "aes-192",
    "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,
    "log": "/root/kcptun/kcptun.log"
}
  • listen 表示 Kcptun 的服务端监听端口,用于接收外部请求和发送数据,默认 2333
  • target 表示要加速的地址,由于 Kcptun 和 Shadowsocks 在同一服务器,地址填写 127.0.0.1(不需要改,这是指本机IP,除非你有多个IP),而 8388 为 Shadowsocks 服务端监听端口
  • key 是 Kcptun 的验证密钥,上面的启动脚本参数默认加上了 -key dou-bi.co 如果不需要可以删掉,服务端和本地必须一致才能通过验证,请自行设置;
  • mode 为加速模式,默认 fast2 ;
  • crypt 为加密方式,默认 aes-192 ;
  • nocomp 为压缩传输,默认 false 表示开启压缩传输。

其他参数可以参考项目主页的介绍。

下面是引用官方介绍:

响应速度:

fast3 > [fast2] > fast > normal > default

有效载荷比:

default > normal > fast > [fast2] > fast3

中间 mode 参数比较均衡,总之就是越快越浪费带宽,推荐模式 fast2。

其他参数,请使用 ./server_linux_amd64 -h 查看,更深层次的参数调整需要理解 KCP 协议,并通过“隐藏参数”调整。

作者推荐配置参数:

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

SERVER:   -mtu 1400 -sndwnd 2048 -rcvwnd 2048 -mode fast2
CLIENT:   -mtu 1400 -sndwnd 256 -rcvwnd 2048 -mode fast2 -dscp 46

注意:客户端和服务端的参数 -sndwnd 2048 -rcvwnd 2048 这两个值不要大于你的本地宽带,否则流量消耗会浪费好几倍,100M就是2048,50M就是1024。这两个值可以逐渐调小,但是不能比本地的实际宽带大!

注意:产生大量重传时,一定是窗口偏大了

创建 stop.sh:

vi /root/kcptun/stop.sh

写入以下内容:

#!/bin/bash
PID=`ps -ef | grep server_linux_amd64 | grep -v grep | awk '{print $2}'`
if [ "" != "$PID" ]; then
 echo "killing $PID"
 kill -9 $PID
else
 echo "Kcptun not running!"
fi

注意:这里的 server_linux_amd64 ,自行替换为你的 服务端名称,64位的系统就是示例的这个,如果是32位的则是 server_linux_386 。

创建 restart.sh:

vi /root/kcptun/restart.sh

写入以下内容:

#!/bin/bash
cd /root/kcptun/
echo "Stopping Kcptun..."
bash stop.sh
bash start.sh
echo "Kcptun started."

给上面创建的脚本添加执行权限:

chmod +x /root/kcptun/*.sh

启动服务端:

sh /root/kcptun/start.sh

日志文件在:/root/kcptun/kcptun.log

监听日志信息:

tail -f /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

升级服务端

重复一开始的步骤,下载最新版本的压缩包然后解压覆盖源文件,记得先 停止KCPTUN运行再覆盖。

cd /root/kcptun
# 进入新建的文件夹
wget https://github.com/xtaci/kcptun/releases/download/v20161222/kcptun-linux-amd64-20161222.tar.gz
# 下载最新的 kcptun-linux-amd64 文件
tar -zxvf kcptun-linux-amd64-20161222.tar.gz
# 解压刚才下载的文件

故障排除

  • 客户端和服务器端皆无 stream opened信息。

连接客户端程序的端口设置错误。

  • 客户端有 stream opened信息,服务器端没有。

连接服务器的端口设置错误,或者被防火墙拦截。

  • 客户端服务器皆有 stream opened信息,但无法通信。

上层软件的设定错误。

注意:日志信息在你的客户端或者服务端同目录下的 kcptun.log 中。

注意事项

KcpTun有个缺点,就是实际流量消耗 最少是 你使用量的两倍!如果参数调整有问题,可能会浪费十几倍的流量,而加速幅度也并不会上升多少。

作者的解释:

  • 出现这个情况有几种可能:
  • ISP 对UDP丢包极高,例如50%
  • 服务器,客户端本身的带宽较低,可以适当调低sndwnd /rcvwnd
  • 可以尝试 -dscp 46参数降低丢包率。

希望你们注意一下这个问题,可能搞不好就被 IDC 以滥用网络的名义给封VPS了。


本篇教程是 KCPTun 服务端的教程,客户端的请看: KCPTun 客户端教程 + 自写KcpTun Tools辅助工具,其他KCPTun教程 请看:这里

参考资料:https://github.com/xtaci/kcptunhttps://blog.kuoruan.com/102.html

转载请超链接注明:逗比根据地 » Shadowsocks另一种双边加速软件 —— KCPTun(服务端教程)
责任声明:本站一切资源均原创或收集自互联网,仅作交流学习之用,请勿用作商业!如造成任何后果,本站概不负责!

赞 (14)or打赏
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(33)个小伙伴在吐槽
  1. 请问有没有方法开多端口模式?
    小柴2017-03-31 15:09 回复
  2. 想问一下tcptun能和锐速共存吗?(或者能和BBR共存吗)
    kaede2017-03-23 22:34 回复
  3. 楼主这个是否也可以加入一键脚本啊~ 这样就方便许多了~
    WWW2017-02-03 18:27 回复
  4. 泥嚎大大!感谢你的教程!.客户端有stream opened 的信息,服务器的日志是 dial tcp 127.0.0.1:4666: getsockopt: connection refused (4666是Shadowsocks 服务端监听端口)请问如何解决?
    Thisisafish2017-01-23 00:13 回复
    • 很明显“connection refused”链接拒绝,你说4666是ShadowsocksR服务端的端口,那么说明KCPTUN链接ShadowsocksR服务端被拒绝了,你需要检测KCPTUN的设置和 ShadowsocksR服务端当前状况。
      Toyo2017-01-23 10:46 回复
  5. 您好,我这里客户端有stream opened服务端没有,但是确定客户端服务器端端口设置正确,两边都没有开防火墙,不明白为什么
    Mayfield2017-01-20 18:38 回复
    • 客户端有stream opened,但服务端没有,说明客户端没有正常链接到服务端,或者说服务端没有收到数据,所以没有回应/反应。
      Toyo2017-01-20 20:01 回复
      • 用的是vultr的vps,所以是……没救吗…… :oops:
        Mayfield2017-01-20 22:15 回复
        • 已解决,服务器端配置listen target都配置为服务器公网ip
          Mayfield2017-01-20 23:37 回复
  6. 用bandwagon测试了一下,只跑了SS和KCP,跑了两天之后148M的内存满了,没有查是谁占用的支持重启了VPS,下次如果还出现这样的情况就要查查看了。电信网络下加速很明显,流量爆炸,看视频的话300G一个月的流量肯定不够用。
    ww2016-12-28 23:35 回复
  7. 您好!请问“客户端服务器,但无法通信。——上层软件的设定错误。”上层软件指的是什么?我用的搬瓦工,设置都正确,有 stream opened,但是就是连接不上。
    sk2016-12-25 23:20 回复
    • 具体说不清,QQ聊,出示客户端和服务端配置截图。
      Toyo2016-12-25 23:49 回复
  8. 请问服务端启动时显示 unexpected EOF是怎么回事?还有教程里各个端口好乱啊,那个2333用改吗,还有那个你说的shadowsocks监听端口8388用改吗
    潜龙勿用2016-12-06 21:05 回复
    • 当然要改,2333指的是,KCPTUN服务端监听的端口,8388指的是VPS上面Shadowsocks服务端监听的端口,KCPTUN客户端填写的加速端口就是2333。乱不乱就看你理解了没有,不理解当然觉得乱。
      Toyo2016-12-06 21:09 回复
  9. "连接服务器的端口设置错误,或者被防火墙拦截"请问服务器的端口是指上面哪个啊
    喵喵喵喵?2016-11-21 22:50 回复
    • 教程示例中的KCPTUN服务端监听端口“2333”
      Toyo2016-11-22 00:23 回复
  10. 升级的时候tar解压报错,是不是要把旧的.tar.gz文件删除?
    jdbskjb2016-11-08 18:04 回复
    • 报什么错误?因为版本号不一样,所以每次下载的压缩包都是不一样的,不会重复。
      Toyo2016-11-08 19:44 回复
      • 但教程里用*代替版本号了
        jdbskjb2016-11-08 20:57 回复
        • 这一条?
          tar -zxvf kcptun-linux-amd64-*.tar.gz
          

          那你不会变通么,教程是死的人是活的啊。
          Toyo2016-11-08 21:31 回复
          • 换掉*后没问题了,主要之前安装的时候用*没出错,现在更新时就没想那么多。谢谢帮助
            jdbskjb2016-11-08 22:25 回复
  11. 你好 toyo 我按以上代码配置成功 今天发现kcptun 出新版本了 请问 服务端的升级命令如何写呀
    晓晓2016-10-10 08:04 回复
    • cd /root/kcptun
      # 进入刚才新建的文件夹
      wget https://github.com/xtaci/kcptun/releases/download/v20161009/kcptun-linux-amd64-20161009.tar.gz
      # 下载最新的 kcptun-linux-amd64 文件
      tar -zxvf kcptun-linux-amd64-*.tar.gz
      

      没有什么升级指令,就是下载新版本然后解压覆盖源文件,记得关闭kcptun。
      Toyo2016-10-10 11:08 回复
      • 好的 谢谢啦 :mrgreen:
        晓晓2016-10-10 15:58 回复
  12. tar -zxf kcptun-linux-amd64-*.tar.gz # 解压刚才下载的文件==== 然后下面的安装命令呢,怎么么有啊?还是按照教程,写好那些脚本就可以了?小白!!
    DAY2016-08-11 16:52 回复
    • 一、脚本命令 的确是手误,已经改过来了。
      二、没有配置文件,kcptun默认只有两个文件,一个是linux的客户端一个是linux的服务端,所以才需要做启动脚本的。配置参数都在 start.sh 脚本中。
      三、和第二个答案一样,这个软件的所有系统版本不需要任何安装,直接解压后创建脚本启动就行了。
      
      Toyo2016-08-11 17:11 回复
  13. 那个配置文件client.json是在什么文件夹里面(安装位置?)
    DAY2016-08-11 16:46 回复
  14. 创建 restart.sh: vi /root/kcptun/stop.sh 这个错了吧?restart.sh ? 还有,那个配置文件client.json是在什么文件夹里面(安装位置?)
    DAY2016-08-11 16:46 回复
  15. 2016/08/08 16:39:12 [ERR] yamux: Failed to read header: broken pipe 2016/08/08 16:39:12 remote address: :43822 2016/08/08 16:39:12 dial tcp 127.0.0.1:8388: getsockopt: connection refused 日志一直这样显示而且连不上怎么回事
    Ryan2016-08-08 16:43 回复
  16. 搬瓦工ubuntu14 stop会报错
    grey2016-08-08 10:33 回复
    • 我的测试环境是Debian,Ubuntu应该是差不多的。尝试换成debian吧,其他的系统我基本不用
      Toyo2016-08-08 10:41 回复
    • 显示 Stopping Kcptun... stop.sh: 3: stop.sh: [[: not found
      grey2016-08-08 10:43 回复
      • 本来有两对[],去掉一对就好~
        langhun2016-08-12 18:19 回复