前言本文内容基于开源项目 tuic 精巧的TUICed 0-RTT代理协议,以cloudflare作为域名解析服务,surge作为代理端.
你需要至少有:
点开发布链接 可以看到最新版,建议以最新版为准,可替换本文中出现的链接.
搭建 配置首先更新软件源,并创建tuic文件夹
1 2 3 apt update -y apt -y install wget mkdir /opt/tuic && cd /opt/tuic
获取服务端程序并赋予权限用name -a命令查看linux架构
GNU和musl是两种不同的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" }
创建systemd1 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.pemln -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
后续有机会更新吧,