一份可能更适合普通用户的NAS使用指南

序言

笔者于2022年1月购入一台四盘位NAS,品牌是威联通,X86平台,尝试以一个普通用户的视角撰写本篇NAS使用指南。对NAS设备已经有一定了解,只想知道一些使用方法 玩法 的可以跳转到使用指南

本教程均以普通用户为前提。
注意,本文并非零基础教程

NAS设备:全称是网络附属存储(Network Attached Storage),通常表示一台连接在网络中以提供高可靠稳定的跨平台共享存储为主要功能的网络服务器。可以架设在局域网中,也可以架设在广域网中。(对于基础较浅的读者来说,也可以把NAS设备理解为一个独享的网盘。)

通常来说,对于普通的家庭用户,NAS设备可以提供容量足够大且可供私人随意使用的云存储,可以对iCloud、华为云空间,小米云服务、百度网盘、阿里云盘等云存储服务实现比较好的平替。当然,NAS设备可能不具备上述产品提供的如下功能:

  • 嵌入系统级的无感云服务:包括相册、短信、联系人、录音、日历、备忘录、应用数据等用户数据的无感云同步及云备份(iCloud、华为云空间,小米云服务)(例外情况:手机厂商推出的专有NAS可能会具备这些功能)
  • 庞大的使用用户群带来的丰富的分享文件(百度网盘、阿里云盘等)

除了这两点之外,NAS设备具有其他绝大多数的优点:

  • 更具有可能性的存储容量:NAS设备可以轻松达到数十TB,以四盘符的NAS为例,可以容纳最多四张主要存储介质,若均使用16TB企业级硬盘,则总容量将达到64TB。截至20240728,我刚刚查看了百度云盘提供的最大空间扩容包为5TB/528三年,阿里云5TB/258一年,加上会员自身的几TB,十几TB的容量基本上是一个网盘的常规上限。
网盘常见规格
阿里云盘空间扩容规格
百度网盘空间扩容规格
百度网盘不同SVIP等级空间容量
  • 更加私人化的存储空间:使用正规的NAS设备,一般情况下具有数据的完全掌控权力,在合理使用范围内不会发生数据外泄,也不会因为第三方审查导致数据丢失。
  • 更加开放的存储共享:通常,NAS设备的存储空间可以通过WEB、PC本地挂载、手机挂载、手机APP等多种方式访问。可以比较轻松的实现多平台文件共享。
  • 更加多样化的自定义功能:通常,NAS设备可以提供更加多样化的存储附属功能,除了完全自由的共享、备份、分享之外,还包括但不限于电影电视剧库、图片库、家庭影片库、音乐库、文库、漫画库、监控中心等等
各种云存储的主要差异

需求梳理

通过序言的介绍,基本可以帮助读者对NAS设备的核心优势功能有一个基本的了解,那么本章将介绍什么样的用户适合使用NAS设备。笔者认为可以把需求分成四个层级。

1、生产力需求:例如专业的区域集体办公用户,专业的个人摄影摄像工作者,专业的BT或PT用户,有极强的数据安全需求,需要专业的备份容错冗余等能力提供数据安全。通常对于这部分用户来说,NAS设备近乎于刚需(或者阵列硬盘柜),甚至可以视为能带来盈利的工作投资。同样,这类用户也有更专业的使用需求,也无需本文重点阐述。

2、半生产力半娱乐需求:笔者认为半生产力和半娱乐需求是普通家庭用户主要使用NAS的核心原因。

(1)首先出于隐私和审查问题,可能有部分数据并不想进入公共区域(公共网盘),即便用户协议可能有保证数据私密性的表述。特别是人工智能进入大模型时代,包括但不限于微信聊天、网盘、QQ空间、QQ空间相册等进入公共区域的数据都有泄漏、被非意愿使用、被强制删除的风险。

百度网盘隐私协议节选

于2024年9月3日节选自 https://pan.baidu.com/disk/main#/protocol/duty_mobi

1.4 若用户使用百度网盘服务的行为不符合本协议,度友公司在经由通知、举报等途径发现时有权做出独立判断,且有权在无需事先通知用户的情况下立即终止向用户提供部分或全部服务。用户若通过百度网盘服务散布和传播反动、色情或其他违反国家法律、法规的信息,百度网盘服务的系统记录有可能作为用户违反法律法规的证据;因用户进行上述内容在百度网盘服务的上载、传播而导致任何第三方提出索赔要求或衍生的任何损害或损失,由用户自行承担全部责任。

1.5 根据用户使用百度网盘的情况,度友公司将不断改善产品体验,例如提供个性化的服务或提高用户使用服务的安全性,并在首页等位置以弹窗、图片、文字等形式提示用户促销活动信息。同时,如经由通知、举报等途径发现用户在使用百度网盘服务所提供的网络服务时违反任何本协议的规定,度友公司有权要求用户改正或直接采取一切度友公司认为必要的措施(包括但不限于更改或删除用户上载的内容、暂停或终止用户使用网络服务,和/或公示违法或违反本协议约定使用百度网盘服务用户账户的权利)以减轻用户不当行为造成的影响。

4.1 百度网盘依托大模型技术,为用户提供智能化服务,包括但不限于云一朵智能助理、视频AI看,音频AI等功能。 “云一朵”是百度网盘依托大模型技术提供的人工智能问答服务,用户需在对话框输入文本信息,智能化服务会基于用户输入输出相应的内容作为响应。AI看,AI听功能会在用户播放视频、音频时基于视频、音频内容进行分段总结,标记重点。为给用户提供智能化服务,百度网盘会在用户允许的情况下读取用户文件内容

6.3 度友公司不会公开或向第三方提供用户存储在百度网盘服务上的非公开内容,除非有下列情况:
6.3.1 经用户同意
6.3.2 有关法律、法规规定或百度网盘服务合法服务程序规定
6.3.3 在紧急情况下,为维护用户及公众的权益;
6.3.4 其他依法需要公开、编辑或透露个人信息的情况。

2024年9月阿里云盘图片泄露事件

