QUIC 全称 Quick UDP Internet Connection,是最早由 Google 提出的使用 UDP 进行多路并发传输的协议。QUIC于2012年实现并部署,2013年随着实验范围的扩大而公开发布,并向IETF描述。QUIC协议的基本原理和前世今生在此略过,“Over UDP”应该算是协议核心内容,具体内容可参考google官方文档(https://www.chromium.org/quic/)。
TUIC作为较新的代理工具,最新release版本(1.0.0)支持Quic v5协议,TUIC旨在充分利用quic v5的协议特性,设计核心就是减少握手造成的网络往返时延( rtt )。同时,TUIC实现了自身的协议,其详细设计和协议原理项目仓库均有介绍(https://github.com/EAimTY/tuic/blob/dev/SPEC.md)。相较Hysteria,TUIC不会做超量发包处理,不会造成flood attack的特征判断。老E在一台开设在日本的VPS上进行了部署,实际使用主观上认为相比Vless、Trojan等有一定的提升,2天测试性高频使用本地未出现断流现象,也没有引发服务商监控异常。
1.下载tuic(v5)并赋权
Tuic开源应用github项目主页及release下载页面如下:
https://github.com/EAimTY/tuic https://github.com/EAimTY/tuic/releases/tag/tuic-server-1.0.0
使用如下命令新建目录,并将tuic下载至指定目录。
mkdir -p /usr/local/sbin/tuic 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/sbin/tuic/tuic-server && chmod +x /usr/local/sbin/tuic/tuic-server
2.创建并编辑tuic配置文件
在创建tuic配置文件阶段,账号、密码可随机生成,也可手动指定。如下:
port=443 uuid=$(cat /proc/sys/kernel/random/uuid) passwd=$(date +%s%N | md5sum | cut -c 1-12)
使用如下命令创建tuic配置文件,或者创建空文件后,使用vim等编辑,再将EOF包裹的配置文件内容粘贴导入至配置文件中。
cat << EOF > /usr/local/sbin/tuic/config.json { "server": "[::]:$port", #自定义 "users": { "$uuid": "$passwd" #自定义 }, "certificate": "/usr/local/sbin/tuic/fullchain.pem", "private_key": "/usr/local/sbin/tuic/privkey.pem", "congestion_control": "bbr", "alpn": [ "h3", "spdy/3.1" ], "log_level": "warn" } EOF
3.安装配置证书
下载、安装acme.sh,VPS可在standalone模式下采用http验证方法生成、获取并安装证书至指定位置。
(1)公网VPS生成、获取证书
VPS standlone模式获取证书,为确保验证过程顺利,需要提前打开安全策略组、防火墙放行80端口或其他--httpport自定义端口。
#ufw allow 80/tcp setcap 'cap_net_bind_service=+ep' /usr/bin/socat curl https://get.acme.sh | sh -s email=“$email” source ~/.bashrc acme.sh --server letsencrypt --issue -d ${domain} --standalone -k ec-256 --insecure #ufw delete allow 80/tcp
(2)其他环境下生成、获取证书
export CF_Email="$email" export CF_Key="$api_key" acme.sh --server letsencrypt --issue --dns dns_cf -d ${domain}
(3)安装证书
acme.sh --installcert -d ${domain} --key-file /usr/local/sbin/tuic/private.key --fullchain-file /usr/local/sbin/tuic/fullchain.pem
4.创建系统服务配置文件
创建系统守护进程服务描述文件,以便设置tuic开机自启动,服务描述文件名可自定义、扩展名和位置不可自定义。也可新建tuic-server.service空文件,使用vim等编辑,将EOF包裹的内容粘贴导入。
cat << EOF > /etc/systemd/system/tuic-server.service [Unit] Description=Tuic 1.0.0 high-performance proxy built on top of the QUIC protocol After=network.target nss-lookup.target [Service] User=root WorkingDirectory=/usr/local/sbin/tuic ExecStart=/usr/local/sbin/tuic/tuic-server -c config.json Restart=on-failure RestartPreventExitStatus=1 RestartSec=5 [Install] WantedBy=multi-user.target EOF
5.设置开机自启动并启动tuic-service服务
systemctl daemon-reload systemctl enable tuic-server.service systemctl start tuic-server.service #ufw allow ${port} #ufw reload
6.客户端配置及应用
目前,支持Tuic的客户端代理在桌面端可以使用加载tuic模块的V2rayN、Clash,移动端包括了小火箭、Sagernet等。无论哪个客户端,其核心配置主要是如下8项:
-
- 服务器:$domain
- 服务器地址:$VPS_IP
- 服务器端口:443
- UUID: $uuid
- 密码:$passwd
- ALPN:h3
- UDP 转发模式:QUIC
- 拥塞控制:bbr
基于此,可导入V2rayN的客户端配置文件tuic-v2ray-client.json内容如下:
{ "relay": { "server": "${domain}:443", "uuid": "$uuid", "password": "$passwd", "ip": "$ip", "congestion_control": "bbr", "alpn": ["h3"] }, "local": { "server": "127.0.0.1:10080" #本地做分流处理的代理端口,如SwitchyProxy插件等 }, "log_level": "warn" }
老E使用的是ios 小火箭,手动输入后直接连接。桌面端V2rayN导入上述配置文件,应该可以顺利连接成功。Clash的话,可找一份参考配置文件,替换以下3部分(proxies、proxy-groups、rules)或直接用以下内容作为tuic-clash-client.yaml最简配置文件,注意yaml文件的缩进要求。
{ proxies: - name: tuic-server server: $domain port: $port type: tuic uuid: $uuid password: $passwd ip: $ip alpn: [h3] disable-sni: true reduce-rtt: true udp-relay-mode: quic congestion-controller: bbr proxy-groups: - name: Proxy type: select proxies: - tuic-server rules: - GEOIP,CN,DIRECT - MATCH,Proxy }
至此,我们就将服务端、客户端都安装部署完成,整体上6个步骤还可适当调整优化。传统的TCP协议是建立在操作系统层和中间路由模块之上实现的,握手阶段信息很容易被这些中间模块篡改而变得不安全,也就是说,无论套多少层TLS,无法避免初始的握手阶段的GFW识别、拦截。QUIC协议是在UDP之上的用户级(如浏览器)中实现的,并且通过禁用SNI,握手包(QUIC Hello)中的关键信息在传输链路上相对不容易被识别和修改,QUIC协议天然支持5元组(协议、源地址和端口、目标地址和端口)可以更改中间连接,因此QUIC/TUIC可以提供更安全隐蔽的网络数据传输。
QUIC连接还可以跨网络迁移,这意味着QUIC连接可以通过宽带有线进行握手,然后在用户离开热点后迁移到移动网络,这是协议特性支持的,不是“装裱”、“缝补”的结果。
文章评论