LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

[点晴永久免费OA]Cloudflare Tunnel 内网穿透完全指南

admin
2026年6月13日 18:17 本文热度 75

告别端口映射,拥抱现代网络:无公网 IP?无固定 IP?不想开放危险端口?没问题!通过 Cloudflare 免费隧道,让你的内网服务(NAS、Jenkins、SSH 等)安全地从任何地方访问。

本教程环境:Ubuntu 24.04 LTS + 域名 demo.com

预计完成时间:30-45 分钟(包含 DNS 迁移等待时间)


🎯 一、前置准备

1.1 准备好这些"装备"

在开始我们的隧道之旅之前,确保你有以下"装备"

装备
说明
重要程度
🌐 域名
一个已注册域名,如 demo.com
⭐⭐⭐⭐⭐
🏢 域名管理平台
本教程以阿里云为例,其他平台类似
⭐⭐⭐⭐
🖥️ 服务器/设备
一台能访问外网的 Linux 设备(Ubuntu/Debian/CentOS)
⭐⭐⭐⭐⭐
🏠 内网服务
至少一个已运行的内网服务,如 http://localhost:8080
⭐⭐⭐⭐
☁️ Cloudflare 账号
免费账号即可,功能强大
⭐⭐⭐⭐⭐

1.2 先了解工作原理

在动手之前,让我们先理解一下 Cloudflare Tunnel 的魔法是如何工作的:

📱 用户浏览器/客户端
         ↓ 🔒 HTTPS(加密传输)
🌍 Cloudflare 边缘节点(全球 CDN 加速)
         ↓ 🚇 HTTP/2 隧道(穿透内网)
💻 cloudflared 客户端(你的服务器)
         ↓ 📡 HTTP/TCP/SSH
🏠 内网服务(localhost:8080 / :22 / :1883)

简单来说:你的内网服务通过一条加密隧道连接到 Cloudflare 的全球网络,用户访问你的域名时,Cloudflare 会通过这条隧道把请求转发给你的内网服务。整个过程对用户透明,无需端口映射,无需公网 IP!


🔧 二、域名解析迁移至 Cloudflare

2.1 第一步:备份原有 DNS 记录

在开始迁移之前,我们首先要做好"备份"——就像搬家前要打包行李一样。

登录阿里云控制台,进入 云解析 DNS → demo.com → 解析设置,记录当前所有解析记录(A、CNAME、MX、TXT 等)。

💡 示例记录(已脱敏):|主机记录|类型|记录值||---------|------|--------||www|A|185.199.111.153||www|A|185.199.110.153 |

2.2 第二步:在 Cloudflare 添加域名

现在让我们把你的域名"搬家"到 Cloudflare:

  1. 登录 Cloudflare Dashboard
  2. 点击 "Add a site",输入 demo.com
  3. 选择 Free 计划(免费功能已经足够强大!)
  4. Cloudflare 会自动扫描现有 DNS 记录,仔细核对导入结果,手动补全遗漏的 MX、TXT 记录

2.3 第三步:修改域名 NS 服务器

这是关键的一步——我们要告诉互联网世界,你的域名现在由 Cloudflare 管理!

在阿里云域名控制台找到 demo.com

路径:域名列表  管理  DNS 修改(或查看 DNS 服务器)

将原有阿里云 NS:

dns1.iidns.com
dns2.iidns.com

替换为 Cloudflare 分配的两个 NS(以实际分配为准):

priscilla.ns.cloudflare.com
craig.ns.cloudflare.com

 提示:保存后等待全球生效,通常几分钟到 48 小时。期间服务不会中断。

2.4 第四步:验证 NS 生效

如何知道迁移成功了?用这个命令检查:

dig NS demo.com

预期输出(成功标志):

;; ANSWER SECTION:
demo.com.        1000    IN    NS    priscilla.ns.cloudflare.com.
demo.com.        1000    IN    NS    craig.ns.cloudflare.com.

看到 Cloudflare 的 NS 服务器,恭喜你!迁移成功!🎉

2.5 迁移后的温馨提示

  • 📋 不要立即删除阿里云解析记录:等待 Cloudflare 面板显示 Active 后再清理
  • 🔓 禁止更新锁:迁移完成后建议保持关闭,避免未来修改 NS 受阻
  • 📧 MX/TXT 检查:如有企业邮箱、域名验证,确保记录完整导入