这是本篇博客写到一半时发生的一次严重BUG事件,通过新建相册,并设定分类类型为图片,可以看到所有用户的图片,而且能以瀑布流的形式无限加载。值得一提的是,有些用户可能启用的云盘了相册同步功能,可能有些相册内并不想公开的图片也在意外中存在的泄露的可能。这从侧面也能透露出云服务本身潜在的微小不安全性。

当然对于大多数用户来说,可能并不会介意这种程度的隐私泄露和数据丢失风险,因为本质上是一个风险率与成本的权衡问题,在互联网洪流冲击和实名制冲击之下,我们所泄漏的隐私规模已经不可计数。

抛开隐私和私密数据不谈,还有的可能生产力需求为大容量的数据存储和共享,举个例子,我在本科四年期间,我个人产生的与学业相关的可以归档存储的直接数据超过了400GB,拍摄的旅行相关照片超过了300GB,手机日常拍摄的照片和视频120GB,用于视频剪辑和准备的一些素材300GB,除此之外,还不包括一些保存的数据、资源,外包的工程等等。研一期间,目前也直接产生了150GB的重要数据需要归档保存。

以上只是列举了一些重要的核心数据,也就是说,我已经存在了TB级别的常驻存储需要。因此我至少需要一个大容量机械硬盘来存储这些内容。我目前有一台笔记本和一个台式机,我可能会同时反复在两台设备间访问,那么我可以选择远控、远程传输、移动硬盘或者NAS。

NAS只是可能的一种选择而非唯一的最优选择。

另外,我购置NAS后也分出了若干个账户给我的父母,兄弟们使用,以帮助他们存储一些必要的文件,比如我父亲用来存储公司中的一些重要数据,资料和图片。我也分出了一个共享区域,用于存储家庭照片,家庭档案,各科的学习资料视频,试卷等等。这些均可随时随地查看。

除开核心的生产力需求,还有比如刚刚提到的,我有照片和视频接近500GB,如果我想要随时随地在我的各个电脑上查看,以及我自己的手机上查看,那么这是一个很好的选择。而且,不用为换机的照片数据问题而苦恼。

又如可能有娱乐需求,比如影音观看需要,读者可能会想要收藏一些认为比较优质的电影或者番剧,以便于日后欣赏,而这些内容可能在互联网上依赖于持续的会员。爱奇艺(电脑手机+电视)的全端会员是每年348元,腾讯视频348元,芒果388元,如果不在电视上观看,一般则只需要200元每年,如果自动续费,首年一般还会便宜20%-30%左右。对于奈飞,如果要4K观影,则港区价格是每月13.85美元,或者1080P观影每月11.3美元。这是一个持续的付费行为,即便你只是想要在不同的时间重复观看某一个电视剧,或者在未来的某个时间回顾。当然,你也可以选择在需要看的时候充值一个包月的会员。

此外还有部分电影电视剧可能在国内难以上映,例如奈飞的一系列网剧。而且,由于播放介质的问题,爱奇艺这些视频网站提供的片源即便是4K,1080P的,其码率可能也存在折扣,或者不支持7.1声道,不支持HDR等问题。甚至于还有广告问题。

以芒果TV为例,即便开启了会员,也无法解决这类暂停视频时出现的强制广告,视频内容甚至被缩到左下角。(我不确定是否是我会员的级别不够高,还未查证)

各个平台的会员价格

上图为新加坡的价格,偏贵了,港区的高级套餐价格只要108港币每年,最多4个用户。

除了影音这一主要娱乐需要,可能还有音乐,漫画,小说等等。

除了娱乐需要,可能还有数据的云同步(主要是手机的照片和视频)。如果读者有经常拍摄照片或者视频来记录生活的时候,如果有一个云空间可以自动上传同步所有的这些数据并保存下来,是非常有利于日后的使用,回顾和换机的。而且也不用为手机的容量问题而感到焦虑。也不用担心照片和视频随着手机的更换逐渐丢失,也不必因为备份到电脑或者硬盘里,存在手机上浏览查看不便的问题。

如果是家庭用户,则可能还有家庭视频的存储需要,以便在电视,手机等各种设备上查看,另外nas一般都支持多用户体系。又或者nas一般还支持监控相关的应用,可以作为更安全的家庭离线摄像头的存储载体。避免使用进入公网领域的在线摄像头。网上已有非常多的家庭在线摄像头导致的隐私泄露问题,包括但不限于一些私密的画面。

另外的,家庭用户如果有条件可能还会有家庭自动化的需求,例如使用类似于Home Assisant这类应用或者其他相关工具, 配套一些家庭智能终端,进行家庭智能家居的统一管理,类似于家庭智能中控。

3、纯娱乐需求:基本同上。

预警劝退章节

基本上,前文我只讨论了个人最高频的几个使用需求,我也认为也是最主要的几个场景:

完全私人化且可以随时访问的 数据备份/文件存储
95%
私有独享的影音视频中心
70%
手机(电脑)照片视频等文件的自动云备份
80%
智能家居中心
30%
其他
15%

其他的情况,我认为基本只占据日常使用的很小比例,所以我认为,如果甚至没有基本的大量数据存储多端访问的需求,并不推荐使用NAS设备。

那么除此之外,还有哪些人不适合使用NAS设备。

1、以上内容看了感觉理解费劲的人:以上不涉及任何技术内容,基本上只是一些场景需求的描述。所以基本上不存在门槛。

2、没有数据整理习惯的人:这类人如果在自己的电脑上都没法把数据整理的足够有序,高效的自索引,那么即便有大容量的存储,使用所整理的文件也是个很费劲的事情,总不可能完全依赖搜索功能。当然,这种情况有一个例外,就是如果只想要一个简单的云盘,主要需求是“音视频中心”和“手机照片视频备份”。

3、省钱是主要需求的人:有些人可能希望用NAS来代替网盘和视频会员达到省钱的目的,但我的结论是,节省的程度非常有限,甚至可能需要花费更多的钱。我没有测算我NAS的耗电量,根据网传数据,大约是休眠状态12W,四个硬盘装满待机功耗45W,算下来一年的基础电费消耗是12*24*365/1000*0.6=63.072元,假设还有间歇性使用,比如每天使用3小时,那么可能会达到100元每年。我使用的是功耗控制比较优秀的成品NAS,而我朋友自己从主板开始DIY了一个组装NAS,进行功耗控制后也在20-30W,一年的整体电费成本会在150元以上。如果选择了功耗比较大的设备,这个电费可能更高。虽然,比起家庭里的其他电器,例如空调,电灯,热水器等等,NAS的耗电量还是较低的。此外,NAS设备的购置开销从廉价品牌到大品牌价格基本在2000至6000元,全新机械硬盘开销基本在180元每TB左右,可以结合具体的市场价格。[该段给出的价格参考于2024年9月]

