Duke Yin
Duke Yin
2022年4月14日

自从有了NAS之后,从外部访问家里或公司的NAS成了刚需。

想象一下从全球任何一个有互联网的角落都可以毫无障碍满速直接读写家里几十个T的内容,也是一件美事,你不仅可以跟吝啬的各大公共网盘说再见,甚至还能搭建一些很cool的服务,供自己和家人使用。

IP – 设备的地址

从外部访问我们家里的设备,需要知道这个设备的“地址”,类似于你寄快递,得知道收件人的地址,这就是IP地址的作用,它明确了互联网设备的位置。

例如 220.181.38.148 是一个IP地址,由4组数字构成,每组数字可以从1到255变化,从而供大量的设备各自独立身份。

计算 2554理论上可以变化出4228250625个,也就是大概42.28亿个IP地址可供分配给全球的各种设备使用,但是因为有一些IP地址段需要保留给广播、环回、组播等特殊用途,实际上可用的IP地址是25亿个左右,分配给中国的可用IP地址数量大概是3.3亿。

理想状态下,每一个接入互联网的设备都应该各自有一个明确的、独立的IP地址,方便其他设备进行访问,不论是一个微波炉、一个灯泡还是一个智能马桶,只要它接入了互联网,它都有资格拥有一个自己的IP地址。

IPv4的窘境

IP地址是互联网早期发明的概念,可能当时科学家们没有想到互联网发展的迅猛,看似几个亿的数量级,实际上早在2011年,ICANN就宣布IPv4地址已经耗尽了。

互联网上每个设备独立辨识,各有自己的IP地址,已经成了奢望

所谓的“万物互联”,也就成了笑话。

电信、联通、移动这些宽带服务商手里的IP地址数量也是极其有限的,他们甚至都不能给每一条宽带一个独立的IPv4地址,为了节省IP数量,几乎所有宽带账号都是处于供应商层层嵌套的子网。我们通常管家里路由器下面的网络叫局域网,谁知道家外面仍然是运营商搭的更大一些的局域网。

比如某市的某个区占用一个IPv4地址,运营商做NAT之后在这个区的所有用户成为这个IP的子网,这个子网下的某些小区,可能又被NAT成一个子-子网,相当于所有小区的人共用一个大路由器,再接到更大的路由器,再接到电信机房,这样做起到节省IP地址的作用。你的宽带虽然依旧可以上网,但你在全球互联网的身份和你的邻居、你的街坊是同一个,你如果走出了你的小区,就没有办法跟你家里的设备取得联系。

IPv6

科学家们意识到了IP耗尽的危机,于是新一代的IP协议出来了,老的协议被叫做IPv4,新的被叫做IPv6。

至于为什么不叫IPv5,有可能是IPv5在开发的时候因为某些缺陷被Pass了吧?

240e:34c:5e11:6e90:6de4:a231:7b6a:1999

上面就是一个IPv6地址,用冒号分隔,共8组4位十六进制数,类似于车牌号用数字0-1不够用,加入了字母,十六进制也就是0到9,再有a、b、c、d、e、f才进一位。IPv6总长度为16*8=128位,总数量216*8 = 3.4×1038个,也就是3后面有38个0。

这样极大的扩充了IP地址总量,似乎每一个设备占用一个IP地址也不肉疼了。

IPv6的意义,不仅在于缓解IP地址分配吃紧,更厉害的是实现真正意义上的“物联网”。

如今接入互联网的设备越来越多,家里的电视、电脑,甚至冰箱、手表都连接了互联网,一旦IPv6普及之后,每一个设备都会有一个唯一的身份。

作为使用者的我们,在任何一个能接入互联网的地方,都可以通过互联网独立连接这些设备,独立查看,独立控制。

出门以后再也不用为了访问家里的NAS而烦恼了,所有的资料都因为真正意义的互联网可以随身携带到任何角落。

如果说修道路是城市的基础设施,那普及IPv6就是互联网的基础设施建设。只有各个设备互访通畅无阻了,“互联”以后的各种美好愿景才有可能性。

相比目前火起来的5G的提高带宽、提高速度,我认为IPv6才是更为重要的:只有路通了,通行速度才会有意义,5G是锦上添花,IPv6则是锦。

现状

IPv6协议并不兼容IPv4,虽然国家也在大力提倡尽快推广IPv6,但目前绝大多数的互联网服务还在依赖于IPv4,比如最常见的网页浏览,互联网网站可能99%还是IPv4网站。

剩下的1%要么是为了科研,要么是纯粹为了炫技,互联网提供商的IPv6分配是原因之一,还有一个原因是目前好多用户还停留在较老的设备和系统上,WindowsXP是需要手动安装补丁才能支持IPv6的,而早期没有更新的Windows7,也是不支持IPv6的。这些老的系统去访问纯IPv6网站,就会直接打不开。

后来就出现了把IPv6和IPv4都解析到同一个域名的想法,但是现实很尴尬,因为v4和v6是两种不同的协议,而且当解析开始的时候如果发现有v6,会优先解析v6,v6能不能走通,都不会去管v4……

虽然互联网提供商也在响应国家号召尽量给每个宽带提供额外的IPv6地址,但对于普通家庭来说,日常使用更多的还是IPv4,有一些家庭甚至从宽带开通就没有打开过光猫上的IPv6开关。

有一次我打电话给宽带提供商咨询家里宽带的IPv6情况,客服完全是懵逼的,她不知道IPv6是什么。

