使用基于QUIC的高性能协议TUIC代理并使用clash分流

折腾 Oct 30, 2022

介绍

基于 QUIC 协议构建的精细 TUICed 高性能代理,TUIC从一开始就是基于QUIC协议设计的。它可以充分利用QUIC带来的优势。
TUIC 的目标是即使在质量较差的网络上也能提供高度可用和高效的代理,并尽可能减少握手延迟。
TUIC 使用 QUIC 的流机制将所有任务多路复用到单个 QUIC 连接中。这意味着除非QUIC连接被强制中断或者在最大空闲时间内没有任务,否则协商新的中继任务不需要经过QUIC握手和TUIC认证的过程。

服务端

配置一个json文件, 比如命名成config.json并放进你的服务器的/etc/tuic/

{
    "port": 8080,
    "token": ["xxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxx"],
    "certificate": "/etc/ssl/fullchain.cer",
    "private_key": "/etc/ssl/privkey.key",
    "ip": "0.0.0.0",
    "congestion_controller": "bbr",
    "max_idle_time": 15000,
    "authentication_timeout": 1000,
    "alpn": ["h3"],
    "max_udp_relay_packet_size": 1500,
    "log_level": "warn"
}

certificateprivate_key是需要依赖X.509 certificates证书格式的字段, 可以使用github.com/est31/rcgen工具生成对应的你的域名私有证书, 注意填写绝对路径. 如果你有CA机构颁发的证书也可以直接使用

申请证书

certbot certonly \
--standalone \
--agree-tos \
--no-eff-email \
--email [email protected] \
-d tuic.example.com

保存证书到指定位置

cat /etc/letsencrypt/live/tuic.example.com/fullchain.pem > /etc/ssl/fullchain.pem
cat /etc/letsencrypt/live/tuic.example.com/privkey.pem > /etc/ssl/privkey.pem

端口我这里使用的是8080端口, 如果你的443端口方便的话, 也可以使用443端口

去仓库地址Releases · EAimTY/tuic · GitHub找到对应的你的系统下载二进制文件, 然后放入你的服务器的/usr/local/bin/目录下, 接着输入命令给予执行权限, 注意是下载server服务端文件, 不是下载客户端文件

sudo chmod +x /usr/local/bin/tuic

守护进程

我们再写一个service文件创建一个守护进程启动服务端, 我这里系统是Ubuntu, 格式大概如下, 其他版本系统同理

sudo touch /etc/systemd/system/tuic.service
[Unit]
Description=tuic
After=network.target nss-lookup.target

[Service]
User=root
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
WorkingDirectory=/etc/tuic
ExecStart=/usr/local/bin/tuic -c config.json
Restart=on-failure
RestartPreventExitStatus=23

[Install]
WantedBy=multi-user.target

使用vim编辑保存后退出, 接着执行命令安装和启动服务.

sudo systemctl enable tuic.service
sudo systemctl reload tuic.service && sudo systemctl restart tuic.service

查看状态

sudo systemctl status tuic.service

显示active表示启动顺利之后就可以配置客户端了

客户端

在你的本地电脑上创建一个客户端config.json文件

{
    "relay": {
        "server": "example.com",
        "port": 8080,
        "token": "xxxxxxxxxxxxxxxxxxx",
        "ip": "10.10.10.10",
        "certificates": ["fullchain.cer"],
        "udp_relay_mode": "quic",
        "congestion_controller": "bbr",
        "heartbeat_interval": 10000,
        "alpn": ["h3"],
        "disable_sni": false,
        "reduce_rtt": false,
        "request_timeout": 8000,
        "max_udp_relay_packet_size": 1500
    },
    "local": {
        "port": 8888,
        "ip": "127.0.0.1"
    },
    "log_level": "info"
}

server字段是你的服务器域名, port是端口, token是你的密码字段, ip是你的服务器ip, certificates是你的密钥对的公钥, local字段描述了你本地的socks5服务器的信息, 端口是8888, 监听地址是本地环回127.0.0.1

还是去到仓库的release页面, 下载对应的客户端二进制文件, 放入和config.json配置文件同级的目录, 接着写一个start脚本

windows

tuic-client-0.8.5.exe -c config.json

下载对应的windows客户端文件并重命名为tuic-client-0.8.5.exe接着把上属的命令行保存并命名为start.bat双击启动

linux/macos

把对应的Mac二进制文件下载并命名为tuic-client-0.8.5并授予执行权限

sudo chmod +x tuic-client-0.8.5
#!/bin/bash
./tuic-client-0.8.5 -c ./config.json

接着把上述的命令行保存并命名为start.sh接着cd到这个有执行文件, 启动脚本和配置文件的目录下使用终端执行

./start.sh

如果启动提示信息显示这样则代表启动成功

[2022-10-29T11:11:04Z INFO ] [socks5] Started. Listening: 127.0.0.1:8888
[2022-10-29T11:11:04Z INFO ] [relay] Started. Target server: 10.10.10.10:8080 (example.com)

系统代理

windows下, 打开你的控制面板, 找到Internet选项, 然后找到连接选项卡, 代理按钮, 设置本地系统代理, 选择socks5协议, 地址填127.0.0.1, 端口填8888, 并保存退出, 就可以使用代理服务了

MacOS下, 找到设置, 打开网络, 点击你当前使用的网络, 打开属性, 找到代理, 填写socks5协议代理信息, 和windows一样, 然后保存退出, 就可以使用代理了.

clash分流

windows下载clash这里, MacOS系统请下载clashX

直接使用socks5代理没有分流, 我们使用clash套接tuicsocks5代理, 打开clash的配置文件增加一个proxies, 填写socks5信息

# ...........
- proxies:
    name: "tuic",
    server: 127.0.0.1,
    port: 8888,
    type: socks5

# ..............

然后在你的出站类型选择规则, 节点选择, 选择你刚刚配置的tuic代理就可以搭配clash的分流使用代理了😎

Tags

壳壳

理解过去,专注当下。