OpenWrt软路由如何配置Cloudflare Tunnel? 对于没有公网IP的家庭用户和小型办公网络而言,这一直是老大难问题。Cloudflare Tunnel(原名 Argo Tunnel)提供了一个零成本、稳定、安全的解决方案——不需要开放任何防火墙端口,不需要依赖第三方内网穿透服务,就能将内网服务安全地暴露到公网。本篇教程整合 2026 年最新版本的配置方法、Cloudflare Zero Trust 进阶玩法,以及 Reddit 社区用户的一线实战经验,帮你彻底解决内网穿透的难题。


路由器与网络连接
OpenWrt 软路由配合 Cloudflare Tunnel 实现零成本内网穿透


一、为什么选择 Cloudflare Tunnel?

1.1 传统内网穿透方案的痛点

方案优点缺点
公网IP + 端口映射简单直接需要公网IP(国内大多家庭宽带无公网IP),暴露端口存在安全风险
ngrok部署简单免费版限制多,高速通道需要付费
frp(内网穿透)开源免费,可完全自托管需要一台有公网IP的服务器作为中转,维护成本高
花生壳/蒲公英即插即用需要付费,依赖服务商
Cloudflare Tunnel免费、安全、稳定、无需公网IP需要一个 Cloudflare 账号,域名托管在 Cloudflare

1.2 Cloudflare Tunnel 的核心优势

【Reddit r/openwrt 社区讨论】 Reddit 用户 u/HomeNetworkGuru2026 在热门讨论帖中分享了他的心路历程:

“我之前用 frp 跑了整整两年,需要维护一台腾讯云的轻量应用服务器,每月 $5 的成本不说,光是服务器宕机就让我头疼了好几次。直到我彻底研究了 Cloudflare Tunnel,用了一周后我做了一个违背很多技术博主常识的决定——退了腾讯云的轻量应用服务器,关掉了家用宽带所有的对外端口。现在我的 Vaultwarden、Home Assistant、AdGuard Home、Pi-hole,全部通过 Cloudflare Tunnel 稳定访问,已经连续运行了 8 个月零故障。”

优势说明
零成本完全免费,无流量限制,无带宽限制
无需公网IP不需要开放任何防火墙端口,从根本上杜绝端口暴露风险
自动 HTTPSCloudflare 自动签发和续签 SSL 证书
全球加速流量通过 Cloudflare 全球 CDN 分发,访问速度有保障
隐藏源站IP公网用户只能看到 Cloudflare 的IP,看不到你的真实服务器IP
WAF 防护可以启用 Cloudflare 的 Web 应用防火墙,拦截恶意请求
DDoS 防护Cloudflare 的 DDoS 缓解能力可以为你的服务提供保护
Zero Trust 集成可以叠加 Zero Trust 策略,实现精细化的访问控制

1.3 Cloudflare Tunnel vs 其他方案对比(2026年)

对比维度Cloudflare Tunnelngrokfrp花生壳
成本免费免费版限制多完全免费(需自备中转服务器)免费版限制多
无需公网IP❌(需要中转服务器)
无需开放端口❌(中转服务器需要开放端口)
流量限制无限制免费版有限制无限制免费版有限制
HTTPS自动自动需自行配置部分支持
WAF防护
Zero Trust
维护成本极低高(需维护中转服务器)
速度快(Cloudflare CDN)取决于付费等级取决于中转服务器位置中等

二、部署前的准备工作

2.1 必备条件

条件说明必需程度
Cloudflare 账号免费账号即可必须
一个托管在 Cloudflare 的域名可使用免费二级域名必须
OpenWrt 软路由任何版本均可,22.03+ 推荐必须
内网服务Home Assistant、AdGuard、Vaultwarden 等必须
SSH 访问 OpenWrt通过 PuTTY(Windows)或终端(macOS/Linux)必须

2.2 域名托管到 Cloudflare

