项目背景

公司目前有一些接入到4G网络的树莓派,需要通过远程shell连接对其进行管理和日常维护。但是这些设备没有固定的公网ip,所以需要通过内网穿透来解决。

准备工作

  • 需要进行穿透的树莓派*N(我们安装的是ubuntu 20系统,以下操作命令均基于此系统)
  • 一台具有公网IP/域名的服务器,系统不限(我们使用的是阿里云windows server)
  • lanproxy

架构原理

这里大概讲一下过程,很多细节需要看后续步骤才能理解

大体流程:

  1. 首先我们在阿里云开启内网穿透lanproxy服务端,监听8000端口
  2. 在阿里云上lanproxy控制台中,为一个树莓派创建密钥(启动客户端的时候需要用到这个密钥)并且指定一个对外端口10000
  3. 客户端(树莓派)启动lanproxy客户端,连接到阿里云8000端口,双方建立长连接
  4. 通过xshell连接到阿里云10000端口,即可成功连接到该树莓派。

注意事项:

  • 以上提及的所有端口基于我们公司实际项目填写,实际配置过程中可以随意填写。
  • 以上用到的服务器(阿里云)端口要在防火墙中开放,否则无法使用

架构图:

haproxy搭建内网穿透_树莓派


PS:有的小伙伴可能会问,所有树莓派都连接到同一个阿里云端口,那么服务端是靠什么来进行路由转发的呢?答案是密钥,这里会在下边的教程中提及。

部署过程

1.安装服务端

下载服务端–下载地址 链接里边有好多文件,注意别弄混了,服务端的文件名为:proxy-server-0.1.zip
将压缩包解压之后,首先打开conf/config.properties文件,内容如下:

server.bind=0.0.0.0
#客户端的连接端口
server.port=4900	 

server.ssl.enable=true
server.ssl.bind=0.0.0.0
server.ssl.port=4993
server.ssl.jksPath=test.jks
server.ssl.keyStorePassword=123456
server.ssl.keyManagerPassword=123456
server.ssl.needsClientAuth=false

config.server.bind=0.0.0.0
#服务端后台界面端口号
config.server.port=8090
#后台账号
config.admin.username=admin
#后台密码
config.admin.password=admin

其中有两行特别容易混淆的地方需要单独说明

server.port=4900	 
config.server.port=8090

其中server.port是服务端与被穿透设备通信时用到的端口(架构图中没有画出这个对应的端口),也就是我在上边架构图中画的8000端口。
config.server.port是指服务端后台界面端口,我们部署完后,通过 localhost:8090即可访问这个界面。
远程端口(就是我上边提到的10000、10001、10002)不在配置文件中配置,需要去后台界面中配置!

以上内容可以根据需要修改。ssl部分因为我们项目中没有用到,故不做讲解。

启动服务端需要java运行环境,没有的需要自行安装一下!

配置完后,使用bin/目录下的具体sh或bat文件启动项目。通过locathost:8090(如果你改端口了,就用自定义的端口)访问后台,然后按照如下图示操作。

haproxy搭建内网穿透_haproxy搭建内网穿透_02

haproxy搭建内网穿透_haproxy搭建内网穿透_03

haproxy搭建内网穿透_客户端_04


到此为止,我们安装好了lanproxy客户端,并且配置了一台客户端的密钥和穿透端口。需要注意的是,以上用到的端口都需要在防火墙中对外开放(我用的阿里云,需要在阿里云后台配置安全组策略)。

接下来我们需要配置客户端。

2.安装客户端

首先我准备了一台装有ubuntu 20的树莓派(无桌面)。lanproxy准备了用go编译号的客户端,使用起来十分方便。点击下载客户端

下载链接中, lanproxy-client-*开头的都是客户端,需要根据自己的系统选择对应的版本。树莓派是arm架构的,所以我下载的是lanproxy-client-linux-arm.tar.gz,如果是使用桌面cpu的服务器(英特尔或amd),则需要下载lanproxy-client-linux-amd64-20190523.tar.gz或 lanproxy-client-linux-386-20190523.tar.gz(分别对应64位和32位机器)

使用树莓派获取压缩包并解压后,使用命令后台启动程序

sudo nohup client_linux_arm7 -s 服务端IP或域名 -p 服务端端口  -k 密钥 &

其中“服务端端口”指的就是刚才配置文件中“server.port”字段指定的端口号

3.测试

客户端启动后,登录lanprox控制台,在‘客户端管理’界面即可查看到设备的在线状态。

使用xshell进行连接,输入公网的ip和端口号,则可以直接连接到树莓派里边了。

优化

树莓派添加客户端开机自启功能

待完成

服务器添加服务端开机自启功能

待完成