自从FS废了以后,老高一直在寻找一个替代品,直到发现了kcptun,老高的搬瓦工又迎来了第二春。

kcptun_logo

其他工具

锐速 finalspeed

下载

项目主页,通过源码我们可以看到它使用了GO语言编写。

发布地址,在对应的平台直接复制链接,然后下面的运行命令即可下载,并解压

[ -d ~/kcptun ] || mkdir ~/kcptun && cd ~/kcptun
wget https://github.com/xtaci/kcptun/releases/download/v20161202/kcptun-linux-amd64-20161202.tar.gz
tar zxf kcptun-linux-amd64-20161202.tar.gz && rm kcptun-linux-amd64-20161202.tar.gz

此时,我们会得到两个文件,我们需要在服务器和客户端都下载好这个文件!

服务器端(Linux)

➜ ls
client_linux_amd64  server_linux_amd64

客户端(macOS)

➜ ls
client_darwin_amd64 server_darwin_amd64

原理

运行前我们先结合下图熟悉一下它的原理,说白了就是将之前shadowsocks的数据流又做了一次代理,让流量跑在更快的UDP协议上!

kcptun

也就是说我们需要在kcptun的服务器端指定当前shadowsocks服务器的端口,然后在将其代理为一个新的端口

在客户端,我们也需要运行kcptun,但是我们直接连接的还是原本的shadowsocks客户端,但是我们需要将原客户端的服务器IP改为本地服务器的IP,一般为127.0.0.1,端口改为本地kcptun的服务端口。而kcptun的客户端只需要知道kcptun服务器的IP和地址即可!

需要注意的是对于shadowsocks的服务器来说,可以想象kcptun是不存在的,所以其加密方式是对应的,如果原来用的aes和phpgao作为加密方式和密码,现在的也不需要变化,需要变化的只是服务器的IP和端口。

聪明的你肯定已经想到了,kcptun的服务端与客户端之间也有自己的认证与加密方式,其二者也是对应的。

运行

是时候动手了!

假设

shadowsocks服务加密方式为: rc4-md5
kcptun的服务加密方式为: aes(不指定时默认)

shadowsocks服务器IP地址为: 123.321.123.123
shadowsocks服务器端口号为: 3306

shadowsocks客户端IP地址为: 127.0.0.1
shadowsocks客户端端口号为: 1080

kcptun的服务器端口号为: 4001
kcptun的客户端端口号为: 1070

服务端

./server_linux_amd64 -t "127.0.0.1:3306" -l ":4001" -mode fast2

客户端

./client_darwin_amd64 -r "123.321.123.123:4001" -l ":1070" -mode fast2

然后新建本地shadowsocks客户端的服务器配置为⤵️

ss_client

以上我们就完成了最简单的配置,现在可以在chrome里配置代理为SOCKS5,IP为127.0.0.1,端口号为1080。

ps. 如果总是出现getsockopt: connection refused错误,很有可能是弄错了端口信息!


更多

如果想更便捷的使用kcptun,我们可以这样做。

配置化

kcpdump支持指定配置文件config.json,与shadowsocks类似。

服务器端

# 在服务器端保存为server.json
{
    "listen": ":4001",
    "target": "127.0.0.1:3306",
    "key": "tester",
    "crypt": "aes-192",
    "mode": "fast2"
}

服务器端执行命令

./server_linux_amd64 -c config.json

客户端

# 在客户端保存为client.json
{
    "localaddr": ":1070",
    "remoteaddr": "123.321.123.123:4001",
    "key": "tester",
    "crypt": "aes-192",
    "mode": "fast2"
}

客户端端执行命令

./client_darwin_amd64 -c config.json

开机启动

vi /etc/rc.local

# 服务器端
nohup /path/to/server_linux_amd64 -c /path/to/server.json >/dev/null 2>&1 &

# 客户端
nohup /path/to/client_darwin_amd64 -c /path/to/client.json >/dev/null 2>&1 &