无公网 IP 部署哪吒探针 - 利用cloudflared tunnel

  1. 相关命令:《cloudflare argo tunnel cli》
    1. 哪吒面板端
    2. 哪吒 Agent
    3. Nginx 设置
      1. 申请 SSL 证书
      2. 安装 Nginx
      3. 编辑 nezha.conf
    4. Cloudflare 设置
      1. SSL
      2. gRPC
      3. http2
      4. Tunnels

相关命令:《cloudflare argo tunnel cli》

💡 本文假设你已经按照官方文档安装好哪吒探针,并且面板端口为 8008,Agent 通信端口为 5555
其他思路借鉴:《Argo-Nezha-Service-Container: Nezha server over Argo tunnel 使用 Argo 隧道哪吒监控的服务端》

哪吒面板端

  1. 编辑面板配置文件
vim /opt/nezha/dashboard/data/config.yaml
  1. GRPCHost ProxuGRPCPort TLS 这三项做如下修改
GRPCHost: data.example.com
ProxyGRPCPort: 443
TLS: true
  1. 重启面板

哪吒 Agent

  • 通信域名: data.example.com
  • 面板通信端口: 443 (套 Cloudflare CDN 必须为 443)
  • Agent 密钥: 管理面板中添加服务器时生成的密钥
  • gRPC 端口的 SSL/TLS 加密: y

Nginx 设置

申请 SSL 证书

证书可以选择自签名证书或者 Cloudflare 的 15 年证书

自签名证书

openssl genrsa -out /opt/nezha/nezha.key 2048
openssl req -new -subj "/CN=data.example.com" -key /opt/nezha/nezha.key -out /opt/nezha/nezha.csr
openssl x509 -req -days 36500 -in /opt/nezha/nezha.csr -signkey /opt/nezha/nezha.key -out /opt/nezha/nezha.pem

Cloudflare 证书

按照下图创建证书,将私钥和证书命名为 nezha.keynezha.pem,上传到 /opt/nezha 目录

sh2.png

安装 Nginx

apt-get install nginx -y

编辑 nezha.conf

💡 确保 /etc/nginx/nginx.conf 中包含 include /etc/nginx/conf.d/*.conf (默认包含),否则下面的配置文件不会生效

  1. 创建 nezha.conf 文件
vim /etc/nginx/conf.d/nezha.conf
  1. 填入以下内容,其中将 server_name 修改为你的域名
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name data.example.com;

  ssl_certificate /opt/nezha/nezha.pem;
  ssl_certificate_key /opt/nezha/nezha.key;
  ssl_stapling on;
  ssl_session_timeout 1d;
  ssl_protocols TLSv1.2 TLSv1.3;

  underscores_in_headers on;

  keepalive_time 24h;
  keepalive_requests 100000;
  keepalive_timeout 120s;

  location / {
    proxy_pass http://localhost:8008;
    proxy_set_header Host $http_host;
    proxy_set_header Upgrade $http_upgrade;
  }

  location ~ ^/(ws|terminal/.+)$ {
    proxy_pass http://localhost:8008;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $http_host;
  }

  location ^~ /proto.NezhaService/ {
    grpc_read_timeout 300s;
    grpc_send_timeout 300s;
    grpc_socket_keepalive on;
    grpc_pass grpc://grpcservers;
  }
}

upstream grpcservers {
    server localhost:5555;
    keepalive 512;
}
  1. 重启 Nginx

Cloudflare 设置

SSL

SSL 设置需要设置为 Full / Full (strict)。如果用的自签名证书选择 Full;用的是 Cloudflare 的 15 年证书选择 Full (strict)

sh2.png

gRPC

Network 设置中需要把 gRPC 打开

sh2.png

http2

💡 非常重要,因为我是docker部署的cloudflared,所以没有这个配置可改,导致忽略了这一步后足足折腾了6个小时

  1. 启动 cloudflared 时需要添加 -protocol http2 参数
  2. 编辑 cloudflared.service 文件
vim /etc/systemd/system/cloudflared.service
  1. 找到 ExecStart 项,添加 -protocol http2
ExecStart=/usr/bin/cloudflared --no-autoupdate tunnel run --protocol http2 --token <token>
  1. 重启 cloudflared
systemctl daemon-reload
systemctl restart cloudflared

Tunnels

  • Path 为空
  • Service: HTTPS://localhost:443
  • No TLS Verify: Enabled
  • HTTP2 connection: Enabled

sh2.png


欢迎指出任何有错误或不够清晰的表达,可以在下面评论区评论。

×

喜欢就点赞,疼爱就打赏

//