当前位置: 首页 > news >正文

树莓派没有公网 IP,用 webrpc 做 24 小时在线节点

独立开发者笔记,非官方教程。SDK 与套餐以 https://www.webrpc.cn/ 为准。

很多人买树莓派,不是为了再养一台云主机,而是想在家里留一个常亮的小节点:挂硬盘、跑备份、偶尔让手机问一句「还活着吗」。卡点几乎总是同一句——

家里没有公网 IP,也不想把路由器端口映射当成日常运维。

frp 能透,但你得一直养一台 VPS;自己打洞,树莓派那点精力很快就被网络细节吃掉。后来我把它定位成 webrpc 的「家庭常驻端」:派上 24 小时登录,手机或笔记本当访客端,用会话收发,而不是先给这台小机器找一个公网入口。

webrpc是面向无公网 IP 的跨平台 P2P 通信 SDK:Token 标识设备,登录后建立尽量直连的加密会话,再用SendData/SendFile收发。官网:https://www.webrpc.cn/

为什么是树莓派,而不是再买一台云

家庭节点有几个很土、但很真实的约束:

  • 要常开,功耗得低
  • 数据最好留在自己的盘上
  • 人在外面用手机或笔记本访问
  • 宽带多半是大内网,没有稳定公网地址

树莓派(以及同类 ARM 小主机)刚好卡在这个位置。它弱项不是 CPU,而是可达性:你不能像对待公网 VPS 那样,假设永远有一个固定 IP 和端口。

webrpc 在这里做的不是「再给派做一个网盘产品」,而是给它一个常驻身份:一个 Token、一个长期进程、一套回调收包。业务仍然是你的——状态查询、拉日志、传一张图、列某个白名单目录——都可以往后加。

这台派在链路里扮演什么角色

最小拓扑只有两端:

树莓派(家宽 NAT 后,24h) 手机 / 笔记本(公司网或 4G) Token = PI Token = PHONE 登录 + 回调读循环常驻 需要时登录,OpenSession(PI) 守着本地文件或传感器 SendData / 等回包 / SendFile

派是被找到的那一端,不要让它去主动拨号找你的手机——手机 IP 变得太勤。让访客端OpenSession到派的 Token,心智更稳。

个人套餐常见是两个 Token、约每年 5 美元(以官网为准),刚好够「派 + 手机」或「派 + 电脑」做最小验证。家里以后加 NAS、加第二台派,再按「一台设备一个 Token」扩。

硬件和系统:先别上复杂

够用的起点:

  • Raspberry Pi 4 / 5,或任意能跑 64 位 Linux 的 ARM 板
  • 系统用 64 位 Raspberry Pi OS / Debian,少踩 32 位库
  • 有线网口优先于 Wi‑Fi;常驻节点对抖动更敏感
  • 系统盘尽量用靠谱的卡或直接 SSD,避免 SD 卡被日志写坏

SDK 不要拿桌面 x86 的.so硬塞。官方面向 Linux ARM 的包名是libwebrpc-Linux-arm64这一路(以你下载到的文件名为准)。架构错了,表现常常是加载失败或登录永远停在 0,看起来像「webrpc 在树莓派上不能用」。

语言我更建议派上用Go 或 C:CGO/动态库、systemd 常驻都顺。Python 能跑,但 ctypes 声明和路径更容易在 ARM 上踩坑;那是另一篇文章的事。

接入时只验证「常驻」,不要一上来堆网盘

树莓派上第一周只做三件事就够:

  1. 进程能登录成功,崩溃后能被拉起来
  2. 回调端口稳定连上127.0.0.1
  3. 外面用第二个 TokenOpenSession成功,来回一条小消息

例如访客端发PING,派回PONG|<uptime>。磁盘、目录、传图都是后话。常驻没稳住就上业务,最后你会在「备份协议」里排查「其实服务没在跑」。

Go 侧登录循环、读帧、异步回包,和官网示例同一套。ARM 上唯一要额外盯的是链接库:

#cgo linux,arm64 LDFLAGS: -L. -lwebrpc-Linux-arm64

以及运行时的LD_LIBRARY_PATH,指向.so所在目录。

用 systemd 把它变成「插电就在」

树莓派当节点,成败不在 Demo 能跑,而在重启、掉电、偶发崩溃之后还在

一个够用的 unit 示意:

# /etc/systemd/system/webrpc-pi.service [Unit] Description=webrpc home node After=network-online.target Wants=network-online.target [Service] Type=simple User=pi WorkingDirectory=/home/pi/webrpc-node Environment=LD_LIBRARY_PATH=/home/pi/webrpc-node ExecStart=/home/pi/webrpc-node/pi-agent Restart=always RestartSec=5 [Install] WantedBy=multi-user.target

注意几点:

  • network-online之后再起,避免开机瞬间登录必失败
  • Restart=always,但登录逻辑自己要有超时,不要空转打满 CPU
  • Token 放文件权限收紧,不要世界可读,更不要提交到公开 git
  • 日志用 journald 即可,别把完整 Token 打进日志

systemctl enable --now webrpc-pi之后,拔电再插,你期望的是:过一两分钟,外面仍能OpenSession到这台派。

电、热和磁盘:常驻设备的脏细节

