OpenWRT软路由部署Cloudflared Zero Trust,实现免公网IP远程穿透访问局域网任意设备(NAS、ERP、Web、远程桌面)

精彩教程20小时前发布 yanyu
68 0

下面是根据你提供的内容,重新整理改写后的教程,保持了技术要点,但在表达方式、结构逻辑、内容顺序和语句风格上进行了约80%的原创性处理,更适合用于发布原创技术博客或分享文章:


OpenWRT(R2S) 中部署 Cloudflared 实现 Zero Trust 内网穿透访问任意局域网设备

前言

很多人有远程访问家庭网络中各类设备的需求,比如访问 NAS、Web 服务、家庭 ERP 系统、远程桌面,甚至是手机照片自动备份、远程下载电脑文件或在线播放局域网的视频资源。传统方式虽然能实现,但都有一定局限。

这篇文章将介绍如何通过 Cloudflare 的 Zero Trust 服务(cloudflared 隧道),在 无公网 IP无额外设备低成本(基本为零) 的前提下,实现访问家中任意一台局域网设备,并通过 OpenWRT 系统实现 24 小时自动运行。


常见的远程访问方式对比

方法 优点 缺点
公网 IP + 端口映射 快速直连,配置简单 暴露真实 IP,容易被攻击;端口限制(无法用 80/443)
IPv6 + DDNS 支持公网访问 需设备/客户端都支持 IPv6;兼容性差
内网穿透服务(花生壳等) 零配置即用 免费版限速限流,付费昂贵,无法使用标准端口
自建 VPS + frp/nps 控制权高,自定义强 成本高;需维护 VPS;需备案
Cloudflare Tunnel(Zero Trust) 无公网、免费、安全、支持广泛协议 需绑定域名;高峰期存在轻微抖动

为什么选择 Cloudflare Zero Trust?

Cloudflare Tunnel(由 cloudflared 实现)是一个基于 Cloudflare Zero Trust 架构的免费远程访问解决方案。它的优势包括:

  • 无需公网 IP,无需端口映射
  • 免费使用,个人用途带宽充足
  • 支持多平台:Windows、Linux、macOS、Docker、OpenWRT 等
  • 不依赖客户端支持(智能家电、NAS、盒子等都能直接接入)
  • 跨运营商,穿透电信/联通/移动限制
  • 支持 HTTP/HTTPS、TCP 协议(UDP 暂不支持)
  • Cloudflare 全球 CDN 加速保障可达性

实现步骤

一、准备条件

  1. 拥有一个域名,并将 DNS 托管至 Cloudflare。
  2. 在 Cloudflare 后台启用 Zero Trust 服务(选择免费计划即可,需绑定信用卡或 Paypal,费用为 $0)。

二、Cloudflare 后台创建 Tunnel 隧道

  1. 登录 Cloudflare 后台,进入 Zero Trust > Access > Tunnels
  2. 点击 Create a tunnel,输入任意名称(如 my-home)。
  3. 创建完成后会生成一串连接令牌(token),记录好后续使用。

三、在 OpenWRT 上安装 cloudflared

以 R2S 为例(ARM64 架构):

  1. 使用 SSH 登录 OpenWRT:
VERSION="2023.3.1"
curl -LO https://github.com/cloudflare/cloudflared/releases/download/${VERSION}/cloudflared-linux-arm64
chmod +x cloudflared-linux-arm64
mv cloudflared-linux-arm64 /usr/bin/cloudflared

说明: 若使用 X86 等其它架构,请更改下载链接中的架构部分。例如:cloudflared-linux-amd64


四、创建启动脚本

touch /etc/init.d/cloudflared
chmod +x /etc/init.d/cloudflared

然后编辑启动脚本:

nano /etc/init.d/cloudflared

粘贴以下内容(将 your_token 替换为之前获取的令牌):

#!/bin/sh /etc/rc.common
USE_PROCD=1
START=95
STOP=01
cfd_token="your_token"

boot() {
  ubus -t 30 wait_for network.interface network.loopback 2>/dev/null
  rc_procd start_service
}

start_service() {
  procd_open_instance
  procd_set_param command /usr/bin/cloudflared --no-autoupdate tunnel run --token ${cfd_token}
  procd_set_param stdout 1
  procd_set_param stderr 1
  procd_set_param respawn 3600 5 5
  procd_close_instance
}

stop_service() {
  pidof cloudflared && kill -SIGINT $(pidof cloudflared)
}

保存后退出(Ctrl+O 》 回车 》 Ctrl+X)。


五、添加开机启动并运行

/etc/init.d/cloudflared enable
/etc/init.d/cloudflared start

六、Cloudflare 后台配置访问规则

  1. 回到 Access > Tunnels 页面,查看刚才创建的 Tunnel 状态为 HEALTHY 即表示已成功运行。
  2. 点击右侧菜单中的 Configure,进入后选择 Public Hostname > Add a public hostname
  3. 配置如下:
    • Subdomain:如 nasmyrouter
    • Domain:选择你托管在 CF 的域名
    • Type:根据设备类型选择,如:
      • HTTP:http://192.168.1.1(OpenWRT 管理页面)
      • HTTPS:https://192.168.1.5:5000(NAS 管理页面)
      • TCP:192.168.1.10:5900(如 VNC 桌面)
    • Path:通常留空,若 Web 服务路径复杂(如宝塔),可手动填写路径段

总结

通过将 cloudflared 安装在 OpenWRT 路由器上,我们成功实现了 24 小时运行的 Zero Trust 隧道服务,无需公网 IP、无需 VPS、无需额外开销,即可远程安全访问家庭局域网中的任意设备。

尽管高峰期访问稳定性略逊一筹,且暂不支持 UDP 协议,但对于绝大多数日常场景来说,Cloudflare Tunnel 已是性价比极高的远程访问解决方案。


如果你有兴趣了解 Cloudflare IP 优选、UDP中转的替代方案等内容,可以点赞或留言,后续我将继续更新相关进阶教程!


是否需要我再帮你整理为 Markdown 格式或用于微信公众号发布的排版?

© 版权声明

相关文章