目录

Build a Raspberry Pi NAS

https://qiniu.am473ur.com/img/raspberrypi.jpg

Build a Raspberry Pi NAS

Ready to work

想要从公网访问并控制到家里的树莓派,就需要有公网IP或者使用frp内网穿透。

Frp内网穿透

frp的缺点是需要有一台较大带宽的vps,流量都需经过这台vps,国内大带宽的vps还是挺贵的。。。

而使用公网IP的优点是上传下载文件的速度不受vps的限制,如果家里带宽比较大,那么下载上传速度也就比较大。

动态公网IP

所以尽量跟运营商申请一下公网IP,第一次我尝试跟人工客服打电话申请静态公网IP被拒绝了,后来才了解到只有企业宽带用的专线是静态的公网IP,资费也是很高的,个人也不能直接申请;然后我又一次联系了人工客服,询问能不能申请动态的公网IP,结果很快就回电通知我已经给了我家动态的公网IP,非常顺利~

Dynamic DNS

后面使用发现,我们这边的动态的公网IP大约2~3天变动一次,这就可以通过 Dynamic DNS(DDNS) 将动态的IP解析到固定的域名,访问起来就方便多了。

DDNS需要服务端和本地各运行一个脚本:本地的树莓派或路由器上运行一个脚本,每隔一段时间(几分钟)就获取一下自己的公网IP,判断一下有没有发生改变,如果发生改变就将新的IP发送给服务端,服务端得到新的IP,就重新将域名解析到新的IP。

DDNS的服务端只提供域名的动态解析服务,所以服务端的带宽对访问树莓派的速度没有影响(但是可能会影响到延时?实际使用没有明显感觉到)

DDNS服务:

  1. 直接使用一些网站(oray.com/3322.org/Dyndns.com/No-ip.com)免费提供的DDNS服务,但是他们给的域名都是比较杂乱的三级域名,需要再把自己租的阿里云/腾讯云域名CNAME解析到这个三级域名。花生壳(oray.com)可以免费使用;而No-ip.com免费版需要每30天登录上去手动续约。
  2. 使用自己的vps运行脚本为树莓派提供DDNS服务,由于需要通过脚本进行域名解析,所以需要在vps上安装对应的SDK,然后开发对应的脚本,可以直接将自己的阿里云/腾讯云域名解析到家里的公网IP。

我现在是选择使用花生壳(oray.com)的DDNS服务,只需要注册即可得到一个三级域名,通过控制台->域名->壳域名来查看。我的路由器是小米4A,可以在后台设置DDNS,选择“花生壳”并输入账号密码域名和检查IP的时间间隔即可。路由器不支持的话就需要在树莓派上运行一个脚本来发送新的IP。

也有很多树莓派玩家通过每次变动IP时,让树莓派将新IP发送给自己的邮箱,使自己总是可以知道最新的IP地址。

测试上下行带宽

可以在 speedtest.cn 测试下行带宽和上行带宽(最好直接连网线测)。

从公网访问树莓派下载文件需要的是家里的上行带宽,而家庭宽带的上行都是很低的,只能去升级下行带宽,上行才能对应的提升一点。。。。所以如果感觉带宽不太够还是要去升级一下宽带的。

我家的联通宽带就不太行,一开始是100M下行,20M上行,实测大约下行90~100M,上行20~40M。于是换了500M下行,50M上行的宽带,实测大约下行450~550M,上行60~70M。

Run Raspberry Pi 4B

准备硬件

首先要买一块树莓派(Raspberry Pi),不同的版本配置也会不同,可以根据需要整一块,我用的是树莓派4B 4GB RAM版。启动树莓派还需要有5V3A的电源和一张TF卡。

各版本树莓派的对照表:https://shumeipai.nxez.com/wp-content/uploads/2017/03/raspberrypi-version-compare-4b.png

https://qiniu.am473ur.com/img/raspberrypi_list.png

然后就是愉快的组装环节,树莓派PCB边缘是有毛糙的,最好用砂纸磨光滑再装到壳子里。 https://qiniu.am473ur.com/img/2021-2-25-a.png

写入Ubuntu镜像

树莓派支持安装很多种系统,我选择的是 Ubuntu Server 20.04.2 LTS 64-bit,可以在这里下载:https://ubuntu.com/download/raspberry-pi,先把镜像下载到本地,把TF卡插到读卡器里,再把读卡器插在这台电脑上。

电脑上需要安装 balenaEtcher 来为TF卡写入Ubuntu镜像,balenaEtcher 支持MacOS/Windows/Linux,可以在官网下载:https://www.balena.io/etcher/

