Cloudflare Tunnels 部署¶
版本要求 >= 1.8.0
通信框架¶
(VPS-1) grpcs/https +------------------+ +-----------------+
stat_client <-------------> | | | |
| | | |
(VPS-2) grpcs/https | | HTTP2 |Cloudflare Tunnel|
stat_client <-------------> |Cloudflare Network| <-------> | |
| | | stat_server |
https | | | |
Browser <-------------> | | | |
+------------------+ +-----------------+
优势:
1. Cloudflare Tunnels 自带内网穿透功能,无需暴露服务端口
2. 配上域名就带s, 免去配置 Nginx/Caddy 和申请证书的麻烦
3. 搭配 Cloudflare WAF 使用更安全
1. Cloudflare Tunnels 配置¶
1.1 Cloudflare 配置¶
设置 TLS 模式¶

网络开启 gRPC¶

创建源服务器证书¶

填写你的 grpc 域名¶

证书内容分别保存为 server.pem server.key¶

转到 ZeroTrust 创建和安装 Tunnels¶
复制 cloudflared 安装命令到 stat_server 所在机器安装 cloudflared
然后配置 http 转发
配置 grpc 转发,Type 选 HTTPS

配置 Tunnels 的 TLS 开启 HTTP2 连接¶

修改 cloudflared 服务¶
修改 /etc/systemd/system/cloudflared.service 增加 --protocol http2 参数,重启cloudflared

1.2 修改 config.toml¶
修改 server 端 配置文件 config.toml 以下配置 grpc_tls = 1 开启 TLS
grpc_addr = "127.0.0.1:9394"
http_addr = "127.0.0.1:8080"
# 开启 grpc TLS, 0:关闭 1: TLS 2: mTLS
grpc_tls = 1
# 证书最终路径 ${workspace}/${tls_dir}, 包含 server.pem, server.key 文件
tls_dir = "tls"
1.3 测试运行¶
# 命令行执行
RUST_LOG=debug ./stat_server -c config.toml
RUST_LOG=debug ./stat_client -a grpcs://cf_grpc.ssr.rs -u h1 -p p1
# 打开 https://cf_http.ssr.rs 看上报成功
# 走HTTPS协议: ./stat_client -a https://cf_http.ssr.rs/report -u h1 -p p1
2. mTLS 部署¶
属于安全进阶的部署方式,双向证书认证模式.
2.1 证书生成¶
mkdir -p /opt/ServerStatus/tls
cd /opt/ServerStatus/tls
wget --no-check-certificate -qO gen_certs.sh 'https://raw.githubusercontent.com/zdz/ServerStatus-Rust/master/scripts/gen_certs.sh'
# 下载 gen_certs.sh 后,根据自己的域名修改配置,然后执行
bash -ex gen_certs.sh
2.1 修改 config.toml¶
修改 server 端 配置文件 config.toml 以下配置 grpc_tls = 2 开启 mTLS
grpc_addr = "0.0.0.0:9394"
http_addr = "0.0.0.0:8080"
# 开启 grpc TLS, 0:关闭 1: TLS 2: mTLS
grpc_tls = 2
# 证书最终路径 ${workspace}/${tls_dir}
# 包含 server.pem, server.key, clent.pem, client.key, ca.pem 文件
tls_dir = "tls"