TUIC安装部署与客户端应用

2023年7月4日 12469次阅读 0条评论
clawcloud
expressvpn best vpn
privado vpn
surfshark vpn
private vpn
pia vpn
nord vpn

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配置文件阶段,账号、密码可随机生成,也可手动指定。如下:

推荐继续阅读:网站首页 | 详细教程 | atrandys Trojan

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连接可以通过宽带有线进行握手,然后在用户离开热点后迁移到移动网络,这是协议特性支持的,不是“装裱”、“缝补”的结果。