效果展示
准备工作
硬件:树莓派3B+、SD卡、SD卡读卡器、网线
软件:所有需要的软件点击此处下载
提取码: hv1b
(链接失效后可在我的公众号mddxz1995后台回复个人网盘获取最新链接)。
其他环境:公网IP
(若只作为局域网访问则不需要公网IP。公网IP是为了让我们的网盘可以通过外网进行访问,此处以一台阿里云作为代理服务端来演示)
搭建方案
- 使用开源应用nextcloud在树莓派3B+搭建网盘(也支持其他树莓派型号)实现文件的存储。优点是是支持Android、IOS设备客户端和web端访问,日常使用比较方便。
- 使用开源应用frp实现内网穿透的反向代理,具体是在一台有公网IP的设备上运行frp服务端,在客户端(这里指树莓派)上运行客户端,外网访问时通过服务端作为代理访问树莓派。优点是支持 tcp, udp 协议,适配了 http 和 https 应用协议,也就是可以更好的通过远程访问我们的网盘内容。
安装镜像
Next cloud提供了树莓派专用的系统镜像,我们可以从官网下载安装,同时也可以在我提供的文件中找到镜像直接安装使用。
- 将下载完成的镜像解压,解压后效果如图所示。(解压软件在软件及教程\解压缩软件中提供)
- 将SD读卡器插入电脑,打开Win32DiskImager镜像安装软件,(在软件及教程\镜像写入工具中提供) ,点击此按钮选择上一步解压出来的文件。
- 在设备栏选择SD卡,我这里选择H盘,选择完效果如图所示。
- 点击下方写入,然后等待写入完成。
- 等待进度条完成后,会提示写入成功。此处需要注意若电脑提示要格式化磁盘一定不要格式化。
- 此时SD卡被分成两个盘。为了稍后使用SSH远程登录树莓派控制台,在资源管理器中进入SD卡boot盘,右键新建/文本文档,新建一个文件名为SSH的空文档,同时删除掉文件后缀名,效果如图所示。
- 将SD卡插入树莓派等待启动,上电前我们将树莓派通过网线接在路由器的lan口。
- 等待约十分钟左右,这个时间刚好可以在刺激战场中玩一把团队竞技。
- 打开路由器的后台,查看树莓派的IP。
- 打开shell工具,点击文件/新建,协议选择SSH,主机填写树莓派IP地址,端口选择22,然后点击连接(工具在软件及教程\Xshell 、Xftp 6中提供)。
- 输入默认账号密码,登入控制台,登陆成功后界面如下,也可以根据提示升级新版的nextcloud。
账号:pi
密码:raspberry
- 打开浏览器,输入树莓派IP,此时可以看到next cloud已经开始运行,这里务必保存好NextCloudPi和NextCloud的账号密码,然后点击下方的Activate。
- 在弹窗中输入NextCloudPi(也就是第一个)的账号密码,然后点击登录。
- 如果安装了U盘,第一次运行会提示格式化U盘,也可以选择跳过。
- External access栏选择No,然后跳到最后一步就可以开始使用了。
- 在浏览器地址栏输入树莓派IP,就进入了登陆界面,使用第二个密码登录。
- 如果看到如下界面就说明已经初始化成功了,此时网盘已经可以在局域网内正常使用,可在apple store和安卓应用市场搜索nextcloud下载对应终端的APP。
Frp反向代理
Frp是一款开源的反向代理软件,我们通过在阿里服务器上运行frp服务端,在树莓派上运行客户端与服务端进行连接。这样我们可以通过服务端作为代理,转发我们对树莓派的请求,以达到外网访问树莓派的目的。这里我主要参考了《FRP中文文档》和《使用frp进行内网穿透》这两篇文档。
服务端配置
- 在阿里后台实例/安全组 规则添加入方向端口,比如我这里添加7500/7500、7001/7001、7600/7600三个端口分别用来作为frp的服务端管理界面的访问端口、树莓派SSH连接映射端口和树莓派网盘访问端口,配置界面如图所示。
- 打开xshell客户端,进入阿里服务器的控制台。
- 执行arch如下指令,查看服务器机器架构,我的服务器是X86_64。
root@iZ2ze68uznd431fxfr63d2Z:~# arch
x86_64
- 下载对应的frp软件,因为GitHub国内访问速度过慢,我这里已经将服务端的软件上传至软件及教程\frp\服务端(X86_64),随后通过ftp客户端传至设备即可,和我设备架构相同的同学可以直接使用我提供的软件,其他架构可在frp官方下载界面下载对应的软件(ftp客户端软件在软件及教程\Xshell 、Xftp 6提供)。
- 打开ftp软件,连接至服务器控制台,将frp服务端软件拖到服务器Dowoload目录下。
- 通过Xshell连接服务器后台,进入frp服务端软件的存放目录,执行如下命令,解压。
cd Download/
sudo tar -zxvf frp_0.32.0_linux_amd64.tar.gz
- 执行如下命令,给文件夹改个名,方便使用。
cp -r frp_0.32.0_linux_amd64 frp
- 执行如下命令,编辑frp的配置文件。
cd frp
sudo vim frps.ini
- 我的服务端配置内容如下:
[common] bind_port = 7000#与树莓派绑定的端口 dashboard_port = 7500#frp服务端软件运行信息展示端口 token = 12345678#树莓派与服务端的登陆口令 dashboard_user = admin#frp服务端软件运行信息展示的访问账号 dashboard_pwd = admin#frp服务端软件运行信息展示的访问密码 vhost_http_port = 10080#此处没有使用,我也没弄明白 vhost_https_port = 10443#此处没有使用,我也没弄明白
- 退出并保存,执行如下指令,运行frp服务端。
./frps -c frps.ini
- 此时通过服务器IP:7500就可以看到frp服务端的展示信息,效果如图所示。
- 再执行如下指令将其运行在后台。
nohup ./frps -c frps.ini &
- 至此,服务端已经配置完成。
客户端配置
- 树莓派是armv7架构,将对应的frp软件通过ftp软件拷贝到树莓派的指定目录下。
- 进入对应目录,和服务端操作类似,解压、重命名。
cd ~/
tar -zxvf frp_0.32.0_linux_arm.tar.gz
cp -r frp_0.32.0_linux_arm frp
- 执行如下指令,编辑客户端配置。
sudo apt-get install vim
[common] server_addr = x.x.x.x #这里填服务器IP server_port = 7000 #这里填写服务器配置中的bind_port token = 12345678 #登录口令 [smb] type = tcp local_ip = 127.0.0.1 local_port = 443 remote_port = 7600 [SSH] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000
- 执行如下指令,运行客户端。
./frpc -c frpc.ini
- 输出如下内容,则客户端和服务端绑定成功。
2020/03/21 09:05:14 [I] [service.go:257] [f499bd2db389d748] login to server success, get run id [f499bd2db389d748], server udp port [0] 2020/03/21 09:05:14 [I] [proxy_manager.go:144] [f499bd2db389d748] proxy added: [smb SSH] 2020/03/21 09:05:14 [I] [control.go:179] [f499bd2db389d748] [smb] start proxy success 2020/03/21 09:05:14 [I] [control.go:179] [f499bd2db389d748] [SSH] start proxy success
- 此时在浏览器地址栏输入服务器IP:7600即可访问树莓派。
- 出现以上弹窗则说明已经成功访问了树莓派,只是由于next cloud的配置,限制了服务器的IP访问,此时,我们进入next cloud的配置文件,将服务器IP添加进去,然后退出保存。效果如图所示。
sudo vim /var/www/nextcloud/config/config.php
- 重新运行frp客户端在后台,成功后此时可通过外网进行访问。
nohup ./frpc -c frpc.ini &
特别感谢
感谢next cloud、frp团队开源分享
参考文档