KcpTun 加速 Shadowsocks
KCP 是一个快速可靠的 ARQ 协议,通过将 TCP 流量分拆到 UDP 传输,以增加流量的代价去获得低延时,从而大幅提高科学上网的流畅度。
KCPTun 是 GO 实现 KCP 协议的工具,由服务端和客户端两部分组成,借助它作远程端口转发可以大幅提高 Shadowsocks(下简称 SS)的速度。
总体概述
笔者手上有一个 AWS 上运行的 EC2 实例,系统为 RHEL 7.4,上面跑着一个 ss-server 端的 daemon 进程。为了把 SS 流量通过 KcpTun 隧道转发,需要在 EC2 上安装 KcpTun-Server,客户端目标机安装 KcpTun-Client。
Shadowsocks 服务端
ss-server 安装运行在 EC2 上,配置如下:
1
2
3
4
5
6
7
{
"server": "0.0.0.0",
"server_port": 6789,
"password": "your_ss_passwd",
"timeout": 300,
"method": "aes-256-cfb"
}
KcpTun 服务端
在 KcpTun Release 列表选择系统对应的版本,本例的 EC2 是 64 位 RHEL,故选择最新的 linux-amd64
版本:
在 EC2 下载 KcpTun 二进制程序包:
1
$ wget https://github.com/xtaci/kcptun/releases/download/v20180810/kcptun-linux-amd64-20180810.tar.gz
解压:
1
$ tar zxvf kcptun-linux-amd64-20180810.tar.gz -C KCPTUN_DIR
KCPTUN_DIR
替换为放置 KcpTun 的自定义目录。
每个发行包里面都含一个 Server 和一个 Client,在 EC2 上只需使用其中的文件 server_linux_amd64
即可。
接着,在 KcpTun 目录内新建一个 JSON 配置文件,可取名为 kcptun-server-config.json
,添加如下内容:
1
2
3
4
5
6
7
{
"target": "127.0.0.1:6789",
"listen": ":7890",
"mode": "fast2",
"key": "your_kcp_passwd",
"crypt": "aes-128"
}
其中:
target
- 指向本机 ss-server 的服务{IP}:{Port}
listen
- KcpTun 监听端口mode
- KcpTun 模式,可选有fast3
,fast2
,fast
,normal
(默认:fast
)key
- KcpTun-Server 和 KcpTun-Client 之间的密码crypt
- 加密方式,不填默认aes
更加具体的参数用法及含义可以执行以下命令获得:
1
$ ./server_linux_amd64 -h
运行 KcpTun 服务端前,需要确保两点:
target
指向的 ss-server 正在运行。EC2 的 VPC 开放如下规则:
Inbound:
Type Protocol Port Range Source Custom UDP Rule UDP 7890 0.0.0.0/0 Custom TCP Rule TCP 7890 0.0.0.0/0 Outbound:
Type Protocol Port Range Source All TCP TCP 0 - 65535 0.0.0.0/0 All UDP UDP 0 - 65535 0.0.0.0/0
接下来后台运行 KcpTun-Server:
1
$ nohup ./server_linux_amd64 -c /path/to/kcptun-server-config.json > /dev/null 2>&1 &
KcpTun 客户端
相应的,客户端机器也需要运行一个 KcpTun-Client 和一个 SS-Client。
选择 1. Shadowsocks-X-NG
如果是在 Mac 机器上,则比较简单:ShadowsocksX-NG-1.7.1 已经在 SS-Client 的基础上集成了 KcpTun-Client,因此只需安装配置一个客户端软件即可。
Shadowsocks-X-NG 配置如下:
Preferences..选择
Kcptun
项:Local Kcptun Listen Address 填
127.0.0.1
Local Kcptun Listen Port 填写客户端机器空闲端口,本例为
7086
这两项意思为 Kcptun-Client 运行在本地
127.0.0.1:7086
。进入Servers→Server Preferences..添加配置,勾选 Enable over kcptun,如下图:
右侧面板以横线为界,上半部分的 Address 为 EC2 的公网 IP;Encryption 、 Password 与 EC2 上的 SS-Server 配置一致。
下半部分的 Kcptun Port , Mode, Encryption 与 EC2 上的 KcpTun-Server 配置一致。
其中 Kcptun Port 即为 Kcptun-Server 的
listen
值,Password 为 KcpTun-Serve 的Key
。
选择 2. 官方客户端
如果客户端机器平台不是 Mac,那么可以直接使用 KcpTun 的官方 Client,为了方便可以建立配置文件,命名为 kcptun-cli-config.json
:
1
2
3
4
5
6
7
{
"remoteaddr" : "EC2_IP:7890",
"localaddr" : "127.0.0.1:7086",
"mode" : "fast2",
"key" : "your_kcp_passwd",
"crypt" : "aes-128",
}
daemon 运行 KcpTun-Client:
1
$ nohup ./client_darwin_amd64 -c /path/to/kcptun-cli-config.json > /dev/null 2>&1 &
Shaowsocks GUI 客户端使用配置:
1
2
3
4
5
6
7
8
9
{
"method" : "aes-256-cfb",
"server" : "127.0.0.1",
"password" : "your_ss_passwd",
"local_address" : "127.0.0.1",
"server_port" : 7086,
"timeout" : 60,
"local_port" : 1080
}
不出意外,此刻你已体验到了 KCP 的快感。笔者实测,YouTube 视频码率用 Auto
模式,使用纯 SS,加载视频为 480P。当使用 KcpTun 后,加载分辨率跳到了 1080P!
后话
Kcptun-Client 目前没有 iOS 平台的 APP,暂时只能用一台墙内 VPS 运行 Kcptun-Client 作中转,让 iOS 上用普通的 SS-Client 链接使用。另外,KCP 是个双刃剑,流量敏感的用户需要在 KcpTun-Server 上针对性的修改调整更多的参数,达到最好的性价比。
Comments powered by Disqus.