对于物联网开发者来说,这简直是天然的微型服务器。
今天咱们不花一分钱买云服务器(或者只用极低成本),用这台吃灰的旧手机,搭配 Termux 和 FRP 内网穿透,搭建一个 24 小时在线的 MQTT 节点。
不管你在哪,只要有网,就能连上它。

为什么选旧手机?
别看不起旧手机,它可是自带了屏幕、键盘(虚拟)、电池(UPS)、Wi-Fi/4G 模块的完整计算机。
功耗极低:待机电量几乎可以忽略不计。
自带 UPS:家里有短暂停电,它靠电池还能撑几个小时,数据不会丢。
零成本:废物利用,极客精神拉满。
实战准备
硬件:一台旧安卓手机(建议 Android 7.0 以上,能连 Wi-Fi 即可)。
软件:
手机端:Termux(一个强大的 Android 终端模拟器)。
穿透工具:FRP(Fast Reverse Proxy)。
注意:FRP 服务端需要一台有公网 IP 的机器(可以是极便宜的轻量云服务器,或者公司/学校提供的服务器)。如果完全不想花钱,可以找找网上免费的 FRP 穿透服务,但稳定性不保证。
第一步:手机端安装 Termux 和 Mosquitto
别去应用商店下 Termux,版本太老。直接去 F-Droid 或者 GitHub 下载最新版 Termux APK 安装。
打开 Termux,先换源(国内必做,不然慢到怀疑人生):
termux-change-repo
选择清华源或阿里源。
然后安装 Mosquitto(MQTT broker):
pkg updatepkg install mosquitto

第二步:启动并配置 Mosquitto
安装好后,先别急着跑。默认配置是不允许匿名连接的,为了测试方便,我们先允许匿名(后面会讲安全)。
创建配置文件:
mkdir -p ~/.config/mosquittonano ~/.config/mosquitto/mosquitto.conf
listener 1883allow_anonymous true
保存退出。
启动 Mosquitto:
mosquitto -c ~/.config/mosquitto/mosquitto.conf -d
(注:-d 表示后台运行)
这时候,你在手机局域网内,用另一台电脑连这个手机的 IP(比如 192.168.1.100),应该就能连上 MQTT 了。 但问题来了:你在外面怎么连? 手机在路由器后面,没有公网 IP。
第三步:FRP 内网穿透(核心)
我们需要把手机内部的 1883 端口,映射到公网服务器的某个端口上。
1. 准备 FRP 服务端(frps)在你的公网服务器上,下载 FRP,配置 frps.ini:
[common]bind_port = 7000# 建议加个 token 防止别人白嫖你的服务器token = your_secret_token
linux_arm64 或 linux_arm 版本)。 配置 frpc.ini:[common]server_addr = 你的公网服务器IPserver_port = 7000token = your_secret_token[mqtt_tcp]type = tcplocal_ip = 127.0.0.1local_port = 1883remote_port = 18883 # 映射到公网服务器的18883端口
启动客户端:
./frpc -c frpc.ini
如果没报错,恭喜你,穿透成功了!
现在,你在任何地方,连接
你的公网服务器IP:18883,就等于连上了你家里旧手机上的 MQTT。
老手避坑指南(血泪经验,必看)
搞定了?别高兴太早。这套方案有几个致命坑,不解决你第二天起来发现服务全挂了。
坑 1:Termux 被系统杀后台(最致命)
安卓系统为了省电,会毫不留情地杀掉后台运行的 Termux。
解法:
1. 电池优化:去手机设置 -> 电池 -> 找到 Termux -> 设置为“不限制”或“允许后台高耗电”。
2. 获取 Wakelock:在 Termux 里运行 termux-wake-lock。这会让手机保持唤醒状态(屏幕可以关,但 CPU 不能睡)。
3. 开发者选项:有些手机需要在开发者选项里开启“不保留活动”的相反选项,或者锁定 Termux 在后台。
坑 2:IP 地址变了
家里的路由器重启,手机的局域网 IP 可能就变了,FRP 连不上本地 Mosquitto 了。
解法:
1. 在路由器里,把手机的 MAC 地址和局域网 IP绑定。
2. 或者写个简单的 Shell 脚本,检测 IP 变了就重启 frpc。
坑 3:裸奔的安全风险
你刚才开了 allow_anonymous true,这意味着全世界只要知道你服务器 IP 和端口,就能连上来发消息。
解法:
1. 改回 allow_anonymous false。
2. 用 mosquitto_passwd 工具生成密码文件。
3. 在 mosquitto.conf 里配置 password_file。
4. 客户端连接时必须带用户名密码。
评论