用最简单的语言解释NAS一些基本原理

随便写点原理介绍,不涉及具体操作和NAS架设方式

1、NAS是啥?
一块或几块硬盘,装在一台能联网能装系统的设备里(该设备可以是电脑主机,服务器,路由器,甚至一台能刷系统的示波器都行),并通过一系列设置使得用户可以从外网访问搭载在已联网设备的硬盘里的资源。

2、要装什么系统?
一般来讲对于NAS,我们总是需要需要远程操控,因此给服务器端准备的系统是最合适的,也就是linux的各种发行版本,Ubuntu/debian/centOS/openwrt(包括群晖那个系统其实也是linux核心的),当然也可以装windows server

3、为什么要装这些系统?
有了系统你才可以有网卡驱动,才能联网,才能安装并开启各种服务(nfsd,sshd,samba,vsftpd,httpd,…. 还有其他的譬如nextcloud什么的)

4、这些服务是干嘛的?
实现外部连接、应用程序、资源访问、防火墙等等,在终端里用命令打开服务就行。
另外像是各种参数设置一般是有一个config或json什么的文件直接改里面的内容。对,也就是群晖给了一个网页让你可以改的那些乱七八糟的参数,其实都写在一个文件里,给你特意写一个网页是怕你不会打命令行而不是必须要这网页。

5、端口是个什么玩意儿?
各种网络服务(第3问括号里那些),你可以当它们是摆在仓库里的货物,你从外面进仓库想拿什么东西,报货物名没用,仓库管理员记不住那么多名字,他只记住了货架上的编号。因此你要自己记住某个货物放在哪个货架上,取货的时候跟仓管报货架号码,仓管就能给你取来货物。
这个货架编号就是端口号码,整个装网络服务的仓库有65536个货架,因此你可以把这些服务随便挑一个货架放,也就是自己设定端口号。在通过外网访问nas的时候你报出端口号,系统就会给你提供相应的服务。

6、什么80,443,21这些经常听到的端口号怎么回事,为啥听说网络服务商封掉了这些端口所以没法外网连接?
有某几项服务特别常用,常用到不懂网络的普通人也要经常用,譬如网页http访问。那么他们不懂需要跟仓管报货架号(访问网络服务需要端口号)怎么办?
没关系,仓库有几个不同的门,每个门口摆了一个特别的货架,进门的都知道直接拿这个货架就行。这些特别货架的编号就是那些你经常听到的端口号,譬如80,443,21…,仓库的这些门叫做访问协议,譬如http,https,ftp。
然后仓库拥有者(也就是服务器端)可以把相关的服务放到对应的货架上,这样访问者和仓管都省心。(注意这里是“可以放”而不是“必须放”,也就是服务器端完全可以选择把这些服务放到其他货架也就是设置其他端口)
而ISP封端口是因为我国政策决定了网络服务商需要受监管,也就是http和https这两项服务在不经过报备的情况下是不允许被摆出来的。因此ISP的做法是把几个特别货架都收走,仓库主必须交钱备案才给你用这几个货架。
但聪明人已经看出来了,ISP只收走了个位数的货架,我不是还有6万多个货架能用吗?我换个货架摆,然后事先告诉走那几个门来我仓库取货的人你们去另外的货架取服务不就完了?
没错,ISP的技术防范手段属于防君子不防小人,防小白不防技术宅。因此遇到这样不知好歹硬要摆网页访问服务的仓库主,ISP就用上行政手段了:给你整个仓库封了里面出不来外面进不去(断网),想连回去就上营业厅反省跪舔去吧.

7、政策禁止了未经报备的网络服务跟我用NAS有什么关系吗?我总不能自家装个nas还要去找电信联通甚至网络主管部门备案吧?
不用担心,政策只是禁止了http和https,ISP也只封了个位数的端口,因此你详细了解政策后别作死开网站一般就不会有人来管你。NAS服务只是从外网访问内网的资源,理论上可以不需要涉及http和https访问,所以尽可以大胆地用。
况且就算你因为一些原因必须对外网开放http服务,譬如云端BT或自家NAS的门户设置,只要给访问加上密码,别公开IP或域名保证只有你自己用,ISP一般也懒的来管你(当然这属于ISP选择性执法,理论上他们依然可以因为你开启http来封你,风险自负)

