宿舍断电不断网:我试了3种方案,最后这种最稳

晚上十一点,随着宿舍走廊里传来“啪”的一声闷响,我们整栋楼准时陷入了黑暗。室友骂骂咧咧地从床上爬下来找充电宝,另一个室友对着刚打到一半的游戏屏幕长叹一声。而我,盯着自己那台瞬间黑屏的树莓派,听着旁边小型千兆交换机停止运转时渐渐消失的电流声,心里同样堵得慌。
我的数字世界,每天晚上11点准时死亡。
事情的起因是这样的。作为一个重度折腾党,我在宿舍床头搭起了一套微型数据中心:一台树莓派 4B 跑着 Home Assistant 智能家居中枢和 qBittorrent 下载机,连着一个小交换机做内网透传。这套系统白天跑得风生水起,空调定时开关,电影下完就推送到我的云端影音库。
但我忘了最致命的一环:我们学校晚上 11 点准时断电,但不断网。
网口的 PoE 供电是独立的弱电系统,只要交了网费,晚上依然有网。可我的树莓派没电了啊!断电的瞬间,树莓派直接断电关机,Home Assistant 离线,宿舍的智能灯泡变成了智障灯泡;下载了一半的 PT 种子直接中断,面临被封号的危险;更惨的是,SD 卡因为频繁的异常断电,文件系统损坏,我已经重刷了三次系统。
为了对抗这该死的“11点魔咒”,实现真正的“断电不断网,7×24小时在线”,我走上了折腾 UPS 的不归路。试错了三种方案后,我才彻底搞明白:在宿舍这种苛刻的环境下,想要稳定,光靠粗暴的供电是没用的,必须从硬件到软件打出一套组合拳。

今天,我就把这三种方案的踩坑细节完整拆解给你。如果你也是宿舍党,想要一个永生的内网小服务器,这篇能帮你省掉至少三个星期的瞎折腾时间。

方案一:大功率充电宝 + USB 诱骗线(翻车指数:⭐⭐⭐⭐)

这是我最开始想到的“最简单、最便宜”的方案。
思路极其直白:买一个容量大、支持多口输出的充电宝,然后买一根所谓的“USB 诱骗线”,把 USB 接口转成 Type-C 或者 DC 圆口,直接插给树莓派和交换机供电。理论上,20000mAh 的充电宝怎么也能撑过一晚上吧?
我兴冲冲地买了一个 20000mAh、标称 65W 输出的充电宝,插上树莓派,满心欢喜地觉得问题解决了。结果第一天晚上就狠狠扇了我的脸。
翻车点一:续航极其拉胯
理论上 20000mAh 的能量约是 74Wh。但我忽略了一个致命问题:充电宝的标称容量是 3.7V 电芯的容量,而输出是 5V,这中间存在一个升压转换损耗(通常在 80% 左右)。实际可用能量只有 60Wh 左右。
而我的树莓派 4B 挂载了一个外接移动硬盘做下载盘,满载下载时功耗在 8W 左右;再加上那个小巧但贪电的千兆交换机(约 5W)。总功耗 13W。60Wh / 13W = 4.6 小时。
也就是说,晚上 11 点断电,凌晨 3 点半左右,充电宝就会彻底耗尽。距离早上 6 点来电,还有两个半小时的空窗期。一旦空窗,树莓派照样硬关机。
翻车点二:薛定谔的切换电压
这是最让我崩溃的一点。充电宝根本不是 UPS(不间断电源)!它的设计初衷是给手机充电,而不是做备用电源。
当市电断开时,充电宝的供电逻辑是:检测到放电端没有主动请求(因为市电切断了),进入休眠;或者电压瞬间发生抖动。这个抖动的时间虽然只有几十毫秒,但对于树莓派这种没有大电容保护的 ARM 板子来说,足以导致系统重启,甚至直接破坏 ext4 文件系统。
我无数次在半夜醒来,发现树莓派上的红灯疯狂闪烁,系统已经卡死在 Boot 阶段,得拔卡插到电脑上用 fsck 命令修复半天。

主观吐槽:这个方案根本不叫 UPS,只能叫“延时断电”。它不仅不能保证无缝切换,还因为电压抖动对设备造成了更深层次的伤害。如果你真的想让树莓派活下去,千万别用普通充电宝硬怼,这是在侮辱电子工程的常识。

方案二:废旧笔记本做软路由与下载机(翻车指数:⭐⭐⭐)

