阅读视图

发现新文章,点击刷新页面。
🔲 ☆

搭建Tuic V5

前言

本文内容基于开源项目 tuic 精巧的TUICed 0-RTT代理协议,以cloudflare作为域名解析服务,surge作为代理端.

你需要至少有:

  • VPS
  • 域名

点开发布链接可以看到最新版,建议以最新版为准,可替换本文中出现的链接.

搭建

配置

首先更新软件源,并创建tuic文件夹

1
2
3
apt update -y
apt -y install wget
mkdir /opt/tuic && cd /opt/tuic

获取服务端程序并赋予权限

name -a命令查看linux架构

GNUmusl是两种不同的C库(C standard library)实现,下面用musl库,因为它具有更小的内存占用和更快的启动时间.

amd
1
2
wget https://github.com/EAimTY/tuic/releases/download/tuic-server-1.0.0/tuic-server-1.0.0-x86_64-unknown-linux-musl -O /opt/tuic/tuic-server
chmod +x /opt/tuic/tuic-server
arm
1
2
wget https://github.com/EAimTY/tuic/releases/download/tuic-server-1.0.0/tuic-server-1.0.0-aarch64-unknown-linux-musl -O /opt/tuic/tuic-server
chmod +x /opt/tuic/tuic-server

接下来建立服务端配置

1
2
cat /proc/sys/kernel/random/uuid # 获取UUID,后面记得替换
vim /opt/tuic/config.json # 将下面json内容修改后粘贴进来

稍微分别翻译一部分意思吧,详细完整请看配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 用于监听的套接字地址,默认443,如果端口被占用可以换成其他,建议用其他的端口,另外tuic暂不支持回落
// 用户列表,包含用户UUID和密码
// 证书文件的路径
// 私钥文件的路径
// 可选。拥堵控制算法,可用选项:
// "cubic", "new_reno", "bbr"
// 默认:"cubic" ,个人推荐 "bbr"
// 可选。应用层协议的协商
// 默认为空(无ALPN)
// 可选。如果服务器应该为中继IPv6 UDP数据包创建单独的UDP套接字
// 默认:true
// 可选。在服务器端启用0-RTT QUIC连接握手。
// 这对性能影响不大,因为该协议是完全复用的。
// 警告:强烈建议禁用该功能,因为它容易受到重放攻击。参见https://blog.cloudflare.com/even-faster-connection-establishment-with-quic-0-rtt-resumption/#attack-of-the-clones
// 默认值:false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"server": "[::]:443",
"users": {
"00000000-0000-0000-0000-000000000000": "PASSWORD_0"
},
"certificate": "/opt/tuic/fullchain.pem",
"private_key": "/opt/tuic/privkey.pem",
"congestion_control": "bbr",
"alpn": ["h3", "spdy/3.1"],
"udp_relay_ipv6": true,
"zero_rtt_handshake": false,
"auth_timeout": "3s",
"max_idle_time": "10s",
"max_external_packet_size": 1500,
"gc_interval": "3s",
"gc_lifetime": "15s",
"log_level": "warn"
}

创建systemd

1
vim /lib/systemd/system/tuic.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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=/opt/tuic
ExecStart=/opt/tuic/tuic-server -c config.json
Restart=on-failure
RestartPreventExitStatus=1
RestartSec=5

[Install]
WantedBy=multi-user.target
1
2
3
systemctl daemon-reload # 重新加载系统管理守护进程(systemd) 的配置文件
systemctl enable --now tuic.service # 启动tuic服务并设置开机自启
systemctl status tuic.service # 查看状态

证书

申请证书

本博客有用开源工具 acme.sh 通过DNS来自动化证书续期的教程.本文这里用另外一个开源工具 certbot

先去域名解析网站将xx.xxx.xx域名解析到你这个VPS的IP上.

下面示例并不是DNS验证,而是通过80端口验证(standalone插件)

example@gmail.com 换成你的邮箱 xx.xxx.xx 换成你的域名

1
2
3
4
5
6
7
apt -y install certbot # 安装certbot
certbot certonly \
--standalone \
--agree-tos \
--no-eff-email \
--email example@gmail.com \
-d xx.xxx.xx

通过systemd timer定时更新证书

1
2
systemctl enable --now certbot.timer # 启动并设置开机自动启动
systemctl status certbot.timer # 查看状态
1
2
3
# 创建软连接
ln -s -v /etc/letsencrypt/live/vless3.lanyundev.com/fullchain.pem /opt/tuic/fullchain.pem
ln -s -v /etc/letsencrypt/live/vless3.lanyundev.com/privkey.pem /opt/tuic/privkey.pem

添加bash脚本用于续订证书后自动重启tuic

1
vim /etc/letsencrypt/renewal-hooks/post/tuic.sh
1
2
3
#!/bin/bash

systemctl restart tuic.service
1
chmod +x /etc/letsencrypt/renewal-hooks/post/tuic.sh

额外记录一下:

证书sha256指纹获取:

1
openssl x509 -noout -fingerprint -sha256 -inform pem -in /opt/tuic/fullchain.pem

简单用法

1
2
3
4
5
6
7
8
9
10
# 查看证书列表
certbot certificates
# 手动续订,后面--manual哪些都是可选
certbot renew --manual --preferred-challenges dns --manual-auth-hook "/脚本目录/au.sh python txy add" --manual-cleanup-hook "/脚本目录/au.sh python txy clean"
# 使用 crontab 定时更新证书,示例
# 注意只有成功 renew 证书,才会重新启动 Nginx
1 1 */1 * * root certbot-auto renew --manual --preferred-challenges dns --deploy-hook "service nginx -s reload" --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
# 撤销证书
sudo certbot revoke --cert-name example.com
sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem

后续有机会更新吧,

❌