4、大多数中国家庭用户没有公网环境:这意味着可能无法实现随时随地的访问,如果没有开启IPV6,甚至NAS访问只能够在同一个WIFI下,如果您会启用IPV6,那么您至少可以在手机移动数据和其他支持IPV6的WIFI网络中访问您自己的NAS设备,或者只能使用内网穿透技术。假如读者不知道如何向运营商获取获取公网IPV4地址,知道如何启用公网IPV6地址,意味着您的那次设备基本上只能够在家里的WIFI下使用。虽然部分NAS设备的提供商可能会给予自带的内网穿透功能,帮助您异地访问,一般可能存在速度受限或安全问题。(本文会推荐一个内网穿透方案)

5、NAS设备具有使用门槛:NAS毕竟算是一台电脑或者服务器,根据功能复杂程度,其操作门槛较高,其控制界面涉及到大量的计算机术语,专业词汇,甚至涉及到大量的网络配置内容,遇到高级功能端,可能有命令行操作和Linux内容,基础较浅的用户可能需要大量的学习精力和学习成本。

综上所述,对基本情况有个了解后,明晰了各种需求和优缺点,可以开始根据个人情况进行NAS设备的选购。

网传搞笑真实文本

30岁了,不要再讨论什么 NAS, HTPC, OpenWrt 了。你摆弄一坨铁在家并不能给你带来任何实质性作用,朋友们兜里掏出一大把钱跟对象吃喝玩乐,你默默的在家里摆弄你的破主机。亲戚朋友吃饭问你收获了什么,你说我组了台 8 盘位的 All in One ,亲戚们懵逼了,你还在心里默默嘲笑他们,笑他们不懂你的电影刮削器,不懂你的 Auto Backup ,笑他们换个手机电脑手忙脚乱的到处传输旧数据,也笑他们看爱奇艺还要忍受会员专属广告。你父母的同事都在说自己的子女一年的收获,儿子买了个房,女儿买了个车,孩子订婚成家了,孙子会打酱油了,你的父母默默无言,说我的儿子装了个黑盒子,开起来嗡嗡响,家里电表还走得越来越快了。​

下图为NAS设备选择快速导引路线,半娱乐性质,不一定严谨,仅供参考

云存储选型

NAS设备的选择

NAS设备的选购一般包含两个部分:NAS本体和硬盘。

首先,根据读者的知识储备:具有较好的计算机使用知识的,可以使用经典NAS。计算机使用知识较低,基本上以使用手机电视为主的,或者不想折腾,想要简洁为主的,可以考虑使用现在新兴的国产轻NAS。极客水平的、出于极限成本控制或者爱折腾的,则可以考虑DIY组装NAS,并使用开源的NAS系统。

经典NAS基本上可以从:群晖、威联通、铁威马等品牌中进行选择,这三个品牌分别对应较好、良好、一般,也就意味着价格的高中低。通常来讲,不差钱的选群晖,性价比的选威联通,节省型的选铁威马。具体的品牌推荐和型号选择建议结合B站知乎。一般来说,会认为群晖的系统更好用、威联通其次,其他品牌则一般。当然不论好用与否,其系统本身的使用难度还是可能会高于一般的mac、windows这类电脑系统

经典NAS一般还有X86和ARM架构之分,X86一般普遍性能更强也更贵,当然可能也有特例。ARM则更省电。

轻NAS则视情况选择,最近(2024年)极空间好像势头正盛,但绿联云请谨慎选择,因为前不久刚发生了严重的安全事故,具体为用于传输加密的SSL根证书是公开的,且所有用户使用的是同一份,意味着传输加密形同虚设。

本文不重点介绍轻NAS,这类产品适合部分计算机基础较浅的用户,或者嫌麻烦的人,使用一个APP囊括了核心的几个文件存储,视频中心,文件分享,相册备份等功能。但大多数存在各种的局限性问题,而且由于功能性和易用性的不可能二角,必然导致许多功能的缺乏。另外,部分国产NAS还有各种要手机号登录等等之类的奇怪设置。但如果读者确实只在乎几个核心的功能,可以在B站,Youtube等平台有一定了解后选购。不过如果确实需要一个大容量存储,且娱乐需求占主要,就想方便地手机上备份备份照片,看看私人影视,又不想折腾的,确实可以考虑。

但是不论是轻NAS还是传统NAS,如果想要外网访问都需要解决网络问题。

硬盘的选择一般无外乎四种:纯固态(本文不涉及)、大容量家用机械硬盘(例如西数蓝盘)、大容量NAS专用机械硬盘(例如希捷酷狼、西数红盘)、大容量二手企业硬盘。

几种硬盘的区别,请自行了解,涉及到数据安全问题,我很难给出建议。但我可以说一下我的方案。

我花费2400元购置了一套X86架构四盘位威联通NAS,花费860元买了一个全新6T西数蓝盘,并在一年半后花费800元买了一个二手14T西数氦气企业盘。

选择威联通的原因是因为觉得群晖太贵,而且也自认为有技术基础(据说群晖系统更易用),不选择铁威马是也不想用太差,不选择DIY是为了省心不想太复杂。并非推荐!请结合自己需求!

选择二手企业硬盘是因为便宜,而且觉得仍然足够稳定。当然还是选择了比较可靠的二手店铺,以免拿到太垃圾的硬盘。

关于几类产品的对比可以参考本文开头的一个对比图

我个人更加推荐使用四盘位及以上的NAS,基本上算是一个预算和扩展性非常平衡的一个价格段,当然具体也要看自己的需求而定。

下面进入本文的重点部分——典型NAS设备的使用指南。

使用指南

外网访问实现

我的NAS布设于家中,而我在家里的时间一年也没有几天,因此外网访问对我来说是刚需,同时我的家人白天一般也都不在家里。

