下面是根据你提供的内容,重新整理改写后的教程,保持了技术要点,但在表达方式、结构逻辑、内容顺序和语句风格上进行了约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 加速保障可达性
实现步骤
一、准备条件
- 拥有一个域名,并将 DNS 托管至 Cloudflare。
- 在 Cloudflare 后台启用 Zero Trust 服务(选择免费计划即可,需绑定信用卡或 Paypal,费用为 $0)。
二、Cloudflare 后台创建 Tunnel 隧道
- 登录 Cloudflare 后台,进入 Zero Trust > Access > Tunnels。
- 点击 Create a tunnel,输入任意名称(如
my-home
)。 - 创建完成后会生成一串连接令牌(token),记录好后续使用。
三、在 OpenWRT 上安装 cloudflared
以 R2S 为例(ARM64 架构):
- 使用 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 后台配置访问规则
- 回到 Access > Tunnels 页面,查看刚才创建的 Tunnel 状态为
HEALTHY
即表示已成功运行。 - 点击右侧菜单中的 Configure,进入后选择 Public Hostname > Add a public hostname。
- 配置如下:
- Subdomain:如
nas
、myrouter
等 - 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 桌面)
- HTTP:
- Path:通常留空,若 Web 服务路径复杂(如宝塔),可手动填写路径段
- Subdomain:如
总结
通过将 cloudflared 安装在 OpenWRT 路由器上,我们成功实现了 24 小时运行的 Zero Trust 隧道服务,无需公网 IP、无需 VPS、无需额外开销,即可远程安全访问家庭局域网中的任意设备。
尽管高峰期访问稳定性略逊一筹,且暂不支持 UDP 协议,但对于绝大多数日常场景来说,Cloudflare Tunnel 已是性价比极高的远程访问解决方案。
如果你有兴趣了解 Cloudflare IP 优选、UDP中转的替代方案等内容,可以点赞或留言,后续我将继续更新相关进阶教程!
是否需要我再帮你整理为 Markdown 格式或用于微信公众号发布的排版?