9

Kcptun 基于 KCP 协议的 UDP 隧道,是一个非常简单和快速的隧道,它可以将 TCP 流转换...

 1 year ago
source link: https://www.toolsbook.org/2023/12/kcptun-kcp-udp-tcp-kcpudp.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Kcptun 基于 KCP 协议的 UDP 隧道,是一个非常简单和快速的隧道,它可以将 TCP 流转换为 KCP+UDP 流,降低延时,增加吞吐量

本博客曾经发布了通过 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-550x159.png

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

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

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

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

Kcp-server 是在 Kcptun 的基础上,添加了配置文件的支持,并简化了安装过程,一条命令即可配置完毕。

如果你是小白,而且看了后面的教程也看不懂的话,推荐直接使用 Kcp-server 吧,就是更新较原版略慢。

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

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

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

部署 Kcptun

2016.08.19 添加客户端可视化配置工具 Kcptun-GUI

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

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

2016.06.27 v20160627 发布,新参数 - nocomp,需要在两端同时使用以禁止压缩传输。

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

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

以下为手动配置方式:

本教程以 CentOS 6.5 64 位为例。

首先下载 Kcptun,可以到 GitHub 上获取最新版:

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

mkdir /root/kcptun
cd /root/kcptun
wget https://github.com/xtaci/kcptun/releases/download/v20160816/kcptun-linux-amd64-20160816.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,一个用于服务器,一个用于客户端。

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

创建 start.sh

vi /root/kcptun/start.sh

写入以下内容:

#!/bin/bash
cd /root/kcptun/
./server_linux_amd64 -l ":29900" -t "127.0.0.1:8388" -key test -mode fast2 > kcptun.log 2>&1 &
echo "Kcptun started."

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

  • -l 表示 Kcptun 的服务端监听端口,用于接收外部请求和发送数据,默认:29900,请选一个你喜欢的端口;
  • -t 表示要加速的地址,由于 Kcptun 和 Shadowsocks 在同一服务器,地址填写 127.0.0.1,而 8388 为 Shadowsocks 端口;
  • -key 是 Kcptun 的验证密钥,服务端和本地必须一致才能通过验证,请自行设置(可省略)默认:it’s a secrect,这里自定义为了 test;
  • -mode 为加速模式,默认 fast,这里使用 fast2。

响应速度:

fast3 > [fast2] > fast > normal > default

有效载荷比:

default > normal > fast > [fast2] > fast3

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

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

$ ./server_darwin_amd64 -h
NAME:
   kcptun - kcptun server
USAGE:
   server_darwin_amd64 [global options] command [command options] [arguments...]
VERSION:
   20160811
COMMANDS:
     help, h  Shows a list of commands or help for one command
GLOBAL OPTIONS:
   --listen value, -l value  kcp server listen address (default: ":29900")
   --target value, -t value  target server address (default: "127.0.0.1:12948")
   --key value               key for communcation, must be the same as kcptun client (default: "it's a secrect") [$KCPTUN_KEY]
   --crypt value             methods for encryption: aes, tea, xor, none (default: "aes")
   --mode value              mode for communication: fast3, fast2, fast, normal (default: "fast")
   --mtu value               set MTU of UDP packets, suggest 'tracepath' to discover path mtu (default: 1350)
   --sndwnd value            set send window size(num of packets) (default: 1024)
   --rcvwnd value            set receive window size(num of packets) (default: 1024)
   --nocomp                  disable compression
   --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)
   --help, -h                show help
   --version, -v             print the version

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

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

服务端:   -mtu 1400 -sndwnd 2048 -rcvwnd 2048 -mode fast2
客户端:   -mtu 1400 -sndwnd 256 -rcvwnd 2048 -mode fast2 -dscp 46
带宽计算公式:

在不丢包的情况下,有最大 - 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 下行带宽,否则只会浪费您的服务器带宽。

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

创建 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
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 为日志信息。

监听日志信息可以使用:

tail -f /root/kcptun/kcptun.log

停止服务端请使用:

sh /root/kcptun/stop.sh
根据大家的反馈,有朋友遇到了如下问题:
stop.sh: [[: not found

如果使用如下命令:

ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Dec 28  2015 /bin/sh -> dash

可以看到 sh 指向了 dash,而 dash 是不认识 “[[” 的。为了解决这个问题,可以将默认使用的 shell 更换为 bash:

ln -sf /bin/bash /bin/sh

切换回去请使用:

ln -sf /bin/dash /bin/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

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

配置客户端

以本地 Windows 64 位系统为例,首先下载 Kcptun 的 Windows 版本。

我这里先新建一个文件夹,命名为 Kcptun,然后下载:

https://github.com/xtaci/kcptun/releases/download/v20160816/kcptun-windows-amd64-20160816.tar.gz

解压到文件夹下。

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

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

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

2016.08.17 V1.0.3 发布

Kcptun_tools.png

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

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

Kcptun-gui-550x280.png

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

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

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

  • datashard
  • parityshard
  • nocomp
  • crypt

以下为手动创建启动文件的方法:

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

新建 run.vbs

Dim RunKcptun
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
'获取文件路径
currentPath = fso.GetFile(Wscript.ScriptFullName).ParentFolder.Path & "\"
'软件运行参数
exeConfig = "client_windows_amd64.exe -l :12948 -r 10.10.10.10:29900 -key test -mode fast2"
'日志文件
logFile = "kcptun.log"
'拼接命令行
cmdLine = "cmd /c "& currentPath & exeConfig  &" > "& currentPath & logFile &" 2>&1"
'启动软件
WshShell.Run cmdLine, 0, False
'等待 1 秒
'WScript.Sleep 1000
'打印运行命令
'Wscript.echo cmdLine
Set WshShell = Nothing
Set fso = Nothing
'退出脚本
WScript.quit

本地监听端口为 12948;服务器 IP 地址 10.10.10.10 端口 29900;验证密钥和服务端一致。其他参数说明见上面服务端配置的说明。

v20160616 新增参数:-conn,使用多线程连接。可尝试添加 -conn 4 以使用 4 线程连接服务器。

新建 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
:delStartup
reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "kcptun Client" /F>NUL 2>NUL

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

Kcptun_ports.png

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 服务端,并使用不同的端口,你可以将 start.sh 拷贝一份,然后修改其中的端口;
  • 各个 Kcptun 加速不同的 Shadowsocks 服务端端口,也就是 Shadowsocks 也需要开多端口。

Android 上使用

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

在路由器上使用

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

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

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

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

http://git.oschina.net/ragnaroks/KcptunGUI

Comments

Popular posts from this blog

IOS小火箭/Shadowsocks无需AppleID即可在线安装!

前言 在上一篇博客中已经分享了如何在电脑上通过  91助手来离线安装Shadowsocks IPA包 ,对于很多朋友来说,其实操作还是有点麻烦,同时还有下载到流氓软件的风险,适合有一定经验的朋友使用。 所以今天又给大家带来了另外一种更加安全快速的安装方法,同样不需要美区AppleID,只要能访问网站就可以进行,但是速度稍微有点慢,不过还是可以忍受的。 方法 1. 打开网页 在苹果IOS设备的Safari浏览器打开安装网页,安装网页如下图,十分简单。 2. 在线安装 点击在线安装,然后进入安装流程,等待安装完成即可使用,可能部分IOS设备安装后,会出现闪退的问题,大家可以可多尝试几个在线安装包。 3. 安装网址 网址1: https://shadowsockshelp.github.io/ios/ 网址2: https://appios.ml/Shadowrocket/ 网址3: https://azhanlang.github.io/shadowrocket/index.html

苹果手机/IOS/IPAD如何离线安装小火箭Shadowrocket.IPA文件?

前言 最近很多小伙伴在苹果手机或者其他IOS设备上都没法安装第三方IPA软件,比如小火箭(Shadowrocket)等等,但是其实安装方法非常的简单,网上说的PP助手和爱思助手已经完全无法安装了,所以接下来将会介绍另外一款可以给IOS设备安装第三方IPA软件包的工具。 方法 第一步 下载  91助手V6(一定要这个版本) ,并安装到电脑上,打开后如下图(注意该软件有广告,可无视)。 第二步 连接手机,并点击屏幕上弹出的“信任”提示,然后选择91助手,我的设备->应用->添加应用,然后选择IPA文件,即可开始安装,可点击右上角的下载中心按钮,进入下载中心查看安装进度,安装完成后如下图。 安装结束 好了,到此离线安装IPA的过程就结束了,Iphone手机等IOS设备都可以按此方法进行! 下载链接 Shadowrocket , 91助手V6

利用Cloudflare等免费CDN翻墙的科学上网方法 — V2Ray Cloudflare

上次写了 V2Ray 之后,我又发现另一个现象。 防火墙把很多经常被用比搭梯子或机场的 VPS 供应商的服务器也封了,导致连最基本连接 SSH 都不行,什至连本身行运行的好好的服务器都停工了,那该怎么办呢? 最后我找到一个最优解 — — CDN。 用这个方法什至可以把已经宣布死亡的服务器,起死回生! 付出的代价就是在 Ping Time 速度上会有一点点的下降,整体的速度还是可以的。  重点是Cloudflare这个CDN服务是免费的。  当然不一定是 V2Ray Cloudflare 的,如果你有经验的话,也可以是 V2Ray CDN (其他 CDN 什至国内的都可以)。 还没有试过 V2Ray 的朋友,可以先去试试看。 大量Shadowsocks被封的另一出路——V2Ray新晋翻墙工具架设教学 这个方法需要用到以下的东西: Cloudflare 账户 域名 Vultr VPS 服务器 30分钟的时间 一颗折腾的心 这个教程我会用一个「死掉」的 VPS 来做例子,可以看到我 「站长之家」 的 Ping 工具检测的结果,是已经死得不能再死啦,没有一个地方 Ping 得动,我们来看看怎么把它起死回生! 如果自己还没有 VPS 的话,可以 先看这篇文章,自己先去建一个。 连结域名和Cloudflare 购买域名 没有域名的朋友,可以先去 Namecheap 买一个最便宜的域名,我看到最便宜的是「. xyz」一年才 1 美元的价格。 没有域名的话,这个方法是用不了的哦。 Namecheap教学 — USD$1一年的顶级域名? 注册Cloudflare 到  https://dash.cloudflare.com/sign-up  注册一个免费账号,过程很简单我就不再详说了。 注册完之后,它应该会问你填一个域名,我们就把刚买到的域名填进去。 如果还是不知道怎么做的话,可以参考这里: https://seafoodholdhand.com/lnmp-wordpress-tutorial-in-1-hour-nginx-教学/#注冊_Cloudflare_CDN 停用 Proxy 完成连接后,点 DNS 你大概会看到差不的画面。 开始下一步之前,把那个「橙色云」点一下变成「灰色云」。 安装 V2Ray + WebSocket + TLS 先用 SSH 登入我们已经死掉的 VPS

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK