在路由器上安装并运行 Cloudflared (ARMv7)

一、设备环境说明

在开始之前,先说明一下我的设备环境,方便大家对照自己的情况:

  • 设备:小米路由器 R3D (MiWiFi-R3D)
  • 系统:嵌入式 Linux
  • 内核版本:Linux 3.4.103
  • 架构:armv7l (32 位 ARMv7)
    👉 提示:不同设备环境可能不一样,所以你需要先确认自己的系统架构。方法如下:
    1
    uname -a
    输出类似:
    1
    Linux XiaoQiang 3.4.103 #1 MiWiFi-R3D-2.29.5 SMP PREEMPT Thu May 30 08:23:40 UTC 2019 armv7l GNU/Linux
    这里的 armv7l 就是系统架构。根据这个信息去选择对应的 Cloudflared 安装包。

二、下载 Cloudflared

Cloudflared 官方提供了很多不同平台的版本,比如 Linux x86_64、arm64、armhf 等。我们需要根据自己的架构来选择。
我的设备是 armv7l,所以选择的是 cloudflared-linux-arm 这个版本。
下载并放到指定目录:

1
2
3
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm
chmod +x cloudflared-linux-arm
mv cloudflared-linux-arm /userdisk/data/software/rootbin/cloudflared


三、验证安装

运行以下命令查看版本:

1
cloudflared --version

遇到的问题

  • 问题 1:命令找不到
    报错:-ash: cloudflared: not found
    原因:下载的文件名是 cloudflared-linux-arm,而不是 cloudflared
    解决:改名为 cloudflared 并加执行权限。
    • 问题 2:命令拼写错误
      有时候容易写成 cloudflare --version,这是错误的。
      👉 注意:命令是 cloudflared,不要漏掉最后的 d

四、启动 Cloudflared

官方文档里推荐用:

1
cloudflared service install <TOKEN>

但是在路由器上运行会报错:
1
error starting service: exec: "service": executable file not found in $PATH

遇到的问题

  • 原因:路由器固件没有完整的 service 命令,也没有 systemd。
  • 解决:需要自己写启动脚本来管理 Cloudflared。

五、编写启动脚本

/etc/init.d/ 下创建一个脚本,使用 token 来启动 Cloudflared。这里用一键命令生成:注意替换你的token。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
cat > /etc/init.d/cloudflared << "EOF"
#!/bin/sh /etc/rc.common
# Cloudflared 启动脚本,适用于嵌入式 Linux (SysV init 风格)
# 使用 token (令牌) 来启动 Cloudflare Tunnel

START=95 # 启动优先级 (priority),数字越大越晚启动
STOP=15 # 停止优先级 (priority),数字越小越早停止

# 设置 cloudflared 可执行文件路径 (binary path)
CLOUDFLARED_BIN="/userdisk/data/software/rootbin/cloudflared"

# 设置启动参数,这里使用 token (令牌)
# 注意:替换 <YOUR-TOKEN> 为你自己的 token
CLOUDFLARED_ARGS="tunnel run --token <YOUR-TOKEN>"

start() {
echo "启动 cloudflared 服务 (service)..."
# 后台运行 (background),避免阻塞系统启动
$CLOUDFLARED_BIN $CLOUDFLARED_ARGS &
}

stop() {
echo "停止 cloudflared 服务 (service)..."
# killall 用于结束进程 (process)
killall cloudflared
}
EOF

添加执行权限:

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

六、使用方法

  • 启动服务:
    1
    /etc/init.d/cloudflared start
  • 停止服务:
    1
    /etc/init.d/cloudflared stop
  • 查看状态:
    1
    ps -ef | grep cloudflared

七、开机自启配置

在嵌入式 Linux(如路由器固件)中,/etc/init.d/ 下的脚本本身就是系统的服务管理机制。只要脚本符合 rc.common 的格式,并且设置了 STARTSTOP 优先级,就可以通过命令来启用或禁用开机自启。

启用开机自启

执行以下命令:

1
/etc/init.d/cloudflared enable

这会在 /etc/rc.d/ 目录下创建一个软链接,指向你的脚本。系统启动时会根据 START 值自动运行 cloudflared。

取消开机自启

如果不想让它开机启动,可以执行:

1
/etc/init.d/cloudflared disable

手动管理服务

  • 启动服务:
    1
    /etc/init.d/cloudflared start
  • 停止服务:
    1
    /etc/init.d/cloudflared stop
  • 查看状态:
    1
    ps -ef | grep cloudflared

八、总结

在嵌入式路由器上安装 Cloudflared 的流程大致如下:

  1. 确认设备环境:用 uname -a 获取架构信息。
  2. 下载对应版本:根据架构选择合适的 Cloudflared 二进制文件。
  3. 改名并加权限:确保文件名是 cloudflared,并且有执行权限。
  4. 验证版本:运行 cloudflared --version
    👉 注意不要写成 cloudflare
  5. 启动服务:不能用官方的 service install,需要自己写 /etc/init.d/ 脚本。
  6. 运行方式:用 token 启动隧道,脚本支持 start|stop 管理。
  7. 开机自启:/etc/init.d/cloudflared disable