树莓派内网穿透
树莓派放在家里当服务器,树莓最烦的派内就是外网访问不了。路由器没有公网IP,网穿运营商给的树莓内网地址像一堵墙,把SSH、派内Web服务、网穿甚至一个简单的树莓Minecraft服务器全锁死在局域网里。我试过改端口映射,派内折腾过DDNS,网穿最后发现最省心的树莓办法就是内网穿透——用一台有公网IP的服务器做跳板,把树莓派上的派内服务“顶”出去。
我用的网穿是frp,一个开源工具。树莓树莓派上跑frpc客户端,派内云服务器上跑frps服务端,网穿两边配置文件一写,隧道就通了。具体点说,我在云服务器上监听7000端口,树莓派主动连上去,然后我让云服务器的8080端口转发到树莓派的22端口——这样我人在外面,用`ssh -p 8080 pi@云服务器IP`就能直接摸到家里的树莓派。第一次跑通的时候,我蹲在咖啡厅里敲下那条命令,看到终端跳出树莓派的登录提示,感觉像凿穿了水泥墙。
配置过程不算复杂,但有几个坑得提一下。frps的`bindPort`和frpc的`serverPort`必须一致,这个好理解。真正坑人的是防火墙——云服务商的安全组规则默认只放行几个常用端口,你得手动把7000和8080加进去。我第一次没开安全组,frpc日志显示连接成功,但外网就是访问不了,排查了半小时才发现是阿里云控制台里那个不起眼的按钮。树莓派这边反而简单,因为它是主动外连,不需要在路由器上做任何端口映射。
穿透不只是给SSH用的。我在树莓派上挂了个Home Assistant,用来控制客厅的智能灯。之前人在外面想关灯,只能打开VPN,慢得要命。现在直接把Home Assistant的8123端口穿透出去,手机浏览器输个网址就能操作。有一次出差回来,发现灯亮着,我掏出手机在高铁上就把它关了——这种掌控感,比什么智能家居宣传片都实在。
免费方案也有,比如ngrok,但免费版域名随机变,每次重启都要重新记地址,烦。frp自己搭,一次性投入几十块钱买个最便宜的云服务器,一年下来也就一顿火锅钱。而且数据走自己的服务器,比第三方中转放心些。唯一要注意的是,别把端口裸奔到公网——我在frpc配置里加了`stcp`加密,还配了token认证,毕竟树莓派上跑着家里的设备数据,被陌生人扫到端口总归不舒服。
树莓派这东西,性能不强,但胜在功耗低、能常开。配好内网穿透后,它才真正像个“服务器”了。我现在出门不用带U盘,文件扔树莓派上的Nextcloud,穿透后随处可下。有时候半夜写代码,直接SSH连回去改配置,感觉那台小绿板子就像我的远程触手。要是哪天运营商真普及了IPv6,这套东西可能就过时了——但至少现在,它是把树莓派从局域网玩具变成真工具的最快路径。