前文提到,传统的NAS,在当前国内的网络环境下(多重NAT环境),是不支持外网访问的,只能够在同一局域网内访问,即通俗来讲,只有在家里同一个WIFI下,或者连到同一个路由器,才能够访问。

一般来讲,有两个途径可以解决:1、IPV6。2、内网穿透3、还有一种找电信移动联通扯皮要公网IP地址(移动联通成功概率极低,电信很低)

通常我更加建议通过IPV6的形式进行解决。

IPV6的优点:可以跑满宽带,如果家用宽带下载1000M,上传500M,一般来讲基本上访问速度可以达到这个水平。

IPV6的缺点:IPV4网络无法访问,主要表现在部分学校、公司的网络,公共场所的WIFI,未启用IPV6的家用宽带。注意,手机移动数据一般均已支持IPV6。

启用IPV6

启用IPV6的核心在于从访问设备到被访问(NAS)的全链路都启用IPV6。

对于被访问设备来说,要复杂一点,必须得被分配到公网ipv6地址,例如电信公网ipv6的是240e开头,联通2408开头,移动2409开头。

例如我这个NAS设备的IP地址是以2409开头的,说明是移动的家庭宽带。

启用步骤,一般是先确保NAS设备支持IPV6(这个一般都近十年的产品都支持,如果是DIY的,注意系统和相关驱动),第二步确保NAS所连接的路由器或者光猫支持IPV6,如果NAS直连光猫,则可以进入光猫的界面开启相关的IPV6设置。

如果是路由器,则一般也有相应的启用开关。

路由器ipv6配置

对于被访问设备(NAS),必须获得公网IPV6地址,根据我的经验,一般建议把路由器或者光猫其中一个设备开启桥接模式,原因如下:

首先IPV6地址,一般由64位的全局前缀,和64位的接口ID组成。前64位一般是网络前缀,可以进行网络地址配置和划分,而后64位表示了一个主机的身份ID,是不能用于网络的地址划分的,由主机根据算法生成。

一般光猫会被分配到一个60位的IPV6前缀,例如240e:33d:128:cc50:/60,理论上还有四位可以最多划分出16个子网,但如果不会配置,或者普通的家用设备难以支持的话,光猫的下级路由器会被直接分配到一个64位前缀的网络地址,而连接到普通家用路由器下的设备是无法再获得完整的64位前缀,即无法获得IPV6地址了。因此最方便的方式就是直接把路由器改成桥接模式。

当然,也可以通过DHCP的方式构建二级路由,如下图所示,这个前缀是自己根据ipv6段的定义自行输入的。FC00::/7开头的前缀是本地单播地址保留前缀,类似于ipv4中的192.168.0.0/16。

dhcp后的ip地址

图中的ipv6就是一个通过DHCP分配的内网IPV6地址,同样可以访问外部的ipv6网络,但如果要访问这台内部设备,则可能需要额外进行一些网络映射等类似的操作。

总的来说,由于大多数路由器可能不支持一些较为高级的配置,或者需要进入一些更为复杂的终端操作控制台,最简单的方法还是要么路由器改桥接,要么光猫改桥接,由路由器拨号。有严格的防入侵安全需要的,再根据网络知识进行配置即可,思路一般就是,防火墙全开,暴露指定ipv6段,其他设备用NAT技术纳入内网,避免外部设备可以直接访问。

以我的实际场景举例:

网络拓扑关系:NAS设备布设在家里(本人目前仍为学生),网络为家庭宽带,入户光纤先连接了光猫,家里几个房间的墙面网关通过墙内走线集中到入户的网络柜(好像叫什么多媒体信息箱),然后连接到光猫上,有几台电脑和设备是通过墙面网关直接连到光猫上的。路由器也通过墙内走线连到光猫上,但路由器布设在客厅(家庭的物理中心点)。

解决方案:光猫开启IPV6,防火墙等级设置为低,路由器配置为桥接模式。

路由器配置为桥接模式

因为家里的网络还有我的父母在使用,而且受到家里已经存在的布线等因素的约束,我也不方便变更太多,或者说懒得改动太多(等以后有自己的house了可以再整一整)。而且如果把光猫改成桥接,又会影响到另外几个墙面网关的网络,所以基本只能把路由器改成桥接模式。

我的主要访问端网络为:

(1)手机移动数据:这个原生支持IPV6,没有关系。

(2)校园网:也原生支持IPV6,可以不管。我寝室的电脑就是直连的校园网。

(3)实验室工位的路由器WIFI:这个理论上也可以通过把路由器改成桥接模式解决,但是因为我们校园网是要登录账号的,这会导致实验室所有的设备连网都需要登录一个账号,包括电脑、手机等等。这理论上也没问题,我曾短暂改过一次桥接模式,但是实验室其他人反应用起来会不方便,电脑开关机、手机离开实验室再回来,都有可能触发登录页面。遂放弃。于是改成了DHCP的模式,通过NAT技术建立了一下内网,这样只需要路由器登录一个账号即可,而且路由器下是内网环境,理论上也更安全一些。内网的ipv6地址见上文的ipv6地址图

DDNS

DDNS,即Dynamic Domain Name Server,动态域名服务。是一种把设备的动态IP地址映射到一个固定的域名解析服务上的技术,因为我们不可能记忆一长串的IPV6地址,然后通过这个地址去访问设备,更别说这个IPV6地址可能是会变的。

我推荐自行在腾讯云、阿里云、百度云等运行商处购置域名,然后通过官方提供的API实现动态域名服务。

购置域名可以在网上自行搜索教程,或者跟随云服务厂商官网的指引。这里注意,国内云服务厂商的域名必须要经过备案才能正常使用!最好还是建议备案,或者也可以使用国外的一些域名注册平台,并使用cloudflare提供解析服务,但国内使用微小概率被屏蔽,如果提供非法服务则必定被屏蔽。特别的,有些云服务厂商域名备案可能需要你购买服务器才能备案!此时可以考虑短期买个一个月的。

购买服务器并备案后,设置好A记录(IPV4记录)或者AAAA记录(IPV6记录),等待几分钟后即可通过ping测试检查是否可以访问。例如在命令行输入ping命令,可以得到:

$ ping www.luheqiu.com

正在 Ping www.luheqiu.com.w.kunlungr.com [220.181.167.102] 具有 32 字节的数据:
来自 220.181.167.102 的回复: 字节=32 时间=9ms TTL=53
来自 220.181.167.102 的回复: 字节=32 时间=4ms TTL=53
来自 220.181.167.102 的回复: 字节=32 时间=5ms TTL=53
来自 220.181.167.102 的回复: 字节=32 时间=6ms TTL=53

其中出现的IP地址,是你理论上设置的A或AAAA记录。(我这里配置了CDN,所以会稍有不同)

以上基本完成了DNS的设置,但是由于IP地址会变,也不可能经常去云服务厂商的系统里设置,所以需要引入DDNS。

(群晖系统内已经支持了阿里云的DDNS设置,但其他NAS系统可能不支持,反正我用的威联通不支持,所以得自己弄)

之前我是使用docker hub内有人写好的镜像:https://hub.docker.com/r/darthminion/aliddns,后来由于镜像出过问题,以及感觉这么一个小事,还要起一个docker太占用资源,于是我专门写了sh脚本,并且挂到linux下的定时任务里。(是的,群晖直接支持配置定时任务,而威联通需要ssh登录linux系统,然后vim /etc/config/crontab)我这些脚本大多数是参考了网上的案例,并结合GPT模型完成的。

阿里云的DNS解析相关API: https://help.aliyun.com/zh/dns/api-alidns-2015-01-09-updatedomainrecord

其他云服务厂商一般也有相应的API,对应编写即可,也可以利用CHATGPT等大模型进行编写。将更新ddns的脚本命名为例如aliyun_ddns.sh后放在合适的目录内,例如我放在了 /share/systemfile/tools/ddns/ 目录下。

然后通过ssh登录到nas系统后台,把定时任务加入到linux的crontab文件内即可,例如:

ssh username@192.168.123.123  # 登录linux后台示例
echo "0 * * * * /share/CACHEDEV1_DATA/systemfile/tools/ddns/aliyun_ddns.sh" >> /etc/config/crontab # 添加定时任务

上图就设定了会在每小时的第0分钟自动运行aliyun_ddns.sh脚本。但是更推荐的方式,是使用vim等工具编辑,因为echo的方式只能追加,不能编辑修改,不适合需要改动这个自动运行任务的场景。

这里不使用crontab -e的原因是,通过这种方式编辑的内容,据说会在威联通重启是复原。(未验证)

编辑完成后重启cron服务以应用变更。

sudo crontab /etc/config/crontab
sudo /etc/init.d/crond.sh restart

SSL

SSL(Secure Socket Layer)安全套接层是在传输通信协议(TCP/IP)上实现的一种安全协议,可以保护通过网络传输的信息内容不被任何第三方获知。例如我查看我家NAS设备上的某一张图片,如果通过SSL安全协议访问,中间的任何人,比如网络运营商(电信移动)、路由器持有者、校园网管理员都是无法获知内容的。

因此如果你不是只需要在家里的WIFI环境内使用的话,SSL是保障NAS数据安全的重要一环。这也是我不推荐使用一些传统NAS或者轻NAS提供的域名服务的原因,虽然他们可能很方便的让你以一个比较低的网络限速实现了外网访问,但其实不是特别安全。例如绿联云的SSL证书共用事件。

当然,这种程度的不安全性其实也没那么严重,至少比不用SSL要好一些。

我之前是使用阿里云提供的证书服务,个人免费版一年可以申请二十张,每张有效期一年,基本绰绰有余了,但是后来免费证书的有效期统一改为了三个月,这就很麻烦了,我不可能每两个多月去更新一遍,于是我换成了Let’s Encrypt这家全球基本上最权威的公益性证书颁发机构提供的SSL证书。并且Let’s Encrypt提供了自动化的证书申请程序,比较方便。

Let’s Encrypt支持使用ACME客户端实现证书的申请和续签,可以在Let’s Encrypt的官网中看到支持的 acme客户端

我比较推荐的有Bash语言写的 acme.sh,和Go语言写的 Lego。我两个都安装了一下,后来感觉Lego比较方便一些。

这两个都可以不需要安装过程,acme.sh可以直接下载脚本上传到nas系统内,Lego可以下载对应的二进制文件,无需环境可以直接运行。

如果你使用的群晖、威联通这类NAS系统,也可以通过系统内的第三方 APP Center 下载。(群晖和威联通内好像也有内置的Let’s Encrypt证书申请服务,不过不一定支持自动续签,以及不一定方便进行域名所有权的DNS验证,可以先试试系统内置的服务。不过威联通的这个功能国内地区不支持,乐)

首先使用Lego申请一张证书,参照Lego的教程填入你DNS运营商的ACCESS_KEY和SECRET_KEY,以及你使用的dns运营商名称(我这里是alidns)、email、域名和证书存放地址,Lego基本已经支持了大部分的云服务运营商。

# Or, using credentials
ALICLOUD_ACCESS_KEY= XXXX \
ALICLOUD_SECRET_KEY= XXXX \
lego --email you@example.com --dns alidns --domains my.example.org --path /share/systemfile/tools/ssl_acme/lego run

申请完成基础的证书后,后面只需要运行续签程序即可,例如下述命令实现了若距离到期不足30天则续签。

# Or, using credentials
ALICLOUD_ACCESS_KEY= XXXX \
ALICLOUD_SECRET_KEY= XXXX  \
lego --email you@example.com --dns alidns --domains my.example.org --path /share/systemfile/tools/ssl_acme/lego renew --days 30

以上为示例调用,情根据自己的情况填写相关参数。

我一般是先试用run命令完成证书的申请,然后之后都使用自动续签的shell脚本,同样把脚本放入crontab作为定时任务即可。

以下为自动续签并在威联通系统中应用证书的shell脚本,不同系统的应用过程可能会有细微差异。

#!/bin/bash

# SSL配置项
# 日志输出文件
LOG_FILE="/share/systemfile/tools/ssl_acme/ssl_update.log"
# 证书存放路径
CERT_FILE="/share/systemfile/tools/ssl_acme/lego"
ALICLOUD_ACCESS_KEY="example"
ALICLOUD_SECRET_KEY="example2"
EMAIL="me@example.com"
DOMAIN="example.com"

