KCPTun 简介
- Kcptun 是一个非常简单和快速的,基于 KCP 协议的 UDP 隧道,它可以将 TCP 流转换为 KCP+UDP 流。而 KCP 是一个快速可靠协议,能以比 TCP 浪费 10%-20% 的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。
- Kcptun 是 KCP 协议的一个简单应用,可以用于任意 TCP 网络程序的传输承载,以提高网络流畅度,降低掉线情况。由于 Kcptun 使用 Go 语言编写,内存占用低(经测试,在 64M 内存服务器上稳定运行),而且适用于所有平台,甚至 Arm 平台。
- KCP 协议
Kcptun 项目地址
KCPTun 安装
- 本教程使用的是 CentOS 6 64x 系统。
下载 KCPTun
- 注意:KCPTun 不分系统版本,只分主系统和位数
64x
就选择kcptun-linux-amd64-XXX.tar.gz
,
32x
就选择kcptun-linux-386-XXX.tar.gz
,
Centos/Debian/Ubuntu 都一样。
yum install wget & mkdir /root/kcptun
# 新建一个文件夹
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
# 解压刚才下载的文件
解压之后会发现只有两个文件: client_linux_amd64 和 server_linux_amd64,第一个是是客户端文件(linux的客户端),第二个是服务端文件。
下载 / 创建快捷脚本
目前 KCPTun 已经加入了配置文件设定,但没有任何启动脚本,所以需要新建一些脚本。
懒人版
- 请直接下载以下文件到你服务器
cd /root/kcptun &
wget https://raw.githubusercontent.com/catonisland/kcptun/master/start.sh &
wget https://raw.githubusercontent.com/catonisland/kcptun/master/stop.sh &
wget https://raw.githubusercontent.com/catonisland/kcptun/master/restart.sh &
wget https://raw.githubusercontent.com/catonisland/kcptun/master/server-config.json
- 修改其中的参数:
- start.sh 中:
-l 2333
表示 Kcptun 的服务端监听端口,用于接收外部请求和发送数据,请修改成你想用的;
server_linux_amd64
,自行替换为你的 服务端名称,64 位的系统就是示例的这个,如果是 32 位的则是server_linux_386
; - stop.sh 中:
server_linux_amd64
,自行替换为你的 服务端名称,64 位的系统就是示例的这个,如果是 32 位的则是server_linux_386
; - server-config.json 中:
请参考详细版中的解释进行适当修改
详细版
创建 start.sh
vi /root/kcptun/start.sh
写入以下内容:
#!/bin/sh
cd /root/kcptun/
./server_linux_amd64 -l ":2333" -c /root/kcptun/server-config.json > kcptun.log 2>&1 &
echo "Kcptun started."
- 注意
-l 2333
表示 Kcptun 的服务端监听端口,用于接收外部请求和发送数据,请修改成你想用的;
server_linux_amd64
,自行替换为你的 服务端名称,64 位的系统就是示例的这个,如果是 32 位的则是server_linux_386
;
创建 stop.sh
vi /root/kcptun/stop.sh
写入以下内容:
#!/bin/sh
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/sh
cd /root/kcptun/
echo "Stopping Kcptun..."
sh stop.sh
sh start.sh
echo "Kcptun started."
创建配置文件
vi /root/kcptun/server-config.json
写入以下内容:
注意:逗比的教程里面加密方式是 salsa20 ,但是他的客户端默认是 aes ! 这里我们均设置成 aes 吧!
{
"listen": ":2333",
"target": "127.0.0.1:8388",
"key": "test",
"crypt": "aes",
"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
}
- 参数解释
- listen 表示 Kcptun 的服务端监听端口,用于接收外部请求和发送数据,默认 2333;
- target 表示要加速的地址,由于 Kcptun 和 Shadowsocks 在同一服务器,地址填写 127.0.0.1(不需要改,这是指本机 IP,除非你有多个 IP),而 8388 为 Shadowsocks 服务端监听端口;
- key 是 Kcptun 的验证密钥,上面的启动脚本参数默认加上了 -key test ,如果不需要可以删掉,服务端和本地必须一致才能通过验证,请自行设置;
- mode 为加速模式,默认 fast,推荐使用 fast2 ;
- crypt 为加密方式,默认 salsa20 ;
- nocomp 为压缩传输,默认 false 表示开启压缩传输。
- 其他参数可以参考项目主页的介绍。
启动服务端
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/v20161009/kcptun-linux-amd64-20161009.tar.gz
# 下载最新的 kcptun-linux-amd64 文件,具体文件路径要自己改
tar -zxvf kcptun-linux-amd64-*.tar.gz
# 解压刚才下载的文件
节选自:https://liyuans.com/archives/kcptun-server-configuration-tutorial.html