软件自组NAS折腾记
有句话说得好:折腾永无止境啊!前段时间为了随时能够看看旧照片、豆瓣TOP250的电影,入手了绿联云的DX4600的NAS(我是一个NAS菜鸟玩家,唯一的要求就是外网访问不卡、支持视频硬解,稳定!),准确的说它不配称作NAS,因为NAS系统都是有自己完备的软件生态的,比如DSM,即使安装黑群晖也有勉强不错的体验。那么绿联的这款为什么最终让我如此唾弃呢?
背景吐槽
还得从绿联云令人作呕的操作说起
主要原因还是系统升级后不给用户开放SSH权限了,你敢信?2023年了,竟然还有锁SSH的?那么为什么我对锁SSH权限这件事情如此反感呢,绿联云DX4600的操作系统自称UGOS,其实就是根据开源的OpenWRT改过来的,作为一个初级入行NAS品牌来说,我对它有足够的耐心和容忍度,因为不管是任何产品,都需要一个起步的阶段,你不能指望一开始就是完美形态,但是在社区(绿联云有一个自己的NAS社区)看了这么久的帖子,发现一个结论:用户提意见等于没提,从来没把用户的真实需求放在第一位,这也就算了,很多时候遇到没有的功能都自己通过Docker容器解决了,现在绿联把这最后一条也堵死了,关闭了SSH权限,Docker可视化界面功能做的跟屎一样,社区骂声一片,我等了一周,但是绿联官方从来没出面解释过为什么关闭SSH权限。京东客服给的回复是为了防止用户入侵系统,一律锁死SSH权限,大无语。虽然现在网络上有了破解SSH权限的方式,比如 《绿联云7月版本更新后进入SSH的方法》 ,Bilibili上也有详细的教程,但是我真的不想如此折腾,NAS购买回来厂商只需要提供免费的内网穿透服务即可,至于用户想干什么,你管的着?绿联云这种SX厂商后台偷偷跑吸血雷,后台偷偷扫描我文件,真心发问,它把用户当什么?
另外呢,再说受另外两件事情,一件事情也是关于绿联DX4600的,在之前可以破解SSH权限的时候,看到迅雷进程杀不掉,就算kill -9直接干掉迅雷的进程号,过一会儿迅雷依旧会被UGOS的系统服务带起来,合着绿联把用户当血包了,真的,想想之前国内视频平台爱某艺的电视盒子偷偷上传用户本地缓存数据,真的很恶心。另一件事情呢是关于极空间NAS,私自全盘扫描用户文件,不得不说个个都是人才,用户本身购买NAS就是为了给数据一个本地、安全、完全私有的环境,结果这两家厂商给人整不会了。
最离奇的是什么操作呢?DX4600已经被我拆开了,里面主板是自带HDMI接口的,结果经过绿联垃圾厂的外壳包装,直接给你封死了HDMI接口,笑死,主板带了HDMI,外壳给挡住了,地狱级笑话了属于是!
好了背景故事说完了,下面还是简单总结一下我搭建私有NAS而不用任何市场成品NAS的原因:
需求分析
1、绿联、极空间等厂商不把用户当人,用他们的系统,毫无隐私,妥妥的自己出电费+网费+设备费当肉鸡,因此国内NAS自带系统统统不考虑,至于联想、华为之流和极空间、绿联别无二致,都是乌合之众。为了能够自己100%掌控家里的NAS,我选择自行搭软件环境,采用Debian作为操作系统。
2、威联通、群晖等成熟NAS功能完备,但是外网访问速度感人,而且黑群晖个人体验一般,不如直接上白群晖。
3、开源NAS系统命令行使用不管,不管是基于OpenWRT的还是比如像UnRAID、FreeNAS等,对我来说需要的是稳定、符合我对Debian系的Linux操作习惯即可。
4、既然是NAS,我也需要多客户端,支持Android、iOS、Windows、Mac,因为不只是我自己用,家里人也需要照片备份,远程访问必不可少,而且速度也要跟上。
环境搭建
系统安装
Debian以其稳定性和安全性而闻名。Debian系统的更新速度比较缓慢,但它的软件包经过了长时间的测试,使得系统的稳定性更高,故此选择了Debian。第一步就是U盘写入Debian10的iSO,由于DX4600自带了32GB SSD存储,准确来说是自带了32GB的EMMC板载闪存,所以这块EMMC就作为DX4600的系统盘,EFI分区也在这个硬盘上。
Web管理界面
作为NAS平时肯定是需要一个Web管理页面的,这里我推荐Cockpit,Cockpit 是一个 Red Hat 赞助的开源项目,它是一个网页式用户界面,让用户可以通过浏览器来管理和监控Linux 服务器。除了一些常规的系统操作外,Cockpit 还支持 Docker、Kubernetes和KVM。 通过Cockpit Web UI可以轻松启动容器、管理存储、配置网络和检查日志。Cockpit的默认端口是 8888
UI的颜值也是比较高的,没有丝毫多余的东西:
如果使用命令行来操作硬盘不熟练,但你又需要组一个RAID1或者REAID5,那么直接使用存储管理界面直接操作即可
内网穿透
作为NAS最重要的就是在外部也能访问,通过我的个人实践,有以下几条路可以选:
:::note{title=“方案一:公网IPv6/v4”} 纯IPV4环境无法访问IPV6,需要客户端和服务端的网络同时支持IPV6,条件比较苛刻。一般光猫采用桥接模式,使用软路由或者支持IPV6的路由器进行拨号,获得公网IP。需要有自己的域名,通过DDNS技术将动态IP解析到域名上即可。而且现在公网IPV4即是是动态的也非常难以获取,这真的就是社会历史问题了,没办法的事。
条件太苛刻,放弃! :::
:::note{title=“方案二:云服务器作为FRPS”} 优点就是方便,frpServer端完全自己掌控,端口多到用不完,自己想解析那个端口就解析那个端口,直接Nginx-Proxy-Manager申请泛域名证书,不管自己的啥服务都可以设置一个二级域名,通过https访问。
价格贵呀,便宜的学生机一年也要78RMB,更为关键的是2M的带宽能干嘛? :::
:::info{title=“方案三:第三方FRP服务商”} 其实第三方服务商有便宜有贵的,贵一点的带宽和稳定性都可能能强点。这里推荐两个服务商,一个 https://console.chickfrp.com/ ,一个则是 https://www.ddnsto.com/ 这两家服务商都算得上是物美价廉的存在,这里还真不是打广告,截图看价格:
如果你不需要很高的带宽的话4Mbps其实也够用,因为ddnsto不支持自定义一级域名,所以如果实在想用自己的域名可以使用chickfrp,或者cname指向已分配的域名。 :::
:::tip{title=“推荐方案”} 其实,通过ddnsto已经可以实现远程操作frpc的目的了,如果想换域名、换端口直接在控制台操作即可,非常的方便,唯一美中不足就是首次使用的设备需要微信扫码验证,这一点比较烦,所以,如果一个服务仅仅是自己用那么直接用ddnsto的隧道即可,分配下来的隧道自带https访问,非常方便快捷。是我用过的最好用的内网穿透系统。
如果你想让大家都访问的服务(比如公共网盘之、博客之类的服务),那么还是用chickfrp即可,因为不用验证即可访问。这两个frp形成互补,安全性稳定性都还是非常不错的。 :::
另外如果使用这种frp直接用docker运行客户端即可,
1docker run -d --restart always --network host --name frpc -v /docker-home/frpc/frpc.ini:/etc/frp/frpc.ini -v /docker_home/frpc:/etc/frp snowdreamtech/frpc
之所以映射 /etc/frp 是因为如果你想通过http2https这个插件的话,直接把证书的路径给配置上就行,所以我的证书都放在/docker_home/frpc下面,需要配置https证书的时候直接在配置文件里写路径就完事了:
1[common]
2protocol=tcp
3server_addr=xxx.xxx.xxx
4server_port=7000
5user=xxxxxxxxxx
6token=xxxxxxxxx
7tcp_mux=true
8
9[ home ]
10type= https
11local_ip=127.0.0.1
12local_port= 10000
13custom_domains= xxx.xx
14use_compression=false
15use_encryption=false
16# 开启SSL插件
17plugin = https2http
18plugin_local_addr = 127.0.0.1:10000
19# HTTPS 证书相关的配置
20plugin_crt_path = /etc/frp/xxx.xxx.crt
21plugin_key_path = /etc/frp/xxx.xxx.key
22plugin_host_header_rewrite = 127.0.0.1
23plugin_header_X-From-Where = frp
网盘系统
接下来就是选择网盘系统,毕竟是NAS,总得有一个文件管理的功能,而且还要支持Android、iOS、Windows、Mac等客户端,这看选择下来只剩 NextCloud 等一些可以选了,但是NextCloud要说臃肿也是真的臃肿,而且还依赖于MySQL作为元数据存储的地方,虽然使用Docker部署起来也很简单,但是坑真的不少。试来试去总算找个一个比较好用的那就是易有云,没错上面的DDNSTO服务也是他家的,真的太懂折腾玩家的心思了,点赞!!!
易有云软件提供,整套私有化的网络存储服务,用户可以轻松达成各种专业级别功能;一个可以随时随地远程连接个人文件或设备的私有存储云;全平台的数据互通,P2P的极速体验。随时随地备份你的照片、文件完全的数据私有化。
我用的版本是linkease-binary-1.2.2 x86_64,在debian下直接运行即可
1./linkease.x86_64 --serviceControl installAndStart
文件共享系统
webdav
1docker run --restart always --name=webdav_sata1 -v /mnt/sata1:/var/lib/dav/data -e AUTH_TYPE=Digest -e USERNAME=xxxxxx -e PASSWORD=xxxxxx --publish 10002:80 -d bytemark/webdav
2
3
4
5docker run --restart always --name=webdav_sata1 -v /mnt/sata1:/var/lib/dav -e AUTH_TYPE=Basic -e USERNAME=xxxxxx -e PASSWORD=xxxxxx --publish 10002:443 -d bytemark/webdav
Digest类型是HTTP类型,Basic是HTTPS类型,将要分享的目录挂载到容器的 /var/lib/dav
即可。
smba
1docker run -it --name samba -p 139:139 -p 445:445 -v /mnt/sata1:/mount -d dperson/samba -u "username;password" -s "share;/mount/;yes;no;no;all;user;user"
除了要指定分享目录、用户名密码以外,后面的是权限相关的参数。-s
参数看起来复杂,其实就是个填空题。按照需求填写即可,只需每项中间加分号。
如果需要其他的文件共享协议支持,也可以部署其他的服务。
其他Docker容器
除了webdav、smba共享使用的两个docker之外,还有一些其他的必装的docker容器。
1、Portainer CE 2.18.4 - docker可视化管理,非常方便。
2、Watchtower Docker容器自动升级,根据创建的命令自动创建新的容器覆盖旧容器。