这些不像 API,但会决定你能不能真的 24 小时:

  • 电源:廉价充电头在负载和高网卡活动时会欠压,进程表现成随机挂;用官方或够流的供电
  • 散热:Pi 4/5 在夏天小盒子里会降频,看起来像「P2P 变慢」
  • 磁盘:外接硬盘要给足电流,挂载写进fstab或 systemd mount,避免 Agent 起来时盘还没挂上
  • 时间:没 RTC 的板子刚开机时间不对,可能影响证书/登录观感,开 NTP

webrpc 解决的是 NAT 后怎么被找到;电源和挂盘,它帮不了你。

外面怎么连:4G 可以,但先同网

联调顺序建议:

  1. 笔记本和派在同一局域网,先通 PING
  2. 笔记本切到手机热点,再通一次
  3. 最后才把访客端放到公司网或真 4G

跨网失败时,先看派是否仍登录(journalctl -u webrpc-pi)、Token 有没有填反、动态库是不是 arm64。握手不能保证 100%,弱网下要给SendData设超时,失败就重新OpenSession——这些是应用层的事,和「树莓派」本身无关,但常驻节点上更容易被忘掉。

业务上给派做只读白名单:允许PING、允许某个目录的列表或拉取,默认不要在派上执行任意命令。常开设备,权限开错一次,比桌面 Demo 危险得多。

适合挂在派上的,和不适合的

比较适合:

  • 家庭状态节点:在线、温度、磁盘剩余
  • 小文件与日志回传
  • 作为后续 NAS/相册/备份的「门口」:先通会话,再扩业务

不太适合:

  • 把派当 4K 实时监控服务器硬扛(散热、上行、编码都不在 webrpc 职责里)
  • 只想 SSH 进去改两行配置(开一下 frp 或 Tailscale 往往更快)
  • 没做白名单就把整个根目录暴露给手机

树莓派 + webrpc 的产品故事是:低功耗常亮 + 无公网可达。别把它写成万能云。

一份落地清单

  1. 64 位系统 +Linux arm64SDK,文件和头放在程序同目录
  2. 控制台申请独立 Token,只给这一台派
  3. 进程:登录 →GetReceivePort→ 后台读回调 → 等会话
  4. systemd 常驻、开机自启、日志里不打 Token
  5. 访客端第二个 Token,先同网再 4G
  6. 业务从PING开始,路径和方法白名单再加

下载 SDK、看 arm64 库名和各语言示例,都在官网:https://www.webrpc.cn/

最后

树莓派最贵的不是板子,而是你愿意让它在柜子里亮着。
没有公网 IP 时,缺的不是又一个 Linux 服务,而是一个能被外面找到、又不必把家门端口打开的身份

webrpc 给的就是这层身份和会话。派负责 24 小时在线,手机负责需要时拨进来。通了之后,备份、相册、传感器都只是回调里多几种字节。先让这台小机器「插电就在」,再谈它能替你看家到什么程度。

http://www.cnnetsun.cn/news/4143187.html

相关文章:

  • Yi.Abp.Admin 完整指南:.NET 8 + ABP 框架管理后台快速上手
  • NVIDIA显卡驱动安全回退指南:彻底卸载与纯净安装
  • 049、表维护生成器
  • 048、锁对象与锁机制
  • Windows系统文件umpoext.dll丢失找不到问题解决
  • Python如何实现蚁群算法
  • nginx-rtmp-module:从编译到推流成功,一篇就够
  • 基于RFC协议与Qt框架的跨平台C++客户端开发实践
  • ComfyUI高级工作流构建:从LoRA集成到ControlNet与双采样放大实战
  • 基于SpringBoot的校园志愿者活动管理系统设计与实现(源码+lw+部署文档+讲解等)
  • VRCT 完全上手指南:三步搞定 VRChat 实时翻译与语音转录
  • iOS26 完整体验:液态玻璃背后,iOS26系统得与失
  • C++可变参数模板原理与工程实践
  • 5分钟跑通Wecom酱消息推送:免服务器推送到微信
  • AI Agent开发实战:从零构建智能体,掌握LLM、工具调用与任务规划
  • 不开游戏改《无主之地3》存档|BL3SaveEditor 游戏存档编辑器上手指南
  • 服务器运维实战:排查未知目录与进程,揭秘系统异常根源
  • 5分钟跑通B站CC字幕下载:一条命令把字幕存进本地并转成SRT
  • OSR6渔轮精密组装全解析:从零件到性能的硬核手工之旅
  • 10分钟搞定GIMP批量处理:BIMP插件零基础完整指南
  • 智能文档处理(IDP)进阶:基于智能体架构实现从信息提取到合规验证
  • Java面试新趋势:AI编码工具应用与优化策略
  • Cellpose-SAM 细胞分割实战指南:从单张图到批量处理与自训模型
  • 构建弹性AI算力平台:混合云架构与成本优化实践
  • 一台电脑+DCSD电缆读写iPhone系统配置:MagicCFG Reloaded免费完整指南
  • Audacity 免费音频编辑:录音、降噪、混音到导出,5 分钟上手
  • Quil:通过SSH在远程服务器驱动AI编程的轻量级解决方案
  • uni-app X与uni-app究竟有什么不同?
  • 043、表类型与表定义
  • 终端完全指南:从核心概念到高效实践,解决常见问题