被充电宝折磨疯后,我决定换个思路。既然充电宝不行,我床底下不是躺着一台吃灰的旧 ThinkPad T440p 吗?笔记本自带电池,而且电池的供电逻辑天生就是“有市电用市电,没市电瞬间切电池”,这不就是完美的 UPS 吗?
我翻出笔记本,拆掉屏幕(省电),拆掉键盘,只留一个主板。给它刷了 Debian 系统,装上 Docker,把树莓派上的 qBittorrent、Aria2 和 Home Assistant 全部迁移了过来。拔掉屏幕后,功耗大概在 10W 左右,那块 50Wh 的二手原装电池,理论上能撑 5 个小时,勉强能熬到天亮。
刚弄好的前两天,我简直觉得自己是个天才。晚上断电,笔记本无缝切换到电池,下载机继续满速运行,爽得不行。但第三天,这套方案的致命缺陷暴露无遗。
致命缺陷一:发热与噪音的折磨
笔记本的散热设计是针对日常办公的,而我让它 5 个小时满载下载。CPU 温度直奔 85 度,风扇狂转。那个高转速的小风扇在安静的深夜,声音简直像直升机起飞。室友在半夜两点敲了敲床板:“你那破电脑再响,我明天就给你扔出去。”
为了降温,我把笔记本主板抽出来,架在两个矿泉水瓶盖上,旁边放了个小台扇吹。温度降下来了,但耗电量直线飙升,5 个小时的续航直接缩水到 3 个小时,依然熬不到天亮。
致命缺陷二:校园网的流氓认证
笔记本做软路由,我把它接上了校园网口,然后让其他设备连笔记本的 Wi-Fi。但我低估了校园网的流氓程度。我们学校的校园网是锐捷认证,且绑定了 MAC 地址。
断电虽然不断网,但学校的接入交换机似乎会在半夜定期重置端口。笔记本的网卡一旦因为重置而掉线,就需要重新跑认证脚本。而笔记本的网关掉线,意味着我挂在甲骨文云上的 FRP 内网穿透节点也全断了。我在外面上自习时,死活连不上宿舍的设备,这套方案成了个信息孤岛。

主观吐槽:用 X86 笔记本做 7×24 小时服务器,在宿舍就是大逆不道。发热大、续航短、噪音吵。而且笔记本电池长期保持 100% 满电状态(因为插着电),半年后电池直接鼓包,不仅不安全,等哪天我真想把它当备用机用时,电池已经废了。这是典型的“为了解决一个小问题,制造了三个大问题”。

方案三(终极方案):DC 微型 UPS + 云端保活脚本(稳定指数:⭐⭐⭐⭐⭐)

前两次的失败让我彻底清醒:想在宿舍搞 7×24 小时运行,必须回归极客思维,放弃妥协的方案。
我的终极思路确立了:硬件上,回归低功耗的树莓派,但给它配上真正具有 UPS 功能的专用供电板;软件上,写一套看门狗脚本,主动对抗校园网的网络波动。
这套方案我至今用了大半年,经历了无数次断电断网, uptime 依然高达 99.9%,堪称宿舍服务器的究极形态。

硬件改造:用 DC 微型 UPS 武装树莓派

我放弃了充电宝和笔记本,在淘宝上搜到了一个为工控机和树莓派设计的“微型 UPS 模块”。这东西的原理不复杂,但在细节上极其讲究。
我买的是一款支持 Type-C 输入、DC 5.5mm 输出的 UPS 扩展板,并配备了 4 节 32700 规格的磷酸铁锂电芯。
为什么选这个配置?这里面的门道极深:

  1. 毫秒级无缝切换:UPS 板子上有一颗大容量的钽电容和专门的电源路径管理芯片。当市电切断时,它能在 0.01 秒内将电源输入从外部 DC 切换到电池放电,树莓派完全感知不到断电,系统绝不会重启,SD 卡也不会损坏。
  2. 恐怖的电量储备:4 节 32700 电芯,单节容量 6000mAh。磷酸铁锂的标称电压是 3.2V,4 节串联就是 12.8V。总能量约 307Wh。但我买的是直接输出 5V 的降压板,考虑 85% 的转换效率,也有 260Wh 的实际可用电量。树莓派加交换机算它 5W 功耗,260Wh / 5W = 52 小时! 撑过 11 点到 6 点的 7 小时,简直是杀鸡用牛刀,哪怕停电一整天它都能活。
  3. 极致的静音与安全:磷酸铁锂天生不怕过充,我不用像笔记本那样担心电池鼓包。没有风扇,完全被动散热。放在床头,寂静无声。
    这套硬件配置直接把宿舍的断电问题在物理层面彻底抹杀了。只要不是整栋楼连弱电间的网线交换机一起断,我的树莓派就是永生的。

