当前位置: 首页 > news >正文

Cloudflare Tunnels 部署与隧道异常关闭的解决方案

Cloudflare Tunnel可实现从Cloudflare网络到本地服务的安全穿透,无需暴露公网IP。本文将详细介绍如何通过Docker CLI部署Cloudflare Tunnel,并解决部署过程中常见的协议限制、权限问题及网络错误。

一、部署前准备

  1. 环境要求

    • 已安装Docker环境(可通过docker --version验证);
    • 拥有Cloudflare账号,并已在控制台创建Tunnel(获取<your-token>,可在Tunnel详情页找到)。
  2. 提前了解

    • 本文使用cloudflare/cloudflared:2024.11.1镜像,确保与你的需求版本匹配;
    • 需预留证书存储目录(后续将生成验证证书)。

二、部署Cloudflare Tunnel容器

步骤1:运行容器并挂载证书目录

执行以下命令部署容器,注意修正原始命令中的挂载参数错误:

docker run -d \--name cloudflared-tunnel \  # 容器名称,后续操作需保持一致--restart unless-stopped \   # 异常退出时自动重启--dns 1.1.1.1 --dns 8.8.8.8 \  # 指定DNS服务器,避免解析问题-v /root/.cloudflared:/home/nonroot/.cloudflared \  # 挂载证书目录cloudflare/cloudflared:2024.11.1 \--no-autoupdate \  # 禁用自动更新,避免版本兼容问题tunnel run \--protocol http2 \  # 强制使用HTTP/2协议(解决国内QUIC限制)--token <your-token>  # 替换为你的Tunnel令牌

参数说明

  • -v /root/.cloudflared:/home/nonroot/.cloudflared:将本地/root/.cloudflared目录挂载到容器内的证书默认路径,确保生成的证书可持久化存储;
  • --protocol http2:针对国内网络环境强制使用HTTP/2协议(原因见下文“协议配置”部分)。

步骤2:生成并配置证书

容器运行后,需生成Cloudflare验证证书:

  1. 进入容器执行登录命令(注意容器名与部署时一致):

    docker exec -it cloudflared-tunnel cloudflared tunnel login
    
  2. 获取证书并设置权限
    命令执行后会生成证书(存储在/root/.cloudflared目录),需确保目录权限正确,否则容器可能无法读取证书:

    # 授予权限(1000为容器内非root用户ID,或直接用777临时测试)
    chmod -R 1000:1000 /root/.cloudflared
    # 或 chmod -R 777 /root/.cloudflared
    

三、关键配置说明

1. 协议选择(解决QUIC限制问题)

Cloudflare默认使用QUIC协议(基于UDP),但国内网络常限制UDP,可能导致如下错误:
ERR Failed to dial a quic connection error="failed to dial to edge with quic: timeout: no recent network activity"

解决方案

  • 强制HTTP/2(推荐国内环境):部署命令中已添加--protocol http2
  • 自动切换模式(灵活适配网络):若希望优先尝试QUIC、失败后自动切换至HTTP/2,可将协议参数改为:
    --protocol auto  # 替换原命令中的--protocol http2
    

2. 解决DNS解析超时错误

使用一段时间后可能出现如下错误:
error="lookup cfd-features.argotunnel.com on [::1]:53: dial udp [::1]:53: i/o timeout"

原因分析:本地DNS服务器无法解析Cloudflare相关域名,或被代理工具拦截。

解决方法

  • 方法1:关闭本地代理:确保Cloudflare Tunnel流量不经过代理,直接走本地网络;
  • 方法2:放行相关域名(适用于必须使用代理的场景):在代理规则中添加放行规则(以Clash为例):
    - DOMAIN-KEYWORD,cloudflare.com,DIRECT  # 放行Cloudflare主域名
    - DOMAIN-KEYWORD,argotunnel.com,DIRECT  # 放行Tunnel相关域名
    - DOMAIN,cfd-features.argotunnel.com,DIRECT  # 直接指定报错域名
    

3. HTTPS服务穿透配置

若本地服务部署了HTTPS但无有效证书(或不想配置反向代理),需在Cloudflare控制台关闭TLS验证:

  1. 登录Cloudflare控制台,进入你的Tunnel配置页;
  2. 在“Public Hostname”设置中,找到对应服务的配置项;
  3. 开启“No TLS Verify”(无TLS验证)选项(如图所示,若无法查看图片,可在“TLS”相关设置中查找)。

Cloudflare

四、验证部署

执行以下命令查看容器日志,确认无错误信息:

docker logs cloudflared-tunnel

若日志显示“Connected to Cloudflare Network”,则说明部署成功,可通过Cloudflare配置的域名访问本地服务。

五、总结

通过Docker CLI部署Cloudflare Tunnel的核心是:正确挂载证书目录、适配国内网络的协议配置、解决DNS解析问题。遵循本文步骤,可有效避免常见错误,确保Tunnel稳定运行。如需升级镜像,只需停止旧容器,使用新镜像重复部署步骤即可(证书目录持久化后无需重新生成证书)。

http://www.dtcms.com/a/334355.html

相关文章:

  • 攻击者如何毒害人工智能工具和防御系统
  • 【更新公告】C++算法·线段树
  • CF每日3题(1500-1700)
  • 《WINDOWS 环境下32位汇编语言程序设计》第2章 准备编程环境
  • IO流-序列化流
  • 记录 GMS 认证相关条件
  • 玄机靶场 | 日志分析-Tomcat日志分析
  • AI生成视频开源模型技术解析
  • Rocky Linux 9.2:从 /home 分区释放 10G 空间扩容到 / 根分区
  • AI可行性分析:数据×算法×反馈=成功
  • 【P40 6-3】OpenCV Python——图像融合(两张相同属性的图片按比例叠加),addWeighted()
  • 软考 系统架构设计师系列知识点之杂项集萃(124)
  • 池式结构之连接池
  • pwn定时器,ARM定时delay 外部中断用函数指针(统一)day55,56
  • 数据结构:满二叉树 (Full Binary Tree) 和 完全二叉树 (Complete Binary Tree)
  • 安卓定制开机动画的bootanimation.zip的注意点
  • (论文阅读)FedViT:边缘视觉转换器的联邦持续学习
  • 美国服务器环境下Windows容器工作负载基于指标的自动扩缩
  • Java驾驭金融风暴:大数据+机器学习重塑资产配置与风险平衡
  • CPP多线程3:async和future、promise
  • 【八股】计网-计算机网络-秋招
  • 让数据库交互更优雅:MyBatis核心机制深度解析(附实战视频教程)
  • 【DL学习笔记】常用数据集总结
  • 详解flink java基础(二)
  • 使用nvm查看/安装node版本
  • Spring AI 进阶之路01:三步将 AI 整合进 Spring Boot
  • 【科研绘图系列】R语言绘制雷达图
  • MySQL 配置性能优化赛技术指南
  • MySQL 配置性能优化赛技术文章
  • 从 MySQL 5.7 迁移到 8.0:别让 SQL 文件 “坑” 了你