# 定义一个函数来输出日志
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}

log "开始更新 SSL 证书"

# 将 lego 命令的输出保存到变量中
lego_output=$(ALICLOUD_ACCESS_KEY="$ALICLOUD_ACCESS_KEY" \
ALICLOUD_SECRET_KEY="$ALICLOUD_SECRET_KEY" \
lego --accept-tos --email "$EMAIL" --dns alidns --domains "$DOMAIN" --path "$CERT_FILE" renew --days 30)

# 输出 lego 命令的结果
log "$lego_output"

# 威联通证书应用逻辑
# 将证书文件拷贝到/etc/stunnel目录下,需要admin权限
cp ${CERT_FILE}/certificates/${DOMAIN}.crt /etc/stunnel/backup.cert
cp ${CERT_FILE}/certificates/${DOMAIN}.key /etc/stunnel/backup.key
log "复制证书成功"
    
log "重启服务"
# 将证书文件拼接放入 /etc/stunnel/stunnel.pem 并重启服务,需要admin权限
cat /etc/stunnel/backup.cert /etc/stunnel/backup.key > /etc/stunnel/stunnel.pem
/etc/init.d/stunnel.sh restart
/etc/init.d/Qthttpd.sh restart
log "重启服务成功"
    
log "SSL 证书更新脚本执行完毕"

由于威联通(qnap)的默认证书存储位置是 /etc/stunnel/,其中backup.cert 和 backup.key 是原始证书和私钥的备份,stunnel.pem是证书和私钥二合一的证书,由cert和key的数据拼接生成。(Lego获取到的证书默认后缀分别是crt,和key,这个crt和cert是一样的,没有关系,我这里复制时直接变更了一下后缀)

这里需要复制到对应地方然后重启相关服务才可以正常应用新的证书。

这里还有一份判断lego运行结果后,决定是否执行证书拷贝并重启服务的版本,可以避免每次检查SSL更新,都要重新应用一下,而只需要在发现SSL成功续签需要变更的时候再执行拷贝和重启服务的逻辑。

同样的,把定时任务加入到crontab中。

8 3 * * * /share/CACHEDEV1_DATA/systemfile/tools/ssl_acme/ssl_update.sh

然后重启相关服务。

sudo crontab /etc/config/crontab
sudo /etc/init.d/crond.sh restart

第三方APP Center

第三方APP Center可以提供一些方便的应用安装服务。

我的许多程序都是通过这种方式下载的,比较方便,比如Alist、Lego、Nginx等。

这是一些常用的源,读者也可以自行网上寻找比较可信的软件源。(这主要是因为威联通和群晖系统的限制,如果使用基于比较完整的linux的开源NAS系统,可能可以使用apt等方式)

https://www.myqnap.org/repo.xml      # 威联通 社区源 1
https://www.qnapclub.eu/en/repo.xml  # 威联通 社区源 2

https://packages.synocommunity.com/  # 群晖 synocommunity社区 源
https://spk7.imnks.com/              # 群晖 我不是矿神 源

照片管理-云相册

我尝试了威联通自带的PhotoStation、QuMagic,还有Google开发的PhotoPrism,还有国外的一些Immich等等。还有一些轻NAS的云相册软件,我最后觉得体验效果最好的是 MT Photo

最开始我使用的是威联通的自带相册,但真的UI极丑无比,体验也不好,多相册功能很有缺陷,很多功能都不支持,只能说真的当一个普通相册来用。后来看了一些各种开源的方案,感觉也只是差强人意。后来看到PhotoPrism真的很不错,但是又没有移动端。最后我看到MT Photo,感觉是最适合我的方案。

主要原因如下:

  • ★★★★★ 多端支持、国人开发(适合国人使用习惯)、同时支持图片和视频(格式齐全,基本上我目前碰到的都没有问题)、支持RAW格式
  • ★★★★★ 支持文件夹、支持图库(每个相册可以链接到多个路径)
  • ★★★★★ 支持多用户、权限管理
  • ★★★★☆ 支持时间线、支持GPS信息、支持地图总览
  • ★★★★☆ 支持人脸识别、图片场景识别(实现以文搜图、图片OCR搜图)
  • ★★★☆☆ 支持Live、分享、影集
  • ★☆☆☆☆ 支持自动备份自动上传

除了上述主要功能,MT Photo在各方面的优化上做的都非常到位,比如RAW和JPG会自动合并(有RAW+JPG的标记),影集基于硬链接、支持去重,地图基于高德地图,对国内更友好,支持非常好的CLIP场景识别(这部分是开源的),也很注重隐私。

不过这个MT Photo目前是收费的,月订阅3元,年订阅25元,永久99元。按官方的回复,默认激活方式服务端一周至少需要联网验证一次,但是订阅码可以多机器使用。离线激活的方式可以不需要联网,但订阅将绑定机器,无法再更换别的机器使用。只要还有用户在使用,不会关闭联网验证服务器,如果联网验证服务器要关,会提前把联网验证机制关闭。订阅到期会部分功能受限。

有些人可能会顾虑同样的隐私问题,不如会不会有程序后门之类的,这种情况那就考虑全套开源程序的方案吧。理论上也最好使用开源的NAS系统。

比如我前文所述的 immich 就是一个不错的方案,目前(20240930)社区非常活跃,三天两头更新,同样支持与MT-Photo的大部分功能。

(我有时间可能会上手用一下immich试试,毕竟我还是喜欢开源产品的)

MT-Photo可以在后台设置人脸识别API、高德地图API和智能识别API,分别负责人脸识别分类、地图显示、以及实现基于CLIP和OCR的以文搜图。

大部分设置官方教程已经很详细,这里阐述一下我的方案。

因为智能识别API需要调用CPU或者GPU算力,所以所以我没有把这个服务部署在我的NAS上,而是部署在我的主力台式机上,我这台主力台式机也是7×24小时开机的。

我使用的是基于python打包好的exe程序,但是在运行的时候会存在cmd黑框,不是很好看,而且也不能缩小到任务栏,同时也不没法实现开机自启,所以这里我使用了nssm工具,这个工具可以把任意的exe程序注册为windows的系统服务,从而实现无感的后台自动永驻和开机自启。

