跳转至

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 模式

image

网络开启 gRPC

image

创建源服务器证书

image

填写你的 grpc 域名

image

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

image

转到 ZeroTrust 创建和安装 Tunnels

复制 cloudflared 安装命令到 stat_server 所在机器安装 cloudflared image 然后配置 http 转发 image 配置 grpc 转发,Type 选 HTTPS image

配置 Tunnels 的 TLS 开启 HTTP2 连接

image

修改 cloudflared 服务

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

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 测试运行

目录结构
.
├── config.toml
├── stat_client
├── stat_server
└── tls
    ├── server.key
    └── server.pem
# 命令行执行
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"

2.2 测试运行

目录结构
.
├── config.toml
├── stat_client
├── stat_server
└── tls
    ├── ca.key
    ├── ca.pem
    ├── client.key
    ├── client.pem
    ├── gen_certs.sh
    ├── server.key
    └── server.pem
# 命令行执行
RUST_LOG=debug ./stat_server -c config.toml
RUST_LOG=debug ./stat_client -a grpcs://127.0.0.1:9394 -u h1 -p p1 --mtls