EAimTY 的博客
肥宅
首页
关于
主题
基于 QUIC 的代理软件:TUIC
Mar 10, 2022

QUIC 协议汲取了大量人们给 TCP 糊墙的经验教训,把连接结构优化到(目前来看)极致。但是现在市面上的代理工具还没有能完全利用 QUIC 特性的存在,所以我自己动手写了一个基于 QUIC 协议的新代理工具:TUIC

https://github.com/EAimTY/tuic

  • 1-RTT TCP 中继
  • 0-RTT UDP 中继,且 NAT 类型为 FullCone
  • 在用户空间的拥塞控制,也就是说可以在任何系统平台实现双向的 BBR
  • 两种 UDP 中继模式: native (原生 UDP 特性,数据仍被 TLS 加密)和 quic (100% 送达率,每个包单独单独作为一个 QUIC “流”,一个包的确认重传不会阻塞其它包)
  • 完全多路复用,服务器和客户端之间始终只需要一条 QUIC 连接,所有任务作为这个连接中的 “流” 进行传输(一个流的暂时阻塞不会影响其它流),所以除连接第一个中继任务外的其它任务都不需要经过 QUIC 握手和 TUIC 的鉴权
  • 网络切换时的会话平滑转移,例如在从 Wi-Fi 切换到移动数据时连接不会像 TCP 一样直接断开
  • 0-RTT 、与中继任务并行的鉴权
  • 支持 QUIC 的 0-RTT 握手(开启之后能达到 真・ 1 -RTT TCP 和 0-RTT UDP ,但是就算不开启,多路复用的特性也能保证在绝大多数情况下 1-RTT 和 0-RTT )

TUIC 的设计介绍在仓库中 Design 一节有说明。TUIC 协议的详细内容在 这里 。简单来说,TUIC 的设计核心就是减少握手造成的网络往返时延( rtt ),毕竟对于网络程序这是最大的瓶颈。

对比其它使用 TCP 的代理工具( ss 、v2ray 、trojan ),TCP 握手慢,且不支持自定义拥塞控制,各工具对 UDP 的支持也各有问题。对比 Hysteria ,Hysteria 的 UDP 中继需要 1 rtt 的握手,且只支持一种 UDP 模式。

最后说说安全性和协议特征。TUIC 现在基于原生 QUIC ,不支持 obfs ,但 QUIC 连接本身就是 TLS 加密的,每个 QUIC 连接从外面看都是一样的。国内的各大厂也慢慢开始使用 QUIC 了,所以我觉得 QUIC 特征应该不是什么大问题。

respond-post-55
JL
JL
Mar 22, 2022, 17:08

谢谢博主!
已经用上啦!但是quic会遇到一些qos的问题。
请问大佬有兴趣看一下这个项目嘛:
https://github.com/Qv2ray/v2ray-rust
希望共同努力!祝安好!

Escher
Mar 24, 2022, 10:42

已经在使用着,感谢工具,我会及时issues

凡尘
凡尘
Mar 25, 2022, 07:53

这个还是很有用的

嘿嘿嘿
嘿嘿嘿
Nov 07, 2022, 01:43

用上了,很好用啊。用的白嫖的Azure的香港机,在广东晚高峰稳定youtube在10万左右,暂时没有被qos。点赞。现在在想是不是要部署个网站之类的。。

est
Nov 12, 2022, 09:26

其实1根连接并不是什么好事呀。网络流量分析直接拿1个连接就能metadata 分析所有数据,其实最好的方式是M:N 连接。因为每一个网络包的路由都会稍微不同,所以中间商拿不到正确时序的完整数据,流量特征不好确定。如果家宽有多路 ISP 还可以做带宽聚合更加安全。

我是我
Nov 19, 2022, 06:33

仓库里没有apk文件 下载下来自己手动改吗 还是?

Senpai
Senpai
Nov 28, 2022, 16:20

从你其他文章来看,似乎还是大学生。不怕被喝茶吗

Falcon55
Falcon55
Nov 29, 2022, 18:43

请问博主有一些搭建教程么 外行人看了半天有点搞不明白 谢谢

aua
aua
Dec 06, 2022, 19:34