nssm工具下载官网:https://nssm.cc/

nssm工具官网已经提供非常详尽的使用方法:https://nssm.cc/usage

以我的方案为例,调用nssm的install命令开始注册自定义名称为mt_photo_ai的系统服务。

nssm.exe install mt_photo_ai

然后在弹出的安装GUI中,填入目标exe程序的路径,我这里是 D:\Application\MT_Photos_AI\mt-photos-ai-server.exe

最后安装服务即可,同时调用命令或者在任务管理器中启用服务。

该命令需要在管理员模式的终端中运行。

net start mt_photo_ai

或者也可以在任务管理器中启用。

最后参考官方文档在MT-Photo的后台填入对应的API即可。(我今天突然发现官方文档上更新了nssm工具的推荐,我记得我当初还没有来着hh)

如果换用了其他的模型也大同小异,我认为这种分端部署的方案,更适合NAS的应用场景,即让NAS做好最基本的事:存储和提供访问服务。

SSL启用问题

我测试发现威联通的反向代理的SSL加密似乎不被MT-Photo识别,导致不能用,因此我这里是使用了Nginx将MT-Photo服务反向代理到Docker的端口上的。

Nginx使用AppCenter下载的,并且用命令行进行了部署。

备份、同步和访问

手机到NAS的同步

我上文没有认为MT-Photo的备份功能有多重要的原因是因为,我使用的是威联通官方软件Qfile Pro提供的文件自动备份服务,可以设置备份的源目录、目标目录,支持过滤,支持单向和双向同步,支持设定同步周期,支持充电自动启动同步服务等等,我认为官方提供的服务已经非常方便合适了,也足够无感。

电脑到NAS的同步

同理,使用了官方提供的Qsync,可以将本地文件夹与NAS文件夹实现类似于OneDrive的映射功能,同时支持在资源管理器内显示同步状态。但是这个我其实很少使用,我一般直接使用smb功能把整个NAS存储映射到本地。

关于使用RAID “实现” 数据安全备份

通常来讲,我不推荐在家庭场景下的NAS上使用RAID功能,唯一的原因是大多数想用RAID的人其实并不了解RAID。

首先本场景是一般家用场景。大多数用户想用RAID的原因可能是:如果某一块硬盘坏了,那么使用了RAID则我可以“无痛”更换这个硬盘,从而实现数据安全。

但是实际上,RAID诞生之初,是为了提升存储的性能,即通过形成磁盘阵列来提升访问性能,类似于显卡阵列。在早期,磁盘性能孱弱,容量小,访问速度慢,通过多个性能较弱的磁盘组成阵列后可以获得数倍的容量或者数倍的访问速度。比如把4个硬盘,组合成一个超大容量的虚拟硬盘。这也就是RAID各个类型之间的差异,大多是在容量和速度之间的权衡。同时,RAID还需允许在阵列中设计“冗余”,即一件事本来两个硬盘干的,我现在三个硬盘干,如果一个硬盘掉线了(坏掉了),还是正常工作。

以上就是RAID5的一般机制,综合了RAID0和RAID1,也是号称兼顾了存储性能、数据安全和存储成本等各方面因素,是目前综合性能最佳的数据保护解决方案。其主要用途是保障数据服务的连续性,同时配合各种高可用技术,可以在发生硬盘出错后,结合已有的备份体系,进行RAID修复,同时在修复时仍可以提供持续的服务。同时企业有多台内存设备,可以在修复RAID时提供更好的保障,例如本来就有备份机可以作为镜像,即便修复失败也能保障运行等等。

但是问题在于,一般家庭用户不具备这种级别的企业级维护经验,同时误认为用了就是安全,结果在发现出错后,尝试修复,但是每次修复过程,动辄上百小时(一块16T的硬盘,按100MB/s读取速度算,单纯读一遍全盘就需要接近46小时,更别提还要读写修复)。在修复过程中如果出现意外可能导致数据全部丢失。实际上,我们并不需要热修复,而且修复的安全性远不如备份。

我更推荐的方案是:一台四盘位NAS,全部单盘使用,同时可以随用随加。一开始先买两个硬盘,用得差不多了再加。同时某一块硬盘不使用的时候,可以自动休眠。(使用了RAID后将无法使用硬盘休眠功能)此外,即便某个硬盘真的坏了,其实仍然可以读取数据。使用过程中多注意S.M.A.R.T.信息,发生告警,及时购置新硬盘并导出数据。再不济,彻底坏了,单盘存储也是最方便维修人员进行数据恢复的。如果使用单盘存储,NAS多会使用ext4文件系统,此时还有R-studio出品的 R-Linux 免费数据修复工具可以使用。相比之下,RAID硬盘的恢复难度要高很多。

如果对于数据有安全需求,更推荐多盘备份,NAS系统内本身已经提供了多硬盘、多设备之间的数据自动备份功能。同时也可以自行根据安全等级设定备份份数,最重要的,备四份,次重要的三份,而一些不太重要的,可以不备份,比如下载的影视剧等。

构建3-2-1备份策略

以我使用的威联通为例,官方提供了HBS3工具构建3-2-1备份策略。即三份副本、两种存储介质、其中一个为异地备份。一般家庭用户可以不用考虑到这种程度,但至少可以做到两份副本或者三份副本。

通过HBS可以创建多重类型的备份任务或者同步任务。备份任务为定时进行,同步任务为实时同步。

备份和同步作业均可以在本地NAS的各个文件夹之间,也可以在各个硬盘之间,甚至可以是本地NAS和另一台NAS、或者本地NAS和服务器之间进行备份,助力实现多种规格的数据安全备份策略。

同时可以设定作业计划,比如每周进行、每月进行等等,还可以启用数据完整性校验保证数据一致性,还有版本管理等功能,同时可以导出备份日志,设定过滤策略等等。

因此,建议使用这种方案进行数据安全性的保障,而非只依赖RAID。

多端访问

手机端可以使用官方自带的Qfile Pro,已经足够好用。开源系统也有响应的访问方案,再不济也可以有NasCab等工具访问,还算不错。

