menu Chancel's blog
rss_feed
Chancel's blog
有善始者实繁,能克终者盖寡。

Kcptun降低弱网下的网络延迟

作者:Chancel Yang, 创建:2021-01-20, 字数:2522, 已阅:1627, 最后更新:2024-03-10

作为正常用途的VPS,如果不想备案的话,海外VPS是非常不错的选择

海外vps通常具备大宽带,缺点是延迟较高,kcptun能有效降低延迟,缺点是会消耗更多的流量

1. Kcptun

1.1. 介绍

kcptun是一个开源的网络传输工具,它通过KCP协议提供了一种快速、可靠、安全的传输方式,KCP协议是一个用户空间实现的可靠传输协议,与TCP协议相比,具有更低的延迟和更高的吞吐量

kcptun利用KCP协议在传输层上进行优化,可以有效地提升网络传输的性能和稳定性。它常用于网络加速、VPN等场景,可以帮助提升网络连接的稳定性和速度

Kcptun早期是作为go语言版本实现kcp协议的建议测试工具,作为端口转发工具出现

KCP的架设需要一个客户端一个服务端,如图所示(图来自Github项目介绍)

掌握Kcptun实现的理论知识复杂,如有兴趣,可以参考官方的仓库xtaci/Kcptun下的References

1.2. 准备

Kcptun现已支持众多系统,包括Linux/Windows/Solaris等等,也支持ARM架构的系统

xtaci/Kcptun - Release选择适合自己操作系统的包下载即可

下面是实践加速SSH端口访问的设置

假设本地机器为 192.168.100.1,目标服务器IP为 8.8.8.8,两个操作系统都是Ubuntu2204 LTS

根据系统版本,从github仓库的release下载压缩后后解压会得到

  • server_linux_amd64
  • client_linux_amd64

2. 实践

2.1. 服务端

server_linux_amd64发送到服务器8.8.8.8上,运行./server_linux_amd64 --help可以获得运行帮助

在运行帮助中选择自己需要的参数,然后编辑config.json

JSON
{
  "listen": "0.0.0.0:30022",
  "target":"127.0.0.1:22",
  "key": "[my-secert-key]",
  "crypt": "aes-256-cfb",
  "mtu": 1350,
  "sndwnd": 1024,
  "rcvwnd": 1024,
  "datashard": 10,
  "parityshard": 3,
  "dscp": 0,
  "conn": 1,
  "autoexpire": 60,
  "nocomp": false
}

参数解释

  • listen:监听地址与端口,0.0.0.0表示监听所有网口
  • key:客户端连接需要验证key一致
  • target:加速的目标端口,这里输入22是SSH的端口
  • crypt:加密方式,客户端与服务端必须一致
  • mtu:数据包大小,这个大小会影响运营商敏感

运行服务端程序

Bash
./server_linux_amd64 -c config.json

2.2. 客户端

与服务端相对的,我们编辑config.json

JSON
{
 "mtu": 1350,
 "key": "[my-secert-key]",
 "nocomp": false,
 "remoteaddr": "8.8.8.8:30022",
 "datashard": 10,
 "autoexpire": 60,
 "acknodelay": false,
 "sndwnd": 1024,
 "nc": 0,
 "rcvwnd": 1024,
 "crypt": "aes-256-cfb",
 "dscp": 0,
 "conn": 1,
 "localaddr": "127.0.0.1:40022",
 "nodelay": 0,
 "parityshard": 3
}

参数解释

  • remoteaddr:服务端的地址与端口
  • localaddr:本地监听端口,运行后访问127.0.0.1:40022就相当于访问8.8.8.8:22

运行客户端程序

Bash
./client_linux_amd64 -c config.json

2.3. 测试

执行SSH测试Kcptun连接是否可用

Bash
ssh user@127.0.0.1 -p 40022

如有问题,可用查看客户端的Kcptun输出和服务端Kcptun运行日志输出

3. 尾声

使用Kcptun可以加速非常多服务,例如SSH/SAMBA/FTP等基础服务,降低延迟效果明显

不过部署可能略显繁琐,运行方法可以考虑使用Supervisor进行部署

Supervisor配置文件参考

INI
[program:kcptun-ssh]
command=client_linux_amd64 -c config_ssh.json
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
stdout_logfile_maxbytes=10MB
stdout_capture_maxbytes=1MB
user=app

参考资料

  • https://github.com/xtaci/Kcptun

[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
gravatar
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]