穿透局域网,用网页远程登录自己的树莓派

concefly 40cm2021-04-25829 次点击1 人收藏1 人感谢
## 太长不看版

IOT 设备处于远在千里之外的 **内网环境**,不想去现场调试,用自己设计的内网穿透系统在家躺平 **远程外网登录** 运维。

做出来的系统长这样:

- 基于网页的后台系统,可以看到在线设备列表:

![](https://tech.biko.pub/gw/assets/20210425220443.png)

- 选一个在线设备,连接终端进行操作:

![](https://tech.biko.pub/gw/assets/20210425220524.png)

**待我再完善下,可以将此系统开放出来给大家用。我后续也会分阶段给大家介绍这个内网穿透系统的实现原理。**

## 正文

在我之前一篇介绍“内网穿透”的文章里,介绍了不少可以实现外网登录内网环境树莓派的方案。

> @see [树莓派内网穿透方法大全](https://tech.biko.pub/post#/rpi-nat-traverse)

就自己个人来说,用 ngrok 比较多,但它的免费版只提供随机公网域名和一条在线通道。只要机器一重启,公网域名就换了,非常不方便。而需要重启树莓派的情况实在太常见不过了:拔插头、换卡、换系统、死机重来...

打钱给 ngrok 升级?最便宜也要一个月 5 刀,那当然更是不可能的。

![](https://tech.biko.pub/gw/assets/20210425203554.png)

---

说完个人情况,再来聊聊工作上的一些事。

我用了一些树莓派来做边缘计算基站。边缘计算嘛,当然要离用户越近越好,但这也意味着基站离我十万八千里。而且基站都处于局域网环境,只能在现场调试安装,外网环境是无法穿透到内网去远程管理基站的。

在没有完备的 IOT 设备接入管理平台之前,基站出了问题,就得肉身到现场调试。这是非常累人的。怎么办,设备接入管理平台也是个大课题,不是今天说要明天就有的。

**于是我萌生了一些想法,旨在减少肉身移动的次数,最好在家躺平就能解决十万八千里之外的基站的问题。**

---

回到内网穿透这个话题。如果有一种内网穿透方案,能安全地、稳定地、方便地管理自己名下的设备,即可部署在基站的内网环境,实现外网穿透管理。

于是我考察了一些比较常见的内网穿透方案:

- 路由器端口映射:安全性不足、无法保证公网 IP 稳定。**否决**。
- 花生壳:商业软件,批量部署钱包要完。**否决**。
- ssh 反向隧道:方案过于简陋,要达到较好的稳定性和可维护性还需要做太多工作。**否决**。
- ngrok:和花生壳一样的问题,批量部署钱包要完。**否决**。
- ngrok 开源版:太懒不想看代码,凭第六感认为不行。**否决**。
- frp:开源方案,功能和性能都很好,但设备接入鉴权粒度比较粗,不同用户名下的设备无法隔离。**待定**。

考察下来,只有 frp 稍微合适一点,但由于“设备接入鉴权粒度比较粗”的问题,距离我心目中理想的样子还差一点。要 fork 下来魔改么?有点懒,不想去研究 frp 源码。

那怎么办?**当然是自己设计一个内网穿透系统!**

![](https://tech.biko.pub/gw/assets/20210425215216.png)

这是一个反向代理模式的内网穿透系统。内网设备主动连接通道服务器,并保持连接。外网客户端登录通道服务器后,即可选择一条内网连接进行数据交换,于是便完成了内网穿透。

通道服务器充当了信使的角色:内网设备把数据提交到服务器,由服务器转交外网客户端;外网客户端也把数据提交到服务器,由服务器转交内网设备。

---

按照上面的思路,我花了点时间实现了第一版内网穿透系统。

- 安装在内网设备上的代理客户端 `pt-agent`:

![](https://tech.biko.pub/gw/assets/20210425221453.png)

- 基于网页的后台系统,可以看到在线设备列表:

![](https://tech.biko.pub/gw/assets/20210425220443.png)

> 是的,除了树莓派,还兼容 Linux 和 Darwin(mac) 系统。

- 选一个在线设备,连接终端:

![](https://tech.biko.pub/gw/assets/20210425220524.png)

> 这是个全功能终端,可完整响应 `F1~12`、`ctrl-c`、`ctrl-d` 等快捷键。

**待我再完善下,可以将此系统开放出来给大家用。我后续也会分阶段给大家介绍这个内网穿透系统的实现原理。**
收藏 ♥ 感谢
Tony 129.95m 2021-04-26 
可以用 tmate 共享终端。直接穿透 ssh,可以通过浏览器访问,完全免费。
https://tmate.io/
一键安装:
curl -fsSL git.io/tmate.sh | bash
类似的还有
https://upterm.dev/
https://tty-share.com/
https://shellshare.net/
都是开源免费的,提供 ssh 穿透服务,无需自购 VPS。
hanguofu 10cm 2021-04-26 
请问如果我想访问家里的移动硬盘上的文件,是不是只能自己部署一台公网服务器做流量转发了 ?
沐风MWind 50.65m 2021-04-26 
秀啊
沐风MWind 50.65m 2021-04-26 
@hanguofu 自己找公网服务器可以,还可以找其他厂商的内网穿透服务
concefly 40cm 2021-04-26 
@hanguofu 网盘类应用带宽要求高,最好用p2p模式内网穿透,流量不走服务端转发。例如 frp
FALLLLL 2021-12-30 
内网穿透的话,强烈推荐树莓盘,还不限速,树莓派刷个系统就可以用了,链接拿去不用谢~https://www.shumeipan.com/
店长大人 5.5m 2021-12-30 
选群辉

登录注册 后可回复。