当这类项目拥有一定热度后,开发者一定会成为众矢之的
为了安全考虑也是为了这个项目,建议使用新账号(割裂身份相关)等方式去维护、更新、发布TUIC项目并清除能够明确身份相关的博客等内容
一但第一维护者倒下后,TUIC很可能变成各个克隆仓库各自为阵的局面,对于用户来说太痛苦了。

aua
aua
Dec 06, 2022, 20:12

安装 wget 方法自行搜索

自行修改0.8.5为最新版本号

系统 glibc 版本够高就用 gnu,不够高就用 musl

!!!!!!不要尝试升级glibc!!!!!!

cd
rm -rf tuic-server*

下载(新系统)

wget https://github.com/EAimTY/tuic/releases/download/0.8.5/tuic-server-0.8.5-x86_64-linux-gnu

下载(旧系统)

wget https://github.com/EAimTY/tuic/releases/download/0.8.5/tuic-server-0.8.5-x86_64-linux-musl

chmod +x tuic-server-*
mv tuic-server-* /usr/biin/tuic-server

修改并写入配置文件(此组命令一次性复制,需修改好并删除注释)

cat >/etc/tuic/config.json << END
{

"port": 443,
"token": ["验证1", "验证2"],  //注释,建议足够复杂,删除验证2时要删去前面的逗号
"certificate": "ssl证书绝对路径",
"private_key": "ssl证书私钥绝对路径",
"ip": "0.0.0.0",
"congestion_controller": "bbr",  //注释,cubic:默认,足够公平 bbr:尽可能占满带宽
"max_idle_time": 15000,  //注释,为0-RTT握手设置的保留时间
"alpn": ["h3"],
"log_level": "off"  //注释,关闭日志,默认是info

}
END

试运行TUIC

./usr/bin/tuic-server -c /etc/tuic/config.json

不输出错误即可继续

注册守护进程(此组命令一次性复制粘贴)

groupadd --system tuicserver

useradd --system \

--gid tuicserver\
--create-home \
--home-dir /var/lib/caddy \
--shell /usr/sbin/nologin \
--comment "TUIC proxy server" \
tuicserver

cat >/etc/systemd/system/tuicserver.service << END
[Unit]
Description=TUICserver
Documentation=https://github.com/EAimTY/tuic/
After=network.target network-online.target
Requires=network-online.target

[Service]
User=caddy
Group=caddy
ExecStart=/usr/bin/tuic-server -c /etc/tuic/config.json
ExecReload=/usr/bin/tuic-server -c /etc/tuic/config.json
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

END

启动TUIC

systemctl daemon-reload
systemctl enable tuicserver
systemctl start tuicserver

更新TUIC

自行修改0.8.5为最新版本号

系统 glibc 版本够高就用 gnu,不够高就用 musl

cd
rm -rf tuic-server*

下载(新系统)

wget https://github.com/EAimTY/tuic/releases/download/0.8.5/tuic-server-0.8.5-x86_64-linux-gnu

下载(旧系统)

wget https://github.com/EAimTY/tuic/releases/download/0.8.5/tuic-server-0.8.5-x86_64-linux-musl

chmod +x tuic-server-*
mv tuic-server-* /usr/biin/tuic-server

systemctl restart tuicserver

molezz
Feb 01, 2023, 00:53

很快 在移动下也没有qos问题 始终满速300mbps

😂……
😂……
Feb 09, 2023, 12:01

不知道断流问题有没有解决

ken
ken
Feb 10, 2023, 22:12

能否在服务器端增加sock5出口设置以便对接*ray的routing分流设置?

嘻→嘻↘嘻↗嘻↗嘻↘
嘻→嘻↘嘻↗嘻↗嘻↘
Feb 12, 2023, 22:51

现在client还是不能长时间挂着连接,会掉线,需要即用即连,不太方便。<script>alert("hello, world");</script>

ortt
ortt
Feb 23, 2023, 21:38

多谢大佬

佚名
佚名
Mar 22, 2023, 17:42

git上连个配置模板都没有也没有wiki。。。

hhhhux
hhhhux
Apr 01, 2023, 08:53

佬留个捐赠地址,给你点动力

土匪大哥哥
土匪大哥哥
May 24, 2023, 18:14

文中的协议说明在哪里呢?链接跳过去没有了?

添加新评论

请填写称呼
请填写合法的电子邮箱地址
请填写合法的网站地址
请填写内容