1. 前言
最近买了个85寸电视,就想搞个NAS。
看了看价格,绿联NAS DX4600 2000左右,蜗牛星际NAS 1000左右,硬盘还需要另外购买。贫穷,让我想到了废弃已久的华为荣耀笔记本电脑。
要不然,用它作为NAS?还可以作为软路由?还可以部署Nginx、Jupyter、ChatGPT代理等常用服务,还可以参考 Awesome-Selfhosted 部署更多有趣的项目,想想还挺不错。搞起来!
2. NAS与软路由简介
NAS,全称为网络附属存储(Network Attached Storage),是一种专门的网络存储设备。NAS 设备通过网络直接连接到其他设备,用户可以随时随地通过网络存取NAS中的数据。
NAS设备的主要功能是提供数据存储和备份,同时还可能有流媒体服务、打印服务等其他功能。NAS设备可用于家庭和企业,帮助实现数据共享和存储管理,特别在企业场景下,NAS可以优化数据备份、共享和远程访问等业务流程。NAS设备可能通过NFS、FTP、SMB、WebDAV、DLNA等协议对外提供服务。
软路由是指使用普通计算机和路由软件实现的具有路由功能的设备。与一般的硬件路由器不同,软路由器可以运行在商用操作系统上,并由用户自定义和配置,以满足特定网络环境和应用的需求。软路由可以提供诸如路由转发、防火墙、VPN、流量管理等多种功能。
NAS和软路由一体化设备,就是同时实现网络路由和数据存储功能的设备。它既能提供网络路由和防火墙等网络服务,又能提供文件共享和数据备份等存储服务。以下是几种常见的一体化方案:
- 在通用Linux系统中安装NAS软件和路由软件。通用Linux系统中(如Ubuntu、CentOS),安装NAS软件来实现存储功能,安装路由软件来实现路由功能。
- 在NAS系统中安装路由软件。NAS系统中(如FreeNAS、OpenMediaVault),安装路由软件来实现路由功能。
- 在软路由系统中安装NAS软件。软路由系统中(如OpenWrt、pfSense、OPNsense),安装NAS软件来实现存储功能。
- 虚拟化技术。在主机上创建两个虚拟机,分别安装软路由系统和NAS系统;或者使用Docker,运行软路由系统和NAS系统。
- 商业一体化设备。一些厂商推出了一体化的软路由NAS设备,如华硕的RT-AC86U、群晖的DS216j等。这些设备可以同时实现软路由和NAS的功能,方便用户快速搭建家庭网络。
参考文档:
- 软路由/NAS - All in one(非虚拟化)方案
- 软路由NAS一体方案:打造智能物联网家庭网络
- NFS、FTP、SMB、WebDav、DLNA协议,傻傻分不清?
- 从听说到上手,人人都能看懂的软路由入门指南
- Wikipedia - OpenWrt
3. 安装Ubuntu系统
参考文档:Create a bootable USB stick on macOS
1、服务器系统选择 ubuntu-18.04.6-desktop-amd64.iso
之所以选择desktop版,是因为desktop版是图形化界面,初始化配置很方便。后期不想要desktop的话,可以卸载掉。
2、使用balenaEtcher制作一个U盘启动盘
3、笔记本插入U盘,开机选择从U盘启动
4、根据提示安装Ubuntu系统
系统分区时注意事项:
- 建议手动进行分区,
New Partition Table
,如果分错了就Revert
重新搞。 - 32MB给
bios
,格式reserved bios boot area - 500MB给
efi
,格式efi - 2GB 给
/boot
,格式ext4 - 其余空间给
/
,格式ext4
在现代电脑系统(使用UEFI模式)中,电脑首先引导到EFI分区,EFI分区中的UEFI启动加载器,接着加载/boot分区中的操作系统内核,然后操作系统开始运行。
参考文档:
4. 初始化Ubuntu系统
4.1. 配置固定IP
图形界面配置。
或者参考《Ubuntu18配置静态IP》,使用命令行配置。
4.2. 关闭自动更新
1 | systemctl status unattended-upgrades |
4.3. 配置合上屏幕不休眠
1、编辑logind配置
1 | vim /etc/systemd/logind.conf |
修改其中的配置为:
1 | HandleLidSwitch=ignore |
HandleLidSwitch是指笔记本屏幕合起来,设置为ignore,也就是笔记本屏幕合起来时不进行任何改变。
2、重启 systemd-logind
1 | systemctl restart systemd-logind |
4.4. 断网自动重连
1、修改网络管理器配置
1 | vim /etc/NetworkManager/NetworkManager.conf |
其中的 ifupdown 部分修改为:
1 | [ifupdown] |
2、重启网络管理器
1 | service network-manager restart |
4.5. 安装向日葵
1、参考向日葵官方文档,安装向日葵
2、安装 lightdm ,并重启主机
1 | apt install -y lightdm |
参考文档:
5. 安装配置Samba
5.1. 安装Samba
1、安装Samba
1 | apt install samba |
2、查看Samba服务状态
1 | systemctl status nmbd |
5.2. 配置Samba
1、创建共享目录,并给sambashare用户组设置所有目录的读写权限
1 | mkdir -p /data/samba/video |
其中,sambashare用户组是在安装Samba过程中自动创建的。
3、创建samba用户并授权
1 | useradd -m -s /usr/sbin/nologin -G sambashare samba |
Samba权限控制使用Linux用户和组的权限系统,但具有自己的身份验证机制,与标准Linux身份验证分开。
4、配置共享目录和用户
编辑samba配置文件
1 | vim /etc/samba/smb.conf |
在文件最后添加:
1 | [video] |
配置说明:
[video]
和[doc]
表示登录时使用的共享名称。path
表示共享的目录。browseable
表示可浏览,是否可在共享列表中列出此共享。如果设置为no,其他用户将看不到共享目录。read only
表示valid users列表中指定的用户是否设置仅允许读,如果值yes,则仅允许读。force create mode
表示此共享创建文件时设置的文件权限模式。force directory mode
表示此共享创建目录时设置目录权限的模式。valid users
表示允许访问共享的用户和组的列表。群组以@
符号为前缀。
更多配置选项,请参考文档 smb.conf — The configuration file for the Samba suite
5、重启samba
1 | systemctl restart nmbd |
5.3. 测试使用Samba
1、安装 samba client
1 | apt install smbclient |
2、创建测试文件
1 | touch test.txt |
3、连接samba server
1 | smbclient //192.168.5.233/users -U samba |
4、上传下载文件
1 | smb: \> ls |
下载文件时,还可以使用smbget工具
1 | smbget -U samba smb://192.168.5.233/video/test.txt -o test3.txt |
5.4. 配置防火墙
1 | ufw allow 'Samba' |
6. 本地挂载阿里云盘
6.1. 安装Docker
参考文档:《Docker入门篇》
6.2. 获取阿里云盘refresh token
参考文档dockerhub - messense/aliyundrive-webdav,通过在线工具获取 refresh token。
以前通过浏览器自行获取refresh token的方法已失效,详情参考 Error: Invalid refresh token value found in –refresh-token argument。
6.3. 启动阿里云盘webdav容器
1、拉取webdav镜像
1 | docker pull messense/aliyundrive-webdav:2.3.3 |
2、启动webdav容器(本地文件服务器)
1 | docker run -d --name=aliyundrive-webdav \ |
3、查看webdav容器状态
1 | docker ps |
6.4. 挂载阿里云盘
1、安装webdav驱动
1 | apt install -y davfs2 |
2、创建挂载目录
1 | mkdir -p /data/aliyundrive |
3、挂载阿里云盘
1 | mount -t davfs http://192.168.5.233:8080/ /data/aliyundrive |
4、查看挂载
1 | cd /data/aliyundrive |
6.5. 通过samba共享
本地目录挂载阿里云盘后,和其他普通目录一样,也可以通过samba共享给其他主机。
samba配置如下:
1 | [aliyundrive] |
6.6. 拷贝阿里云盘中的文件到本地
如果担心访问阿里云盘时候的网络不稳定,可以把一部分文件下载到本地磁盘。
1 | screen rsync -P -azv '爱情公寓' /data/samba/video |
下载速度很快,家庭千兆宽带大概平均 10MB/s,峰值 30MB/s。
7. 安装配置WebDAV
7.1. WebDAV简介
WebDAV(Web-based Distributed Authoring and Versioning)是一种基于HTTP协议的通信协议,用于使用户可以方便地对服务器上的文档进行远程编辑和管理。WebDAV扩展了HTTP/1.1协议,增加了一系列的方法,以支持文件的创建、移动、复制和删除等操作。
使用WebDAV需要两个基本组件:WebDAV客户端和服务器。WebDAV客户端可以是任何支持该协议标准的软件,如一些文件管理器、专门的WebDAV应用程序或甚至是某些操作系统内置的文件浏览功能。服务器端则需要运行支持WebDAV的服务器软件,如Apache的mod_dav模块。
设置WebDAV环境时,通常需要在服务器上进行配置,以确保正确的文件权限、认证和安全设置。出于安全考虑,WebDAV通信应该通过SSL/TLS加密来保护数据传输过程中的安全性(使用HTTPS协议而不是HTTP)。
相较于Samba,WebDAV的权限检查更严格,比如目录中存在权限为问号的文件,那么整个目录都无法访问。
7.2. 安装WebDAV服务端
1、安装Apache HTTP服务器
1 | apt update |
2、启用Apache的WebDAV模块
1 | a2enmod dav dav_fs |
3、重启Apache
1 | systemctl restart apache2 |
7.3. 配置WebDAV服务端
1、创建WebDAV共享目录,并授权
1 | mkdir -p /data/samba |
这里复用Samba共享目录,同时修改权限为777,否则 www-data 用户无权读写。
2、配置WebDAV服务
1 | vim /etc/apache2/sites-available/000-default.conf |
VirtualHost标签中,添加如下内容:
1 | Alias /webdav /data/samba |
3、创建用户名和密码
1 | htpasswd -bc /etc/apache2/webdav.password user1 password1 |
增加用户名和密码:
1 | htpasswd -b /etc/apache2/webdav.password user2 password2 |
4、重启Apache
1 | systemctl restart apache2 |
7.4. 测试使用WebDAV
7.4.1. 浏览器访问
假设主机IP为 192.168.5.233
浏览器访问 http://192.168.5.233/webdav
访问时,会提示输入用户名和密码,证明我们的webdav配置正常。
登录后,会提示 Forbidden You don’t have permission to access this resource.
这是正常的,因为缺少 index.html 这种文件。
假设有一个文件路径为:/data/samba/test.png
那么通过浏览器可以直接访问:http://192.168.5.233/webdav/test.png
7.4.2. cadver客户端访问
1 | apt install cadaver |
连接时,会提示输入用户名和密码。
连接成功后,会看到 cadaver
命令行提示符,此时可以使用以下命令:
ls
: 列出当前目录中的文件和目录。cd directory
: 更改到名为directory
的目录。pwd
: 显示当前目录的完整路径。get filename
: 下载文件filename
到本地当前目录。put filename
: 上传本地文件filename
到当前的WebDAV目录。mget *.ext
: 下载当前目录中所有扩展名为.ext
的文件。mput *.ext
: 上传当前本地目录中所有扩展名为.ext
的文件。delete filename
: 删除文件filename
。mkcol directory
: 创建一个名为directory
的新目录。move source destination
: 移动或重命名文件source
为destination
。copy source destination
: 复制文件source
到destination
。