⚙️ 三、Cloudflare 网站配置


3.1 确认域名状态

进入 Cloudflare 面板  demo.com,顶部状态应显示为 Active。如果不是,请等待 DNS 传播完成。

3.2 设置 SSL/TLS 加密模式

路径:SSL/TLS  概述

根据你的内网服务情况选择合适的加密模式:

后端服务协议
推荐模式
说明
安全等级
HTTP(无证书)
Flexible
Cloudflare 到用户用 HTTPS,到源站用 HTTP
⭐⭐⭐
HTTPS(自签证书)
Full
两端加密,但不验证源站证书
⭐⭐⭐⭐
HTTPS(权威证书)
Full (strict)
两端加密并验证证书
⭐⭐⭐⭐⭐

💡 初次搭建建议:先选 Flexible 测试,确认连通后再升级。避免一开始就因证书问题卡住。

3.3 创建你的专属隧道

现在我们开始创建隧道——这是连接内网和外网的桥梁!

路径:Zero Trust  Networks  Tunnels  Create a tunnel

  1. 选择 Cloudflared
  2. 给隧道起个名字,如 home-nas(方便识别)
  3. 保存后获得 Tunnel ID(类似:abcd1234-5678-90ab-cdef-example11111

🔑 记住这个 Tunnel ID,后面配置时会用到!

3.4 获取隧道凭证(三选一)

🖥️ 方式 A:浏览器授权(适合有图形界面的机器)

这是最简单的方式:

cloudflared tunnel login

浏览器会弹出授权页面,选择 demo.com,授权后本地生成 ~/.cloudflared/cert.pem

💻 方式 B:API Token(适合纯 SSH 无图形界面)

如果你在纯命令行环境下工作:

路径:Cloudflare 面板  My Profile  API Tokens  Create Token  Custom token

权限设置:

  • Account:Cloudflare Tunnel → Edit
  • Zone: DNS → Edit

  • Zone Resources:Include → Specific zone → `demo.com`

    生成 Token 后,在服务器上:

    export TUNNEL_API_TOKEN="你的Token"
    cloudflared tunnel create --cred-file /home/user/.cloudflared/tunnel-001.json home-nas

    📡 方式 C:证书文件上传(推荐)

    最灵活的方式——在本地有浏览器的机器执行 cloudflared tunnel login,然后将证书上传到服务器:

    scp -P 11413 ~/.cloudflared/cert.pem user@192.0.2.1:/home/user/.cloudflared/

    💡 -P 指定 SSH 非默认端口,如果你的 SSH 用了自定义端口的话。

    3.5 绑定 DNS 路由

    隧道创建后,我们需要告诉 Cloudflare 哪些子域名应该通过这个隧道访问:

    cloudflared tunnel route dns home-nas iot-deploying.demo.com
    cloudflared tunnel route dns home-nas iot-home.demo.com
    cloudflared tunnel route dns home-nas iot-home-server.demo.com


    这会在 Cloudflare DNS 自动创建 CNAME 记录,指向 <TunnelID>.cfargotunnel.com。很聪明,对吧?🧠


    🛠️ 四、服务器端 cloudflared 安装

    4.1 Ubuntu/Debian 官方仓库安装(推荐)

    使用官方仓库安装可以确保你获得最新版本和自动更新:

    # 添加 GPG key
    sudo mkdir -p --mode=0755 /usr/share/keyrings
    curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

    # 添加 apt 源
    echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list

    # 安装
    sudo apt-get update && sudo apt-get install -y cloudflared

    # 验证安装
    cloudflared --version

    如果 apt-get update 出现 NO_PUBKEY 或签名验证失败,别担心,我们还有备选方案:

    # 直接下载 .deb 包安装
    curl -LO https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
    sudo dpkg -i cloudflared-linux-amd64.deb

    # 如有依赖问题
    sudo apt-get install -f

    4.3 验证安装成功

    cloudflared --version
    # 预期输出类似:cloudflared version 2026.3.0 (built 2026-03-01)

    看到版本号输出,说明安装成功!下一步就是配置了。🎯


    🎛️ 五、内网穿透配置

    5.1 配置文件结构

    配置文件路径:/home/user/.cloudflared/config.yml

    这是整个隧道配置的核心文件,让我们看看它长什么样:

    tunnelabcd1234-5678-90ab-cdef-example11111
    credentials-file/home/user/.cloudflared/tunnel-001.json
    protocolhttp2

    ingress:
      - hostnameiot-deploying.demo.com
    servicehttp://localhost:8080

      - hostnameiot-home.demo.com
    servicehttp://localhost:7070

      - hostnameiot-home-server.demo.com
    servicehttp://localhost:5001

      - servicehttp_status:404

    5.2 关键规则说明

    让我们逐行解释这个配置文件:

    字段
    说明
    重要程度
    tunnel
    你的隧道 UUID,创建隧道时生成
    ⭐⭐⭐⭐⭐
    credentials-file
    隧道凭证 JSON 文件路径
    ⭐⭐⭐⭐⭐
    protocol: http2
    强制使用 HTTP/2 连接 Cloudflare 边缘(解决国内 UDP/QUIC 被限问题)
    ⭐⭐⭐⭐
    ingress
    路由规则列表,按顺序匹配
    ⭐⭐⭐⭐⭐
    service: http_status:404兜底规则
    ,必须放在最后,匹配所有未被前面规则命中的请求
    ⭐⭐⭐⭐⭐

    5.3 ⚠️ 最常见的配置错误(必看!)

    这是新手最容易犯错的地方,请仔细阅读!

    ❌ 错误写法(http_status:404 放在中间,截断后续规则)

    # ❌ 错误示例
    ingress:
      - hostnameiot-deploying.demo.com
    servicehttp://localhost:8080
      - servicehttp_status:404# 错误!会截断,后续规则永不匹配

      - hostnameiot-home.demo.com# 永远不会走到这里
    servicehttp://localhost:7070
      - servicehttp_status:404# 重复兜底,语法允许但逻辑错误

    ✅ 正确写法(http_status:404 只能有一条,且必须在最后)

    # ✅ 正确示例
    ingress:
      - hostnameiot-deploying.demo.com
    servicehttp://localhost:8080

      - hostnameiot-home.demo.com
    servicehttp://localhost:7070

      - servicehttp_status:404# 唯一兜底规则,放在最后

    🚨 记住http_status:404 是兜底规则,必须放在最后,且只能有一条!

    5.4 支持的协议对照表

    Cloudflare Tunnel 不仅支持 HTTP,还支持多种协议:

    协议
    service 写法
    浏览器访问
    用途
    HTTP
    http://localhost:8080
    ✅ 直接访问
    Web 服务
    HTTPS
    https://localhost:8443
    ✅ 直接访问
    加密 Web 服务
    TCP
    tcp://localhost:3306
    ❌ 需 WARP/CLI
    数据库等通用 TCP
    SSH
    ssh://localhost:22
    ❌ 需 WARP/CLI
    远程终端
    RDP
    rdp://localhost:3389
    ❌ 需 WARP/CLI
    Windows 远程桌面
    SMB
    smb://localhost:445
    ❌ 需 WARP/CLI
    文件共享

    💡 提示:标记为  的协议需要额外配置(如 Cloudflare WARP 客户端)才能访问,但 HTTP/HTTPS 可以直接通过浏览器访问。

    5.5 启动隧道并验证

    激动人心的时刻到了!让我们启动隧道看看效果:

    前台测试(观察日志)

    cloudflared tunnel run --protocol http2 home-nas

    🎉 成功日志特征

    如果一切正常,你会看到类似这样的输出:

    INF Starting metrics server on 127.0.0.1:20241/metrics
    INF Registered tunnel connection connIndex=0 connection=xxxx event=0 ip=198.41.200.193 location=sjc07 protocol=http2
    INF Registered tunnel connection connIndex=1 connection=xxxx event=0 ip=198.41.192.227 location=sjc01 protocol=http2
    INF Registered tunnel connection connIndex=2 connection=xxxx event=0 ip=198.41.200.23 location=sjc07 protocol=http2
    INF Registered tunnel connection connIndex=3 connection=xxxx event=0 ip=198.41.192.167 location=sjc06 protocol=http2

    看到 4 条 Registered tunnel connection,恭喜你!隧道已成功注册到 Cloudflare 边缘网络!🎊

    现在你可以在浏览器中访问 https://iot-deploying.demo.com 试试看!


    🔍 六、常见问题排查

    6.1 QUIC 超时(国内网络常见问题)

    现象

    WRN Failed to dial a quic connection error="failed to dial to edge with quic: timeout: no recent network activity"

    原因:国内网络对 UDP/QUIC 协议有限制

    解决方案:强制使用 HTTP/2 协议

    cloudflared tunnel run --protocol http2 home-nas

    或者在 config.yml 顶部添加 protocol: http2

    6.2 DNS 解析失败 / 本地缓存问题

    现象

    curl -v https://iot-deploying.demo.com
    # Could not resolve host: iot-deploying.demo.com

    解决方案:清除 DNS 缓存

    # macOS
    sudo dscacheutil -flushcache
    sudo killall -HUP mDNSResponder

    # Linux (systemd-resolved)
    sudo systemd-resolve --flush-caches

    # Windows
    ipconfig /flushdns

    6.3 525 / 526 SSL 握手错误

    现象:浏览器显示 525/526 错误

    解决方案:调整加密模式

    Cloudflare 面板  SSL/TLS  将加密模式从 Full (strict) 改为 Full  Flexible

    6.4 403 Forbidden 错误

    现象:HTTP 403,但服务明明在运行

    排查步骤

    # 1. 确认本地服务正常
    curl -I http://localhost:8080

    # 2. 确认域名解析到 Cloudflare
    dig iot-deploying.demo.com
    # 应返回 Cloudflare IP(如 104.21.x.x / 172.67.x.x)

    🔄 七、服务自启动配置

    为了让隧道在服务器重启后自动运行,我们需要配置 systemd 服务。

    7.1 准备系统级配置文件

    将配置文件和凭证文件移到系统级目录(避免权限问题):

    sudo mkdir -p /etc/cloudflared
    sudo cp /home/user/.cloudflared/config.yml /etc/cloudflared/
    sudo cp /home/user/.cloudflared/tunnel-001.json /etc/cloudflared/

    # 修改 config.yml 中的 credentials-file 路径
    sudo sed -i 's|/home/user/.cloudflared|/etc/cloudflared|g' /etc/cloudflared/config.yml

    7.2 创建 systemd 服务

    sudo tee /etc/systemd/system/cloudflared.service << 'EOF'
    [Unit]
    Description=Cloudflare Tunnel
    After=network-online.target
    Wants=network-online.target

    [Service]
    Type=simple
    ExecStart=/usr/local/bin/cloudflared tunnel run --config /etc/cloudflared/config.yml --protocol http2
    Restart=always
    RestartSec=5

    [Install]
    WantedBy=multi-user.target
    EOF

    7.3 启动服务并设置开机自启

    # 重载 systemd 配置
    sudo systemctl daemon-reload

    # 设置开机自启并立即启动
    sudo systemctl enable --now cloudflared

    # 查看服务状态
    sudo systemctl status cloudflared

    正常状态输出

    ● cloudflared.service - Cloudflare Tunnel
         Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; preset: enabled)
         Active: active (running) since Tue 2026-05-12 15:30:00 CST; 2min ago
       Main PID: 1234567 (cloudflared)
          Tasks: 12 (limit: 9407)
         Memory: 34.2M
            CPU: 1.234s
         CGroup: /system.slice/cloudflared.service
                 └─1234567 /usr/local/bin/cloudflared tunnel run --config /etc/cloudflared/config.yml --protocol http2

    7.4 查看实时日志

    sudo journalctl -u cloudflared -f

    7.5 服务管理命令

    sudo systemctl stop cloudflared    # 停止服务
    sudo systemctl restart cloudflared  # 重启服务
    sudo systemctl disable cloudflared  # 禁用开机自启

    ✅ 八、验证清单

    完成配置后,让我们逐一验证每个环节是否正常工作:

    8.1 服务器端验证

    # 确认内网服务在监听
    curl -I http://localhost:8080
    curl -I http://localhost:7070
    curl -I http://localhost:5001

    所有服务都应该返回 HTTP/1.1 200 OK 或类似的正常响应。

    8.2 DNS 解析验证

    # 确认域名指向 Cloudflare
    dig iot-deploying.demo.com

    # 预期返回 Cloudflare IP
    iot-deploying.demo.com.  300  IN  A  104.21.24.99
    iot-deploying.demo.com.  300  IN  A  172.67.218.43

    看到 Cloudflare 的 IP 地址(104.21.x.x 或 172.67.x.x)说明 DNS 解析正确!

    8.3 外部访问验证

    curl -I https://iot-deploying.demo.com

    # 预期返回 HTTP/2 200 或 403(服务正常但需认证)
    HTTP/2 200
    date: Tue, 12 May 2026 06:59:41 GMT
    server: cloudflare
    cf-cache-status: DYNAMIC

    看到 server: cloudflare 说明请求通过了 Cloudflare!

    8.4 隧道健康状态

    # 在服务器上查看 metrics
    curl -s http://127.0.0.1:20241/metrics | grep tunnel

    应该看到各种隧道相关的指标数据。

    8.5 Cloudflare 面板验证

    路径:Zero Trust  Networks  Tunnels  home-nas

    • 状态:🟢 Healthy

    • 活动副本:1

    • 路由:显示已绑定的所有子域名

    看到绿色状态,恭喜你,整个系统运行正常!🎉


    📚 九、附录

    9.1 快速命令速查表

    把常用命令记在这里,方便随时查阅:

    操作
    命令
    安装 cloudflared
    sudo apt-get install cloudflared
    登录授权
    cloudflared tunnel login
    创建隧道
    cloudflared tunnel create home-nas
    绑定 DNS
    cloudflared tunnel route dns home-nas sub.demo.com
    前台启动
    cloudflared tunnel run --protocol http2 home-nas
    查看隧道列表
    cloudflared tunnel list
    查看服务状态
    sudo systemctl status cloudflared
    查看服务日志
    sudo journalctl -u cloudflared -f
    重启服务
    sudo systemctl restart cloudflared

    9.2 配置文件模板汇总

    单服务模板(适合只有一个内网服务的场景):

    tunnelabcd1234-5678-90ab-cdef-example11111
    credentials-file/etc/cloudflared/tunnel-001.json
    protocolhttp2

    ingress:
      - hostnameapp.demo.com
    servicehttp://localhost:8080
      - servicehttp_status:404

    多服务模板(适合有多个内网服务的场景):

    tunnelabcd1234-5678-90ab-cdef-example11111
    credentials-file/etc/cloudflared/tunnel-001.json
    protocolhttp2

    ingress:
      - hostnamejenkins.demo.com
    servicehttp://localhost:8080

      - hostnamenas.demo.com
    servicehttp://localhost:5000

      - hostnamessh.demo.com
    servicessh://localhost:22

      - servicehttp_status:404

    9.3 脱敏规范说明

    为了保护隐私,本文档所有示例已按以下规则脱敏:

    类型
    原始值
    替换值
    域名
    guushu.comdemo.com
    服务器 IP
    真实公网 IP
    192.0.2.1
    用户名
    howard
     / steve
    user
    隧道 ID
    真实 UUID
    abcd1234-5678-90ab-cdef-example11111
    主机名
    真实设备名
    server
    连接 ID / Session
    真实 UUID
    xxxx
     或示例值
    MAC 地址
    真实地址
    已删除

    🎊 结语

    恭喜你完成了 Cloudflare Tunnel 的配置!现在你可以:

    • 🌍 从世界任何地方访问你的内网服务
    • 🔒 享受端到端的加密连接
    • 🚀 告别繁琐的端口映射和公网 IP
    • 💸 使用免费且强大的 Cloudflare 网络

    如果你在配置过程中遇到问题,不要慌张,仔细检查配置文件,查看日志,大多数问题都能通过调整配置解决。

    文档版本:v1.0
    更新日期:2026-05-12
    祝你使用愉快! 🚀
    适用 cloudflared 版本:2026.3.0+


    该文章在 2026/6/13 18:17:41 编辑过
    关键字查询
    相关文章
    正在查询...
    点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
    点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
    点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
    点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
    Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-9  粤公网安备44030602007207号