TUIC是新出现的代理程序,去年试用过但使用体验较为一般。最近的1.0.0版本更新中应用了v5版TUIC协议,各方面表现非常优秀。同时iOS端的ShadowrocketStash等APP,以及跨平台程序Clash.Meta也提供了TUIC协议v5版本的支持。

从名字不难看出TUIC与Hysteria同样是基于QUIC的代理协议,使用时要注意打开防火墙对应的UDP端口。TUIC “专注于尽可能减少由于中继而导致的额外握手延迟,并保持协议本身简单且易于实现”,相较于Hysteria的“暴力”加速要“温和”一些,同时自带多路复用。

服务端

所有程序的安装都大同小异:程序+配置文件+守护进程。

下载

打开TUIC的最新版Releases页面,可以看到目前最新版本为1.0.0. 根据服务器系统架构选择下载(gnu版性能略强,但musl版兼容性更好):

1
wget https://github.com/EAimTY/tuic/releases/download/tuic-server-1.0.0/tuic-server-1.0.0-x86_64-unknown-linux-gnu -O /usr/local/bin/tuic-server && chmod +x /usr/local/bin/tuic-server

配置

创建配置文件:

1
mkdir /usr/local/etc/tuic-server && touch /usr/local/etc/tuic-server/config.json

填写配置文件,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"server": "[::]:443",
"users":
{
"00000000-0000-0000-0000-000000000000": "PASSWORD"
},
"certificate": "PATH/TO/CERTIFICATE",
"private_key": "PATH/TO/PRIVATE_KEY",
"congestion_control": "bbr",
"alpn":
[
"h3",
"spdy/3.1"
],
"log_level": "warn"
}
  • 上述模板中的00000000-0000-0000-0000-000000000000PASSWORD_0PATH/TO/CERTIFICATEPATH/TO/PRIVATE_KEY需要修改
  • alpn中的内容可按需求修改。
  • UUID可在Online UUID Generator生成。
  • 完整配置文件示例

守护运行

创建Systemd配置文件

1
touch /etc/systemd/system/tuic-server.service

内容示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=Delicately-TUICed high-performance proxy built on top of the QUIC protocol
Documentation=https://github.com/EAimTY/tuic
After=network.target

[Service]
User=root
WorkingDirectory=/usr/local/etc/tuic-server
ExecStart=/usr/local/bin/tuic-server -c /usr/local/etc/tuic-server/config.json
Restart=on-failure
RestartPreventExitStatus=1
RestartSec=5
LimitNOFILE=infinity

[Install]
WantedBy=multi-user.target

启用并运行守护进程

1
systemctl enable tuic-server.service --now

客户端

可以使用官方的tuic-cient在本地开启socks5代理供其他软件分流,也可以使用第三方客户端,目前支持TUIC v5的有Clash.Meta、Shadowrocket、Stash。

tuic-client

与服务端类似的,tuic客户端可以在最新的Releases页面中下拉找到。

根据本地机器的系统架构选择对应的客户端(gnu版和msvc版性能上区别不大,但是msvc版可执行文件要小一些),笔者选择了Windows的msvc版

上述服务端示例配置对应的客户端示例配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"relay":
{
"server": "www.example.com:443",
"uuid": "00000000-0000-0000-0000-000000000000",
"password": "PASSWORD",
"udp_relay_mode": "native",
"congestion_control": "bbr",
"alpn":
[
"h3",
"spdy/3.1"
]
},
"local":
{
"server": "[::]:1080"
},
"log_level": "warn"
}

可以使用nssm来守护进程。

  • 注意修改serveruuidpassword项。
  • udp-relay-mode设置在官方文档中没有具体解释,在#141里作者解释 “native 模式可以看作是经 TLS 加密过的原生 UDP”,至于quic模式大概是如果UDP丢包会重传直至送达。

Clash.Meta

上述服务端示例配置对应的客户端示例配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
- name: tuic
server: www.example.com
port: 443
type: tuic
uuid: 00000000-0000-0000-0000-000000000000
password: PASSWORD
alpn:
- h3
- spdy/3.1
udp-relay-mode: native
congestion-controller: bbr
sni: www.example.com

其他

Shadowrocket和Stash的使用较为简单,在此不做赘述。

测试

由于TUIC的官方客户端没有提供转发功能,所以无法进行Iperf3测试。

使用

本地为北方电信300M家宽,服务器为Oracle VPS, 500M带宽,去程为CN2,回程为163,使用Clash.Meta作为客户端。

日常

使用环境:平均延迟为80ms,丢包率为0。

Speedtest

单线程:

单线程

多线程:

多线程

单线程与多线程速度基本无异,这是由于TUIC自带多路复用。

YouTube

4K播放:
4K

晚高峰

使用环境:平均延迟为85ms,丢包率约为13%

Speedtest

单线程:

单线程

多线程:

多线程

YouTube

4K播放:
4K

结语

无论是速度还是稳定性,新版的TUIC体验都非常良好,同时由于自带多路复用和0-RTT的特性,日常使用中延迟也很低。但客户端支持还不是很多,目前:

  • Windows可以使用Clash Verge.
  • iOS可以使用Shadowrocket或Stash.
  • 软路由可以使用OpenClash.

参考

  1. tuic-server README
  2. tuic-client README
  3. Clash.Meta Docs