写入镜像过程很简单,跟着点就可以,下图这样就是写入成功了。 https://qiniu.am473ur.com/img/FlashSuccessful.png

写入完成后不需要手动推出磁盘(TF卡读卡器),可以直接拔掉,然后将TF卡插入树莓派即可。

树莓派的Wi-Fi网卡性能较弱,而搭NAS比较需要速度,所以我直接给树莓派插上了网线。这时就可以直接通电了,树莓派会自动开机。

内网SSH连接树莓派

现在就可以用电脑连接Wi-Fi并进入无线路由器的后台,应该可以看到连接路由器的所有设备的内网IP地址MAC地址,等待几分钟可以看到一个设备的名称是ubuntu,接入方式是网线连接,那么这个就是树莓派了。可以通过 ssh ubuntu@内网IP来连接树莓派,默认密码是ubuntu

公网SSH连接树莓派

接着可以设置一下路由器,为了防止树莓派的内网IP发生改变,需要在路由器后台,高级设置->DHCP静态IP分配 把树莓派的MAC地址和当前的内网IP地址绑定起来。然后为了让公网对路由器的访问都转向树莓派,高级设置->端口转发->开启DMZ,把DMZ这边的IP地址设置为树莓派的内网IP地址。这样设置完成之后,就可以通过 ssh ubuntu@公网IP 来远程控制树莓派了,公网IP地址可以通过访问 http://testipv6.com/来查看。

较为遗憾的是运营商一般会屏蔽掉80端口和443端口。。。所以如果在树莓派上起服务,只能通过端口访问,这个问题可以通过在一台有公网IP并且开着80端口的vps上配置Nginx反向代理来解决,不过这样的话流量还是要走vps,所以为了快速的下载上传文件,只能通过加着端口这种方法来访问了,不过好在最终速度理想。

初始配置

在同一文件夹下备份默认的源:

1
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

编辑 /etc/apt/sources.list 并替换成下面的内容:(sudo vim /etc/apt/sources.list

1
2
3
4
5
6
7
8
9
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse

然后更新:

1
2
sudo apt update
sudo apt upgrade

Build NAS

私有云有很多种选择:seafile、nextcloud、KodExplorer等,我使用的是KodExplorer(可道云),比较美观并且可以创建低权限用户支持预览的格式也很多。

KodExplorer

官网链接:https://kodcloud.com/,官网的文档很详细。

为树莓派安装好lamp环境,然后将KodExplorer的文件夹放到web目录下即可,开放好对应的端口之后,我们就可以通过h ttp://域名/目录名 来访问到KodExplorer了。

不过要注意的是,服务要开在其他开放了的端口(80,443会被屏蔽)。

优化上传和下载的速度,可以按照这个方法操作一下:https://teddysun.com/489.html,速度提升非常明显。

挂载硬盘

安装好KodExplorer之后,就可以上传下载文件了,不过是存到TF卡里的,作为NAS当然需要给树莓派外挂硬盘,树莓派上有两个USB3.0接口和两个USB2.0接口,可以在这里挂上移动硬盘或者是硬盘加硬盘盒。

我使用的方法是给树莓派的USB3.0接口插了一个硬盘盒,可以自己选择需要大小的硬盘放在硬盘盒里,缺点是硬盘需要12v的供电,而树莓派的USB3.0仅有5v,所以需要给硬盘盒外接一个12v电源,不是很优雅,但硬盘的容量选择很多。

首先为了让树莓派支持ExFatNTFS格式的硬盘,需要安装下面两个依赖:

1
2
sudo apt-get install exfat-fuse
sudo apt-get install ntfs-3g

然后就可以挂载硬盘了,插上硬盘之后可以 sudo fdisk -l 来查看到自己的硬盘,然后 df -h 查看已经挂载的磁盘,这时这里是没有自己的硬盘的。

1
2
sudo mkdir /www/wwwroot/[站点名称]/nas
sudo mount /dev/sda1  /www/wwwroot/[站点名称]/nas

[站点名称]换成自己的站点名称。

就可以通过 df -h 查看到已经挂载到这个目录的硬盘了,加载内核模块modprobe fuse,然后设置开机自动挂载,先 sudo vim /etc/fstab,然后在底部添加这一行:

1
/dev/sda1  /www/wwwroot/[站点名称]/nas ntfs-3g defaults,nofail,noexec,umask=0000 0 0

这样树莓派nas就搭建完成了~

https://qiniu.am473ur.com/img/nas_KodExplorer.png