软件对抗:解决校园网认证与 IP 漂移

硬件不死只是第一步,软件不活依然白搭。因为断电虽然不断网,但校园网环境的网络极其不稳定。
我们学校的网关设备,在半夜空闲时偶尔会重置端口,导致我的树莓派掉线。更坑的是,掉线重连后,树莓派可能拿到一个不同的 IP 地址,这会导致我跑在甲骨文云上的 FRP 反向代理直接失效。我在外面用手机想连进寝室的树莓派,连不上,等于白搭。
为了解决这套网络链路的软肋,我写了下面这套“看门狗”保活体系,这也是我这套系统里最得意的部分。
第一招:网络探活与自动重连校园网
我在树莓派上写了一个 Shell 脚本,通过 crontab 定时任务每 2 分钟执行一次。逻辑极其简单粗暴但有效:

#!/bin/bash
# 检测网关是否能 ping 通
ping -c 2 192.168.1.1 > /dev/null 2>&1
if [ $? -ne 0 ]; then
    # 如果连网关都不通,说明网卡挂了,重启网卡
    sudo ifdown eth0 && sudo ifup eth0
    sleep 10
fi
# 检测外网是否通
ping -c 2 114.114.114.114 > /dev/null 2>&1
if [ $? -ne 0 ]; then
    # 外网不通,说明校园网掉线了,调用认证脚本重登
    # 我们学校用的是 Dr.COM,我抓包写了模拟登录的 Python 脚本
    python3 /home/pi/auto_login.py
    sleep 5
fi

这个脚本一挂上,基本上彻底告别了半夜断网的焦虑。只要物理网口有信号,两分钟内树莓派必定自己爬起来敲门。
第二招:FRP 心跳保活与 IP 漂移对抗
我在甲骨文那台云服务器上部署了 FRP 的 Server 端,树莓派上跑 Client 端。但为了应对 IP 漂移,我在 frpc.ini 里做了深度调教:

[common]
server_addr = my_oracle_cloud.com
server_port = 7000
# 心跳配置,这是应对僵尸连接的核心
heartbeat_timeout = 10
heartbeat_interval = 5

[ssh]

type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 use_encryption = true use_compression = true

加上 heartbeat 配置后,FRP 客户端每 5 秒向云端发一个心跳包。如果因为校园网断线导致连接异常,10 秒内 FRP Server 就会判定客户端掉线,释放端口。等树莓派的网络一恢复,立刻重新握手建立隧道。这种快速心跳机制,让 IP 漂移的影响降到了最低。
第三招:系统级看门狗
最后一道保险,是开启树莓派硬件自带的 Watchdog。在 /boot/config.txt 里加入:

dtparam=watchdog=on

然后安装 watchdog 守护进程,配置每 10 秒喂一次狗。如果系统因为某些莫名其妙的原因死机(比如内核 panic),10 秒后硬件看门狗会强制拉低复位引脚,让树莓派硬重启。只要电没断,它就会像打不死的小强一样自己活过来。

写在最后:折腾的意义

现在,宿舍只要一到晚上 11 点准时断电,室友们的世界就陷入了黑暗,只能无奈地放下手机等待天亮。而我的床头,那个安静的小黑盒依然亮着一盏绿灯。
在这片黑暗中,我的树莓派还在默默做种,我的 Home Assistant 依然记录着温湿度数据。我在外面用流量打开手机,通过云端 FRP 隧道,一秒钟直连到宿舍的 Jellyfin,点开一部 4K 电影,没有任何卡顿。那种在受限的物理空间里,硬生生凿出一个属于自己的、永不断线的数字避难所的感觉,太迷人了。
有人问我,花几百块买个带电池的成品 NAS 不香吗?为什么要在宿舍搞这些零碎拼凑的破烂?
我的答案是:成品 NAS 只是一个工具,而这套系统,是一个我完全理解其运行逻辑、每一行代码都由我掌控的赛博器官。断电不断网,断的只是市电,但断不掉我这套逻辑闭环。
在宿舍这种资源极度匮乏、规则又极其苛刻的环境下,用极客的手段去突破限制、重塑秩序,这才是折腾的终极浪漫。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容