Featured image of post 通过CF Tunnel在Cloudflare边缘提供gRPC服务

通过CF Tunnel在Cloudflare边缘提供gRPC服务

消灭最后一丝端口暴露的可能性,将服务完全隐藏于Cloudflare Tunnel之中

操作环境: Debian 11 x86_64

在Cloudflare Tunnel支持gRPC的issue提出一年后,
Cloudflare边缘总算是能够通过Tunnel连接到源站的gRPC服务了。

从现在开始,你已经可以将哪吒监控面板完整的隐藏于Cloudflare Tunnel之中。

设置方法如下:

  1. 指定Cloudflare Tunnel的传输协议为http2
    对于直接通过官网service install一键安装的用户,
    需要在systemd配置中增加 --protocol http2 参数

    1
    2
    3
    4
    5
    6
    7
    8
    
    nano /etc/systemd/system/cloudflared.service
    
    #找到并修改启动命令
    ExecStart=/usr/bin/cloudflared --no-autoupdate tunnel run --protocol http2 --token 你的Token
    
    #完成修改后刷新配置并重启服务
    systemctl daemon-reload
    systemctl restart cloudflared
    
  2. 在Cloudflare面板中配置http2回源选项

    • 你的服务必须使用https协议
    • 启用HTTP2 connection选项
    • 如果Service URL使用localhost,则需要正确填写HTTP Host HeaderOrigin Server Name

    https

    http2

  3. 完成上述两部的配置后
    发送至Cloudflare边缘的gRPC流量应该能够正确的路由至你的Tunnel端点

  4. 哪吒面板xCloudflare的完整配置

    process

    • 我使用Nginx Proxy Manager为哪吒面板的gRPC服务提供https终结
    • Websocket与静态资源直接通过Tunnel连接至Dashboard
    • gRPC使用不同的域名进行连接

    gRPC反向代理使用的自定义配置如下

    1
    2
    3
    4
    5
    6
    7
    8
    
    # 30002端口为gRPC使用的端口
    
    underscores_in_headers on;
    location / {
            grpc_read_timeout 300s;
            grpc_send_timeout 300s;
            grpc_pass grpc://localhost:30002;
        }
    

    注意反向代理配置完成后,Cloudflare Tunnel应如前述步骤所示连接到nginx监听的https端口

comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计