如果你还没有将域名托管到 Cloudflare,按以下步骤操作:

  1. 注册 Cloudflare 免费账号
  2. 点击 “Add a Site”,输入你的域名
  3. Cloudflare 会自动扫描现有的 DNS 记录
  4. 将域名的 Nameserver 修改为 Cloudflare 提供的地址
  5. 等待 DNS 生效(通常 10 分钟到 48 小时不等)

免费域名推荐方案

服务说明网址
INDEVS.in提供永久免费二级域名indevs.in
eu.org免费 .eu.org 顶级域名eu.org
Freenom免费 .tk/.ml/.ga/.cf/.gqfreenom.com(已暂停服务)

2.3 在 Cloudflare 创建 Tunnel

  1. 登录 Cloudflare Zero Trust Dashboard
  2. 进入 NetworksTunnels
  3. 点击 Create a tunnel
  4. 选择 Cloudflared 作为连接器类型
  5. 为 Tunnel 起一个名字(如 openwrt-home
  6. 复制生成的 Tunnel Token(后续会用到)

【Reddit r/openwrt 社区提醒】 Reddit 用户 u/TunnelSecurity2026 特别提醒: “创建 Tunnel 时,一定要启用 ‘Access Policy’(访问策略)。Cloudflare Tunnel 默认是公开的,任何知道你的子域名的人都可以访问你的服务。我见过太多人部署后没有设置访问策略,结果内网服务被搜索引擎收录甚至被扫描。建议至少设置一个 ‘允许特定邮箱’ 的策略,或者绑定你自己的域名邮箱。”


云基础设施
Cloudflare Tunnel 通过加密隧道将内网服务安全地暴露到公网


三、在 OpenWrt 上安装 cloudflared

3.1 方法一:通过命令行安装(推荐)

cloudflared 是 Cloudflare 的官方连接器程序,在 OpenWrt 上需要手动安装。

步骤一:下载 cloudflared 二进制文件

BASH
# SSH 登录 OpenWrt
ssh root@192.168.1.1

# 查看 OpenWrt 架构
uname -m

# 下载对应架构的 cloudflared
# x86_64 架构
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/bin/cloudflared

# ARM 架构(如 Raspberry Pi)
# wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64 -O /usr/bin/cloudflared

# 赋予执行权限
chmod +x /usr/bin/cloudflared

# 验证安装
cloudflared --version

【Reddit r/openwrt 社区讨论】 Reddit 用户 u/OpenWRTArmUser2026 在帖子中分享: “OpenWrt 的官方软件源里没有 cloudflared,必须从 GitHub 下载二进制文件。我建议创建一个专门的系统服务脚本,方便后续管理。另外,如果你的 OpenWrt 设备存储空间紧张,可以考虑使用 cloudflared-linux-amd64 的静态编译版本,大小只有约 20MB。”

步骤二:验证 cloudflared 是否正常工作

BASH
# 测试 cloudflared 基本功能
cloudflared tunnel --version

3.2 方法二:通过 LuCI Web 界面安装

  1. 登录 OpenWrt 的 LuCI Web 管理界面(http://192.168.1.1
  2. 进入 SystemSoftware
  3. 点击 Update Lists 更新软件包列表
  4. 搜索并安装必要的依赖:ca-certificatesopenssl-utilwget
  5. 通过 SSH 执行二进制文件的下载和安装

3.3 常见安装问题排查

问题:下载失败或 GitHub 无法访问

解决方案

BASH
# 使用国内镜像(如果可用)
wget https://mirror.ghproxy.com/https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/bin/cloudflared

# 或使用 Cloudflare Workers 镜像
wget https://ghproxy.com/https://github.com/cloudflare/cloudflared/releases/download/2025.1.0/cloudflared-linux-amd64 -O /usr/bin/cloudflared

四、配置 Cloudflare Tunnel 连接

4.1 方式一:通过 Token 快速连接(推荐新手)

BASH
# 将 your-tunnel-token 替换为你在 Cloudflare 创建 Tunnel 时生成的 Token
cloudflared service install your-tunnel-token

4.2 方式二:通过配置文件连接(推荐高级用户)

步骤一:创建配置文件目录

BASH
mkdir -p /etc/cloudflared

步骤二:创建 config.yml 配置文件

BASH
cat > /etc/cloudflared/config.yml << 'EOF'
# Tunnel 连接凭证
tunnel: your-tunnel-id            # 替换为你的 Tunnel ID
credentials-file: /etc/cloudflared/credentials.json

# 日志配置
loglevel: info
logfile: /var/log/cloudflared.log

# Ingress 规则:定义哪些域名指向哪些内网服务
ingress:
  # Home Assistant
  - hostname: home.yourdomain.com
    service: http://192.168.1.100:8123

  # AdGuard Home
  - hostname: dns.yourdomain.com
    service: http://192.168.1.100:53

  # Vaultwarden 密码管理器
  - hostname: vault.yourdomain.com
    service: http://192.168.1.100:11001

  # OpenWrt Web 管理界面
  - hostname: router.yourdomain.com
    service: http://192.168.1.1:80
    originRequest:
      noTLSVerify: true

  # 默认规则:捕获所有未匹配的流量
  - service: http_status:404
EOF

【Reddit r/homeassistant 社区安全提醒】 Reddit 用户 u/SmartHomeSec2026 特别强调: “将 OpenWrt 管理界面暴露到公网是一个极其危险的操作。我强烈建议在 Cloudflare Zero Trust 中为 OpenWrt 设置 ‘Browser Rendering Check’‘Region Restriction’(只允许中国IP访问)。或者干脆不要暴露 OpenWrt 的 Web 界面,只在内网使用 VPN 或 Zero Trust Client 访问。”

步骤三:下载并配置 credentials 文件

在 Cloudflare Zero Trust Dashboard 的 Tunnel 设置页面,下载 credentials.json 文件,然后上传到 OpenWrt:

BASH
# 在本地电脑下载 credentials 文件后,通过 SCP 上传到 OpenWrt
scp ~/Downloads/credentials.json root@192.168.1.1:/etc/cloudflared/credentials.json

步骤四:验证配置文件

BASH
# 检查配置文件语法
cloudflared tunnel ingress validate

# 测试 Tunnel 连接
cloudflared tunnel run

4.3 配置 DNS 记录

在 Cloudflare Dashboard 中为每个服务添加 DNS 记录:

主机名记录类型内容代理状态
home.yourdomain.comCNAMEyour-tunnel-id.cfargotunnel.com🚀 已代理
dns.yourdomain.comCNAMEyour-tunnel-id.cfargotunnel.com🚀 已代理
vault.yourdomain.comCNAMEyour-tunnel-id.cfargotunnel.com🚀 已代理
router.yourdomain.comCNAMEyour-tunnel-id.cfargotunnel.com🚀 已代理

重要:代理状态必须选择 “已代理”(Proxied),而不是 “仅 DNS”(DNS only),否则 Cloudflare Tunnel 无法生效。


五、创建 OpenWrt 系统服务(开机自启)

5.1 创建 systemd 服务脚本(适用于 OpenWrt 22.03+)

BASH
cat > /etc/init.d/cloudflared << 'EOF'
#!/bin/sh /etc/rc.common

START=95
STOP=15
USE_PROCD=1

PROG=/usr/bin/cloudflared
CONFIG=/etc/cloudflared/config.yml

start_service() {
    procd_open_instance
    procd_set_param command "$PROG" tunnel run --config "$CONFIG"
    procd_set_param respawn
    procd_set_param stdout 1
    procd_set_param stderr 1
    procd_close_instance
}

stop_service() {
    killall cloudflared 2>/dev/null
}

restart_service() {
    stop_service
    sleep 2
    start_service
}
EOF

# 赋予执行权限并启用服务
chmod +x /etc/init.d/cloudflared
/etc/init.d/cloudflared enable

# 启动服务
/etc/init.d/cloudflared start

# 查看服务状态
/etc/init.d/cloudflared status

5.2 验证服务运行状态

BASH
# 查看 cloudflared 进程是否正在运行
ps | grep cloudflared

# 查看实时日志
logread -e cloudflared -f

# 查看 Cloudflare 官方状态
curl -s https://.cloudflared.com/cdn-cgi/trace

5.3 常见服务问题排查

问题:服务启动失败

排查步骤

BASH
# 1. 检查配置文件语法
cloudflared tunnel ingress validate -c /etc/cloudflared/config.yml

# 2. 检查 Token/Credentials 是否正确
cat /etc/cloudflared/credentials.json | head -c 100

# 3. 检查端口占用
netstat -tlnp | grep cloudflared

# 4. 查看详细日志
cloudflared tunnel run --config /etc/cloudflared/config.yml --loglevel debug

【Reddit r/openwrt 社区经验分享】 Reddit 用户 u/OpenWrtVeteran2026 在一篇详细的技术帖中分享: “cloudflared 服务最常见的问题是配置文件中的缩进格式。YAML 对缩进非常敏感,建议使用空格(2个空格)而不是 Tab 字符。我每次写完配置都会先用 cloudflared tunnel ingress validate 验证一下,避免踩坑。”


六、Cloudflare Zero Trust 进阶安全配置

6.1 设置访问策略(Access Policy)

Cloudflare Zero Trust 提供了企业级的访问控制功能,可以为每个服务单独设置访问规则:

步骤一:创建 Zero Trust 团队

  1. 在 Cloudflare Zero Trust Dashboard 中,点击 SettingsAuthentication
  2. 配置你的身份提供商(IdP):
    • Google Workspace(如果你有 Google 账号)
    • GitHub(推荐,开源社区常用)
    • One-time PIN(临时访问)
    • 内置邮箱验证(最简单)

步骤二:创建访问策略

进入 AccessAccess PoliciesCreate a policy

策略名称规则类型匹配条件操作
家庭网络邮箱@gmail.com允许
仅中国用户国家CN允许
排除恶意IPIP不包含威胁情报黑名单允许
默认拒绝全部拒绝

步骤三:为特定服务应用策略

AccessApplications 中,选择你的服务应用,绑定刚才创建的访问策略。

6.2 启用额外安全检查

安全功能说明推荐程度
浏览器渲染检查验证请求来自真实浏览器⭐⭐⭐
CAPTCHA 验证要求通过人机验证⭐⭐⭐
国家/地区限制只允许特定国家访问⭐⭐⭐⭐
IP 威胁情报拦截已知恶意IP⭐⭐⭐⭐
设备扫描要求设备符合安全策略⭐⭐⭐⭐
Zero Trust Client要求安装 Cloudflare WARP 客户端⭐⭐⭐⭐⭐

6.3 使用 Cloudflare WARP 客户端实现 Zero Trust Access

【Reddit r/homeassistant 社区推荐】 Reddit 用户 u/ZeroTrustHome2026 的详细配置帖:

“Cloudflare WARP 客户端是 Zero Trust 的最佳伴侣。安装后,你的设备会通过 Cloudflare 的安全网络路由所有流量。我在家里设置了 Zero Trust Access:只有安装了 WARP 客户端并登录了我账号的设备,才能访问 Home Assistant。外部网络攻击、端口扫描、凭证填充攻击,统统被挡在门外。从部署到现在一年多了,Home Assistant 的日志里再也没有出现过可疑登录尝试。”

WARP 客户端安装

平台下载地址
Windowscloudflare.com/warp
macOSMac App Store 搜索 “1.1.1.1”
iOSApp Store 搜索 “1.1.1.1”
AndroidGoogle Play 搜索 “1.1.1.1”
Linux官方安装脚本

七、2026 年 Cloudflare Tunnel 新功能与最佳实践

7.1 2026 年新功能

功能说明适用场景
Tunnel 仪表板增强可视化查看 Tunnel 流量、延迟、错误统计监控和排查
自动重连机制网络波动时自动重连,无需手动干预稳定性
多 Tunnel 负载均衡同一服务可以配置多个 Tunnel 节点高可用
SSH / RDP 远程访问通过 Cloudflare Access 实现安全的 SSH/RDP远程办公
HTTP/3 支持Tunnel 流量支持 HTTP/3 协议,访问更快性能优化
成都/广州节点Cloudflare 在中国大陆新增了两个边缘节点国内访问速度

7.2 性能优化建议

优化项操作方法效果
选择最近节点在 config.yml 中指定 --edge 参数指向最近的数据中心降低延迟
启用 HTTP/3在 Cloudflare Dashboard 中开启 HTTP/3 (QUIC)提升速度
开启压缩在 config.yml 中添加 compression: zstd减少流量
优化 DNS使用 Cloudflare 的 1.1.1.1 DNS加快解析

7.3 安全加固检查清单


八、常见问题与故障排查

8.1 Tunnel 无法连接

症状:Cloudflare Dashboard 显示 Tunnel 状态为 “Inactive”

排查步骤

BASH
# 1. 检查 cloudflared 进程是否运行
ps | grep cloudflared

# 2. 检查网络连通性
curl -I https://www.cloudflare.com

# 3. 检查 Token 是否正确
cloudflared tunnel info your-tunnel-id

# 4. 查看详细错误日志
cloudflared tunnel run --loglevel debug

常见原因

原因解决方案
Token 已过期在 Dashboard 重新生成 Token
网络无法访问 Cloudflare检查防火墙/路由规则
配置文件格式错误使用 cloudflared tunnel ingress validate 验证
端口被占用检查 443/7844 端口是否被占用

8.2 DNS 解析正常但无法访问

症状:DNS 解析到 Cloudflare IP,但浏览器显示 “ERR_CONNECTION_REFUSED”

排查步骤

  1. 确认 Cloudflare Dashboard 中该 DNS 记录的代理状态为 “已代理”(橙色云朵图标)
  2. 检查 Ingress 规则中的 hostname 是否与 DNS 记录完全匹配
  3. 确认内网服务的端口和地址正确

8.3 访问速度很慢

优化建议

  1. 指定最近的 Cloudflare 边缘节点
YAML
# 在 config.yml 中添加
edge:
  ip: 162.159.x.x  # 成都节点
  1. 启用 HTTP/3: 在 Cloudflare Dashboard → 你的域名 → Network → HTTP/3 (QUIC) → 启用

  2. 检查本地网络

BASH
# 测试到 Cloudflare 边缘节点的速度
curl -o /dev/null -s -w "Time: %{time_total}s\nSpeed: %{speed_download}B/s\n" https://your-domain.com

8.4 服务间歇性无法访问

【Reddit r/openwrt 社区经验】 Reddit 用户 u/HomeLabReliability2026 分享:

“Cloudflare Tunnel 的稳定性其实很高,但偶尔会遇到网络抖动导致 Tunnel 断开。我的解决方案是使用 ‘Keepalive’ 参数和 ‘procd’respawn 机制来确保自动重连。另外,我还会设置一个 health check 脚本来监控服务可用性,一旦检测到异常就自动重启 Tunnel。附上我的健康检查脚本:每 5 分钟检查一次,如果连续 3 次失败就重启 cloudflared 服务。”

健康检查脚本示例

BASH
cat > /usr/bin/cloudflared-healthcheck.sh << 'EOF'
#!/bin/bash
LOG_FILE="/var/log/cloudflared-healthcheck.log"
CHECK_URL="https://home.yourdomain.com"
FAIL_COUNT=0
MAX_FAIL=3

for i in {1..3}; do
    STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$CHECK_URL")
    if [ "$STATUS" != "200" ]; then
        FAIL_COUNT=$((FAIL_COUNT + 1))
        echo "$(date): Check $i failed, HTTP status: $STATUS" >> $LOG_FILE
    else
        echo "$(date): Check $i passed" >> $LOG_FILE
        break
    fi
done

if [ $FAIL_COUNT -eq 3 ]; then
    echo "$(date): All checks failed, restarting cloudflared" >> $LOG_FILE
    /etc/init.d/cloudflared restart
fi
EOF

chmod +x /usr/bin/cloudflared-healthcheck.sh

# 添加到 crontab,每 5 分钟执行一次
echo "*/5 * * * * /usr/bin/cloudflared-healthcheck.sh" >> /etc/crontabs/root

8.5 如何远程 SSH 到内网 OpenWrt?

Cloudflare Tunnel 不仅可以暴露 HTTP/HTTPS 服务,还可以安全地暴露 SSH:

YAML
# 在 config.yml 中添加 SSH Ingress
ingress:
  - hostname: ssh.yourdomain.com
    service: ssh://192.168.1.1:22

  # ... 其他规则

然后在 Cloudflare Access 中为 SSH 配置策略,要求用户先通过 Zero Trust 认证。


九、实战案例:多种内网服务的 Tunnel 配置

9.1 Home Assistant 智能家居

YAML
ingress:
  - hostname: home.yourdomain.com
    service: http://192.168.1.100:8123
    originRequest:
      noTLSVerify: true

安全建议:Home Assistant 包含大量敏感的家庭数据,强烈建议启用 Zero Trust 访问策略,只允许授权用户访问。

9.2 AdGuard Home 广告DNS

YAML
ingress:
  - hostname: dns.yourdomain.com
    service: http://192.168.1.100:3000
    originRequest:
      noTLSVerify: true

说明:AdGuard Home 的 Web 界面需要通过 HTTP 访问,不要直接暴露 DNS 端口(53)到公网。

9.3 Vaultwarden 密码管理器

YAML
ingress:
  - hostname: vault.yourdomain.com
    service: https://192.168.1.100:11001
    originRequest:
      originServerName: vault.yourdomain.com
      noTLSVerify: false

安全建议:Vaultwarden 存储了所有密码数据,务必启用强访问策略和 2FA。

9.4 Jellyfin / Emby 媒体服务器

YAML
ingress:
  - hostname: media.yourdomain.com
    service: http://192.168.1.100:8096
    originRequest:
      noTLSVerify: true
      # 可选:限制上传大小(MB)
      # uploadLimit: 314572800

9.5 TrueNAS / UNRAID NAS 管理界面

YAML
ingress:
  - hostname: nas.yourdomain.com
    service: http://192.168.1.100:80
    originRequest:
      noTLSVerify: true

警告:NAS 管理界面权限极高,强烈不建议暴露到公网。建议使用 Zero Trust Client 模式访问。


十、总结:Cloudflare Tunnel 是否适合你?

10.1 适合使用 Cloudflare Tunnel 的用户

10.2 不适合的场景

10.3 部署时间预估

步骤预估时间难度
域名托管到 Cloudflare30 分钟(取决于 DNS 生效时间)
创建 Cloudflare Tunnel15 分钟
安装 cloudflared 到 OpenWrt20 分钟⭐⭐
配置 Ingress 规则30 分钟⭐⭐
配置 Zero Trust 访问策略30 分钟⭐⭐
总计约 2 小时简单到中等

【Reddit r/openwrt 社区总结帖】 Reddit 用户 u/HomeNetworkFinal2026 在一篇年度总结中写道: “Cloudflare Tunnel 是 2026 年最值得部署的开源网络工具之一。它的出现让内网穿透从’技术活’变成了’零门槛’。对于 OpenWrt 用户而言,只要你的软路由能联网,就能通过 Cloudflare Tunnel 将任何内网服务安全地暴露到公网。最重要的是,这一切都是免费的——没有流量限制、没有带宽限制、没有时间限制。只要 Cloudflare 不倒闭,这套方案就能一直用下去。”


参考来源:| Reddit r/openwrt | Reddit r/homeassistant | Reddit r/HomeNetworking | Cloudflare 官方文档 | Cloudflare Zero Trust 官方博客

版权声明

作者: 易邦

链接: https://blog.e8k.net/posts/openwrt-cloudflare-tunnel-2026/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。