8、DDNS是什么?端口转发是怎么回事?内网外网IP又是啥?
DDNS是动态域名系统,域名就是各种你耳熟能详的网站地址,weibo.com什么的。域名是用来方便访问网站的,因为真实的网站地址是一串数字(IP)太难记了,因此网站主会找家域名商给自家IP绑一个域名,这样外人访问的时候可以用域名而不是真实IP。
这时候你会问,那我自己架的NAS我自己当然记得住真实IP是不是不用绑域名了?没错完全正确,但这里面涉及到了另外一个问题,那就是ISP对于个人家庭用户,它并不会给你一个固定的IP,而是在一个范围内随机选择,这样就导致你想访问自家的NAS的真实IP变得非常麻烦
那这时候就要用到动态域名系统DDNS了。这个系统的原理是你先找一家ddns服务商,让自家nas跟ddns商注册关联一下,获得一个ddns域名,并使得每次变动IP都会在ddns商那里实时更新IP信息,那么从外网访问这个域名时就能保证总是能正确访问到真实地址了。
注意:从外网找到真实地址并访问只是第一步,也就是前几问例子里找到了仓库的地点。具体你要用什么服务还是需要报端口号。(至于为什么浏览器输网址直接就跳网页不需要输端口号是因为浏览器已经默认你会访问80或443端口,你当然也可以改访问其他端口)

而找到真实IP地址并不等于能直接报端口号找服务了,因为一个真实IP,或者叫公网IP,里面并不只有一台设备,而是一整个局域网,通过网关接入互联网。因此你需要在网关设置好从外部访问某个公网IP的端口时,连接着内网哪个IP的哪个服务端口。这就是端口转发。
这里有几个很容易混淆的点我重点啰嗦几句:
首先,端口转发跟服务器端的服务端口设置,这两点是不一样的。端口转发是在网关部分设置的,将来自外网的端口请求,转换成对于某个内网IP上的服务端口请求。(内网IP是指类似192.168.1.2这样的内网IP地址,这地址仅供局域网内的其他用户访问)
而服务器端的端口设置则是你监听的来自服务器端以外的端口服务请求。
然后,网关(一般是路由器)设置的端口转发跟服务器端设置的端口号需要【对应】但不必【相同】。
举例说明:我在NAS上开启了SSH连接服务,SSH的默认端口是22,我在服务器端可以通过命令将这个22端口修改成其他的,譬如10022,或者不改。
这时候你从外网尝试通过ssh连接公网IP的10022端口是连不上服务器端的,因为你还没有设置端口转发。我需要在网关上把公网IP的10022端口转发到[NASIP地址,如192.168.1.50]的10022端口,才能完成外网访问。
而这个在网关处设置的端口转发,是【不需要】跟内网服务端口相同,也就是我完全可以这么设置,将公网IP的20022端口转发到[NASIP地址]的10022端口,这时候从外网访问20022这个端口时,就是访问的内网NAS的10022端口,也就是可以正常连接SSH
同样的,你内网服务端口保持22不变,网关端口转发设置10022转内网IP端口22,一样可以达成效果。

如果你看懂了上面这一大段啰嗦应该能看出来,作为应对ISP封端口的方法,其实在网关处设置一下转发就行了,并不需要改内网的服务端口。事实也确实是我们对于端口的设置都是集中在网关的端口转发而不是直接改内网端口。
至于何时会需要改内网端口,一般是在出现端口号冲突的情况下,譬如你有两台NAS连在同一个内网,那必然要把其中的一个的服务端口改成别的,因为一个公网IP端口只能对应一个内网IP端口

而有时候,你会发现这样的问题:我在网关处获得的“公网ip”跟我用公网查询网站查出来的ip地址不一样,也没法通过其中任何一个从外网访问内网。
这是因为ISP并没有给你分配一个公网地址,你的“网关”本质上还是在一个大局域网里,你通过查询网站查出来的是大局域网的网关出口IP。
这个就需要你联系ISP给你一个公网IP。固定的IP往往只给交了大钱备过案的企业用户,个人家庭用户一般只能要来一个动态IP段。当然这也够用了,毕竟有DDNS。
但即使是动态IP段,也不是每个地区每个ISP都会爽快给你的,我自己所在的地区联通我打个电话就给我开了,但是像上海电信的很多个人用户可能打了电话也不理你,具体操作根据地区和ISP的具体情况进行参考。

在遇上ISP连动态IP都不给开的情况下,也不是没有办法。我们可以通过一台有公网IP的中间服务器达成内网穿透。
这个操作的简单原理是:内网服务器跟中间服务器约定好,当有来自外部的访问请求时,中间服务器发一个【不受网关限制】的请求包到内网服务器(像是uPnP什么的可以自己查),内网收到请求后【主动】与中间服务器建立通讯,使得来自外部【受网关限制】的访问可以达到内网服务器。
群晖老哥念念不忘的QuickConnect就是轮流使用了上面的原理:先看是不是内网,不是内网再看是不是固定IP,没固定IP就DDNS,DDNS还不行就中间服务器反代。