IPv6对于NAS的意义

当你买来一台NAS,插好网线,却发现你放进NAS的电影只能在家里同一个局域网看,上传个办公文档然后出了门,就没法下载下来,这就是目前最普遍的尴尬情况。

如果你想离开家还能看NAS里的电影,像用一个网盘一样使用你的NAS,你需要一个“公网IP”。

正如上文所述,绝大多数家庭宽带事实上是处于层层嵌套的大局域网,不可能给你公网IP,所以你没有办法离开家之后通过网络访问家里的任何设备,虽然我们习惯了,但事实上这是不合理的。

想要实现在外访问,有三种办法:

  1. 跟提供商要公网IPv4;
  2. 调查宽带的IPv6情况,配置IPv6访问;
  3. 通过有公网IP的设备进行数据中转,也就是所谓的“内网穿透”,常见的“蒲公英”、“ZeroTier”、“QuickConnect”、“FRP”都属于此类。

我个人是极其不推荐第3种的,第三种的原理打个可能不太恰当比方就是:

我要跟住在深山老林的女朋友写信,女朋友还要给我回信,但是邮政说你女朋友没有地址,信寄不到。所以我只能先给住在女朋友家山下公路边的老王送点土特产,跟老王达成协议说以后要是收到我写来的信,麻烦老王跑一趟把信送给女朋友去;要是女朋友给我写了信,也要先给老王,也麻烦老王把信再寄出来给我。

于是每一次写信收信,都要经过老王的手,老王会不会偷偷看信的内容还另说,这老王本来腿脚就不如邮递员好,偶尔生个病把你信给压了你也没办法,老麻烦人家,定期的礼物肯定也是少不了的。

内网穿透虽然能实现我和女朋友之间的通信,但是极大的依赖中间的老王,不仅速度不能保证,要送礼(给中间商带宽占用费),还有可能因为老王宕机完全失去女朋友的音讯。

所以给女朋友办一个邮政局认可的门牌号(公网IP)是更优解。

因为数量本来就紧缺,IPv4的动态公网IP比较难申请,电信宽带有希望可以成功,打客服电话咨询即可;联通比较渺茫;而移动宽带因为本来手里的IP数量就不如前面两家,所以几乎不可能申请到公网IP。

我这边的情况是,电信要求公司名义才能给动态公网IPv4,正好我公司接的就是电信,所以申请还算顺利,在网上申请后工作人员电话联系了我,上门看了下营业执照,设置了一下光猫,IP地址就变成公网了,大概一个礼拜变一次,直接在群晖设置DDNS之后,外网访问很流畅,完全免费。美中不足的是,80和443端口是被封掉的,外部访问所有服务都需要带端口号。

而家里接的移动宽带起初也联系过客服,但是得到的回复很明确:“不提供动态公网IP”,是那种无论如何都不提供的斩钉截铁。

IPv4数量紧缺,IPv6根本不存在紧缺一说呀,而且国家呼吁了那么多年,运营商应该支持了的。

于是我抱着试试看的心转而研究移动宽带的IPv6,找了光猫的管理密码,改桥接开IPv6,接了个路由器负责拨号和分配IP,并且在路由设置好IPv6的DDNS……

然后发现家里所有联网设备都有各自独立的公网IPv6地址了😮

再然后在NAS Docker装了一个ddns go监测IPv6变化情况,并绑定到一个域名上,移动宽带下的NAS也不再是内网了。

家里的NAS和公司里的NAS都在互联网上有了独立的门牌号,不仅两台设备之间可以互通,即便我在外面用手机的蜂窝网络,也能直接访问到这两台设备。

IPv4公网和IPv6公网的区别

公司的电信公网IPv4事实上是光猫到路由器WAN口的IP,仅此一个,所以需要在路由器上做端口转发、端口映射,把外网来的请求分配给局域网里的各个设备(主要是NAS),DDNS绑的域名也是解析到这个唯一的公网IP,请求进了路由器,再由路由器把请求分配给NAS或其他设备。

而家里的公网IPv6则不同,实实在在实现了“一个设备一个IP”,根本无需做IPv4那一套“映射”“转发”。所有接入路由器的、支持IPv6的设备,都会直接被分配到一个公网IP。

我只需要查看家里每个设备的IPv6地址,这个地址在任何互联网环境都可以直接被访问到。

更完美的是,80和443端口也畅通无阻。

路由器自己也有一个独立的IP,如果想的话,甚至可以给路由器绑个域名,随时随地开路由器管理界面。

IPv6安全问题

估计是移动宽带为了安全,拨号成功后默认会阻断所有IPv6的请求,通过在路由器上添加ip6table命令可以放行IPv6上下行。

但是全都放开的话就会造成极大的安全隐患,因为家里所有设备都是对外开放的,一旦被不怀好意的人盯上,再发现是个弱密码几下猜出来,就会被黑。

而且公网IP是不定时变化的,也不能按照IP确定设备、设置规则。

这就要通过路由器确定局域网的设备的内网IPv6地址并且固定下来,再分别针对写ip6tables规则……

于是我嫌麻烦,就干脆全部开放了所有ipv6通行,然后在不同的设备上设置安全规则,加上较强的密码。

比如要是有人尝试登录NAS,用了错误的用户名,直接屏蔽十天;输了错误的密码,直接屏蔽十天。没有远程需求的windows电脑,直接关闭远程连接功能。

这样一个多月下来,竟也相安无事。

@科技

本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可.