mkcp,全称kcptun multiplexing kcp,是一个基于KCP协议的多路复用加速工具。相对于shadowsocks等工具,它可以更有效地利用网络带宽,提供更稳定和快速的网络连接。本文将介绍mkcp的使用教程,包括如何安装、配置、优化和故障排查等内容。FAQ部分回答了人们常见的问题。
下载
在GitHub上,你可以找到所有版本的mkcp,下载适合你服务器的版本。可以直接用命令wget下载:
bash wget https://github.com/xtaci/kcptun/releases/download/vX.X.X/kcptun-linux-amd64-X.X.X.tar.gz
请将X.X.X替换为实际的版本号,例如:v20200918。
解压
使用tar命令解压缩刚才下载的tar包:
bash tar -xzf kcptun-linux-amd64-X.X.X.tar.gz
运行
进入解压后的目录:
bash cd server_linux_amd64
启动服务端:
bash ./server_linux_amd64 -l :29900 -t 127.0.0.1:22 –mode fast2
其中,-l参数表示服务端监听的地址和端口,-t参数表示后端服务(例如SSH服务)的地址和端口,–mode表示传输模式,例如fast2表示使用较快的模式。更多参数可以通过-h查看。
客户端配置
在客户端,可以使用graphical-user-interface(GUI)客户端或command-line-interface(CLI)客户端。这里只介绍CLI客户端的配置。可以使用以下命令启动客户端:
bash ./client_linux_amd64 -r SERVER_IP:29900 -l :1080 –mode fast2
其中,-r参数表示服务端的IP地址和端口,-l参数表示本地监听的地址和端口(可以用作SOCKS5代理),–mode表示传输模式。
服务端配置
mkcp支持多种配置方式,例如命令行参数、配置文件、环境变量等。命令行参数已经在安装和运行部分介绍过了。配置文件的示例如下:
ini
localaddr=:29900
remoteaddr=127.0.0.1:22
crypt=aes
key=passwd
mode=fast2
mtu=1350
可以通过-c
参数指定配置文件的路径:
bash ./server_linux_amd64 -c /path/to/config.json
常用配置
TCP Fast Open(TFO)
在Linux内核3.7版本中引入的TCP Fast Open(TFO)可以减少TCP的延迟,提高网络连接的响应速度。启用TFO可以通过以下命令:
bash echo 3 > /proc/sys/net/ipv4/tcp_fastopen
MTU
在使用mkcp时,MTU(Maximum Transmission Unit)的设置比较重要。默认情况下,mkcp使用1350字节的MTU。如果你的网络连接质量较好,可以将MTU设置为更大的值,例如1500。如果你的网络连接质量较差,可以适当减小MTU的值,例如1200。你可以通过以下命令修改MTU值:
bash echo 1500 > /proc/sys/net/ipv4/tcp_mtu_probing
内核参数
优化内核参数可以提高网络连接的速度和稳定性。下面是一些推荐的内核参数:
ini
fs.file-max = 1000000
fs.nr_open = 1000000
net.core.wmem_max = 16777216 net.core.rmem_max = 16777216
net.core.wmem_default = 262144 net.core.rmem_default = 262144
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.ip_forward = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ipfrag_high_thresh = 262144 net.ipv4.ipfrag_low_thresh = 196608
net.ipv4.icmp_echo_ignore_all = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.icmp_errors_use_inbound_ifaddr = 1
你可以将这些参数写入到/etc/sysctl.conf文件中,然后使用以下命令加载参数:
bash sysctl -p
UDP缓冲区
使用以下命令将UDP缓冲区大小设置为32MB:
bash echo 33554432 > /proc/sys/net/core/wmem_max
内存锁定
使用以下命令将mkcp进程锁定到内存中:
bash ulimit -l unlimited
日志
mkcp的日志信息输出到stderr。可以通过将stderr重定向到一个文件来收集日志信息:
bash ./server_linux_amd64 2> /path/to/logfile
调试信息
可以使用-v参数来输出调试信息:
bash ./server_linux_amd64 -v 2> /path/to/logfile
FAQ
mkcp有哪些传输模式?
mkcp有四种传输模式:fast2、fast3、normal和manual。fast2和fast3是快速模式,normal是普通模式,manual是手动模式。不同模式的性能和参数设置不同。详细信息可以通过-h
命令查看。
mkcp如何卸载?
可以直接删除解压后的目录,例如:
bash rm -rf server_linux_amd64
如何测试mkcp的速度和稳定性?
可以使用iperf3来测试TCP和UDP连接的速度和带宽。可以使用以下命令安装iperf3:
bash apt-get update apt-get install iperf3
启动服务端:
bash iperf3 -s
在客户端上测试TCP连接:
bash iperf3 -c SERVER_IP
在客户端上测试UDP连接:
bash iperf3 -c SERVER_IP -u -b 50M