通过SSH反向代理连接内网的树莓派
场景:
在办公室有一台树莓派,当我回家了或者在外面用手机网络无法进入内网,所以访问不到了。如果这个时候我需要 SSH 进去做一下设置,那么怎么解决这个问题呢?本文将给出一种使用 SSH 的代理功能的解决方案。
目的:通过一台公网linux机器连接内网的树莓派。
材料:
- 一台公网linux机器,这里用的是DigitalOcean的VPS。
- 树莓派
机器状况
机器 |
IP |
用户名 |
备注 |
树莓派 |
192.168.0.A |
usr_a |
目标服务器,在局域网中,可以访问 树莓派 |
VPS |
B.B.B.B |
usr_b |
代理服务器,在外网中,无法访问 树莓派 |
手机等Client |
– |
– |
可以直接访问 VPS,无法直接访问 树莓派 |
解决方案
在树莓派上做到 VPS的反向代理;在 VPS上做正向代理本地端口转发
环境需求
每台机器上都需要 SSH 客户端
树莓派、VPS上需要 SSH 服务器端。通常是 openssh-server。
在 Ubuntu 上安装过程为
sudo apt-get install openssl-server
实施步骤
建立 树莓派 到 VPS 的反向代理【树莓派 上操作】
ssh -fCNR <port_b1>:localhost:22 usr_b@B.B.B.B
<port_b1> 为 VPS 上端口,用来与 树莓派 上的22端口绑定。
建立 VPS 上的正向代理,用作本地转发。做这一步是因为绑定后的 端口只支持本地访问【VPS 上操作】
ssh -fCNL *:<port_b2>:localhost:<port_b1> localhost
<port_b2> 为本地转发端口,用以和外网通信,并将数据转发到 <port_b1>,实现可以从其他机器访问。
其中的*表示接受来自任意机器的访问。
现在在 Client 机器上可以通过 VPS ssh 到树莓派。
ssh -p <portb2> usra@B.B.B.B
至此方案完成。
同理,也可以建立反向代理通过VNC来连接内网树莓派的图形界面。
附:
SSH 参数解释
-f 后台运行
-C 允许压缩数据
-N 不执行任何命令
-R 将端口绑定到远程服务器,反向代理
-L 将端口绑定到本地客户端,正向代理