在 Android 设备上运行 Cloudflare Tunnel
Cloudflare Tunnel(早期叫 Argo Tunnel)通过反向连接到 Cloudflare 边缘网络,把本地服务暴露到公网,全程不需要公网 IP,也不需要在路由器上做端口映射。把这一套搬到 Android 设备上,旧手机就能立刻变成自带 HTTPS 与 Zero Trust 访问控制的轻量级内网入口。
本文给出两种在 Android 上跑 cloudflared 的方案,并补上后台保活与排错要点。
两种方案怎么选
| 方案 | 适用场景 | 复杂度 | 资源占用 |
|---|---|---|---|
| Termux + Token(推荐) | 单纯把本地端口透出去 | 低 | 低 |
| proot Debian + cert 登录 | 同时需要在 Debian 里跑其他服务 | 中 | 中 |
如果只是想暴露 Termux 里某个端口(如 SSH、Web 服务),直接用 Token 方案;如果机器上已经跑了 proot Debian 做开发环境,第二种方案能让 cloudflared 与其他工具共用同一套 rootfs。
准备工作
一个已托管在 Cloudflare 的域名(DNS 服务器要切到 Cloudflare)
从 GitHub Releases 安装 Termux(不要装 Google Play 版,已停更)
首次启动后更新软件源:
1
pkg update && pkg upgrade
方案 A:Termux + Token(推荐)
1. 安装 cloudflared
Termux 官方源已经收录了 cloudflared:
1 | |
2. 在 Cloudflare 控制台创建隧道
- Networks → Tunnels → Create a tunnel,选
Cloudflared连接器 - 给隧道起个名字,下一步会显示安装命令,整段命令末尾的 token 字符串复制下来
- Public Hostname 选项卡里把要暴露的子域名指向
http://localhost:<本地端口>,例如把home.example.com指向http://localhost:8080 - 保存后回到 Termux
3. 启动隧道
1 | |
几秒后会看到 Registered tunnel connection 之类日志,控制台里隧道状态变绿色 HEALTHY,浏览器访问对应子域名即可。
--protocol http2是给 QUIC 在国内网络下不稳定时的备选;网络条件好的可去掉走默认 QUIC。
方案 B:proot Debian + cert 登录
1. 安装 proot Debian
1 | |
进入容器后再装基础工具:
1 | |
2. 安装 cloudflared
Termux + proot 的设备多数是 ARM64:
1 | |
3. 登录并创建隧道
1 | |
4. 写隧道配置
在 ~/.cloudflared/config.yml 写入(注意目录是 .cloudflared,多一个 d):
1 | |
5. 绑定 DNS 并启动
1 | |
需要管理多条隧道时为每条隧道单独写一份 yaml,启动时用 --config /path/to/config.yml 指定。
让隧道在后台持续运行
Android 会激进回收后台进程,直接 & 放后台几分钟就会被杀。两步保命:
持有唤醒锁,阻止系统休眠 Termux:
1
termux-wake-lock关闭时执行
termux-wake-unlock。用 termux-services 托管 让进程崩溃后自动重启:
1
2
3
4
5
6
7
8
9
10
11
12
13pkg install termux-services
# 重启 Termux 加载 sv 环境
mkdir -p $PREFIX/var/service/cloudflared/log
cat > $PREFIX/var/service/cloudflared/run <<'EOF'
#!/data/data/com.termux/files/usr/bin/sh
exec cloudflared tunnel --protocol http2 run --token YOUR_TOKEN 2>&1
EOF
chmod +x $PREFIX/var/service/cloudflared/run
sv-enable cloudflared
sv up cloudflared
sv status cloudflared # 看到 run: cloudflared 即正常日志在
$PREFIX/var/service/cloudflared/log/main/current。
把 Termux 加入手机厂商的「电池白名单 / 自启动白名单 / 受保护应用」,配合上面两步,长时间稳定运行基本没问题。
常见问题
failed to dial to edge: x509: certificate signed by unknown authority
proot Debian 默认证书库不全,执行 apt install -y ca-certificates && update-ca-certificates。
隧道一直 DOWN,但 cloudflared 日志显示已连接
仪表板缓存延迟,等 30 秒;仍异常则检查 Public Hostname 中是否填了正确的 service URL,并确认本地端口确实在监听(ss -ltnp)。
手机熄屏几分钟后断流
没拿唤醒锁,或者厂商系统强杀。先确认 termux-wake-lock 生效(通知栏会有持续提示),再去系统设置里给 Termux 解除后台限制。
QUIC 协议无法建联
显式加 --protocol http2,部分国内 ISP 对 UDP/443 有干扰。