电脑端,可以使用SMB、NFS这类协议把存储映射到本地。

WEB端,可以直接登录管理后台进行访问。

云笔记 & MinIO对象存储

(20241113更新)

之前一直用flowus作为云笔记,后面感觉内容不本地化存储,而且网络不好打开会很卡等等,打算找一款本地存储又可以多端同步的云笔记,后面选择了思源笔记。

另外,我之前有些信息是存储在华为自带的备忘录里进行云同步的,结果前段时间(20241107)手机从床上摔下去,高度大约一米八多,结果手机摔坏了,屏幕直接绿屏,现在已经送去修了。我之前这部手机是华为mate30pro,其实一直想换机了,但是由于华为新出的手机一直不太符合我的期望,所以一直没换,这次换了小米试试,但是有些内容没发同步,而且从web端登录,无法访问华为备忘录的一些加密内容。

思源笔记可以依赖s3或者webdav协议进行笔记同步,根据我自己使用webdav一直觉得稳定性和速度较差,加上思源社区也表示S3协议的可靠性和稳定性远远优于WEBDAV。所以首先需要在NAS上搭建一个基于S3协议的存储服务。我这里计划使用MinIO

MinIO也是我很久以前就记录在todo里的一个工具,不会没有使用需要和场景,从来没有去研究过。minio是一款开源的高性能数据基础设施软件,也是一个兼容S3协议的对象存储系统服务。

一般可以软件部署或者docker部署,我的nas上已经安装了软件源,所以就直接安装软件不使用docker了。

我这里默认的登录凭据为admin password(建议修改哦)。因为我这里是本地安装,所以需要去安装的地方找一找配置文件。

cd /share/CACHEDEV1_DATA/.qpkg/MinioServer

然后输出一下ls命令可以看到三个文件,基本上应该在MinioServer.sh脚本内,使用cat命令输出后确实看到了相关的配置,进行一下修改即可。(注意,这里面还可以修改一些端口的配置,比如console的端口和api的端口,具体可见下文)

如果使用docker安装,则可以在docker的运行参数中设定,要更为方便一些。例如下面这段docker-compose.yml代码。当然,我没有测试过。

version: '3.7'
services:
  minio:
    image: minio/minio:latest
    command: server /data --console-address=":9001" --address=":9000"
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - minio:/data
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=123456
volumes:

  minio:

然后就是像所有的对象存储一样,建立一下存储桶以及access key。

然后可以在思源笔记中填入MinIO的S3协议相关访问配置。

在准备将相关配置填入到思源笔记的共享文档中时,发现缺少api的相关url,于是重新修改MinioServer.sh文件,补充上api接口的端口配置,例如下面这段代码。(顺便吐槽一下,不找教程直接干是这样的,还不如直接docker配置呢)

./minio server $WebShare/Minio --console-address ":9011" --address ":9012"

按照惯例,也把这两个端口也挂到nginx的ssl下,这样可以通过ssl安全访问。nginx的配置建议参考MinIO的官方文档(Nginx服务器反向代理MinIO配置

最后把所有信息全部填入到思源笔记的云同步中即可,就是问题来了,这个bucket有什么用,我看下面似乎又可以选不同的bucket?有点搞不懂。我有点怀疑是不是bug,理论上是设置bucket下的文件夹用的。又或者它是给webdav用的?但是这样的话完全没必要显示在s3这里哇。

影音中心

EMBY、Jellyfin

更新中…请稍后….

影视数据刮削 – 海报墙

网盘管理工具 Alist

更新中…请稍后….

资源辅助工具

音乐中心——音流

更新中…请稍后….

其他推荐

BT、PT工具

你都玩BT、PT了,还需要介绍?

笔记工具

Blossom

漫画

可达阅读器、Koodo Reader、Komga

密码管理器 Bitwarden

(20241116更新)

Bitwarden是一个开源的密码管理工具,支持自己部署服务端,所有内容采用端到端加密。并结合Bitwarden提供的多平台的客户端工具,实现跨平台的密码管理,从而不再让自己的所有账号都用一个密码,或者全部依赖于备忘录,或者Chrome的密码自动填充。(当然,现在的ios、安卓机子也有自带的密码库,只是不能跨平台用)

还是前段时间手机摔坏了,换了个品牌的手机,这次打算试试这个软件。不过看了一下github,据说自部署的开销比较大(根据github页面描述:The server project is written in C# using .NET Core with ASP.NET Core. The database is written in T-SQL/SQL Server.)。

然后Bitwarden的Server有一个api兼容的轻量级实现,叫Vaultwarden,原名Bitwarden_rs。(甚至是用rust写的,乐),然后默认使用SQLite,也在github开源了。

所以打算试试,这个看起来比较复杂了,软件源上也没有打包好的单体程序,所以打算用docker安装,根据github页面上的Usage,可以使用docker compose安装。

(本来都不想用docker的….因为现在是真没有docker镜像能用)下面是我在qnap的docker上使用的compose安装配置。

version: '3'

services:
  vaultwarden:
    image:  vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://bit.example.com"
      SIGNUPS_ALLOWED: false
    volumes:
      - /share/vaultwarden/data/:/data/
    ports:
      - 8080:80

然后按照Github所给出的教程加上Nginx的反向代理配置并支持上SSL。

然后就可以顺利的启动我们的密码管理库了。

创建完自己的账户后,我到compose配置里把SIGNUPS_ALLOWED环境变量改为false以阻止其他人注册。

最后可以在Vaultwarden的web内进行一些配置,也可以在手机上安装bitwarden客户端连接自己部署的Vaultwarden服务。

题外话一下,这个Bitwarden还怪优雅的。UI美观,动画不错,支持自动填充、生物识别解锁、自动锁定、还可以配置两步登录(比如常见的电子邮件验证码、短信验证码),甚至还有神奇的端到端加密短信传输、文件传输。支持的平台也是真的多,Android、ios、mac、windows、linux、包括chrome、edge、Firefox、safari、duckduckgo等等在内的一堆浏览器插件。

智能家居 Home Assistant

在我买房之前就先不更新这块了

评论

  1. darkarc
    2 月前
    2024-9-30 18:50:54

    tq,tql,讲的太清晰了,沙发

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