cyilin / 稍微剑走偏锋的nas方案——2

Created Wed, 01 Jan 2025 20:32:08 +0800 Modified Sun, 14 Dec 2025 23:57:20 +0800

前言

在前面我们设置了一个已经成功搭建了一个nas系统,并且在其他设备上成功访问了nas。但是目前也就只能在同一个局域网中才能访问。还得用其他其他手段才能在外部网络中连接上家里的nas设备。如果还没有搭建nas系统,可以参考前面的博客:稍微剑走偏锋的nas方案——1

现在,让我们解决如何随地访问的问题。

我们在局域网访问nas,是通过在相关软件(比如浏览器和资源管理器)输入nas的ip地址和端口来访问,那么在同理在外地访问也是用同一套方案,在互联网上连接到我们家里面nas设备的ip地址即可。所以,解决思路是通过各种手段来在互联网来访问我们nas的ip地址。

可以在互联网直接访问到的ip我们称为——公网IP,公网ip现在也分两种:ipv4和ipv6。在我国,由于分配到的公网ipv4数量稀少,因此绝大部分人都没有公网ipv4 (不同地区不同情况,据说在香港公网ipv4几乎是多到用不完,可恶) ;公网ipv6虽然数量很多且现在家庭宽带几乎都有,可以做到每台设备一个,但是还没有完全普及,而且给的公网ipv6基本都是动态会变动的那种;并且ipv4和ipv6又互不相通的,因此我们远程在互联网访问就分化出以下三个方案:

  • DDNS转发公网ip
  • 内网穿透
  • 中继转发

DDNS转发公网ip

首先我们需要了解DNSDDNS是个什么玩意:

(omainameystem,缩写:)是互联网的一项服务。它作为将域名和P地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。(ynamicomainameerver,动态域名服务)是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析。

简单来说,就是我们平时输入的网址其实是匹配一个一个服务器的ip,输入网址就会解析处相对的ip,这就是dns。 为了避免因为动态ip问题而需要不停的修改网站对应的ip这个问题,把ip实时和域名组合在一起,叫ddns

如果有静态公网ip那么可以在浏览器直接输入nas的公网ip:端口即可成功访问nas,手上没有相关静态公网ip但有动态公网ip的才需要用ddns技术。那么我们需要准备两样东西:个人域名ddns软件

个人域名

购买

个人域名的获取需要到各家互联网域名商去购买,我这边使用的是阿里云

我们首先进入阿里云官网并注册登陆,然后再搜索栏搜索域名注册

然后搜索你想要建立的域名,比如asdadsahdah

挑选一个还未注册且价格便宜的入手即可,比如asdadsahdah.top

网站权限的账户密码获取

购买成功后,我们点击右上角控制台>全部域名>域名列表,确认购买的域名。确认入库后,点击右上角头像>AccessKey,然后勾选提示并点击继续使用云账号AccessKey

接着点击创建AccessKey,然后完成一系列验证后就可以拿到一个AccessKey IDAccessKey Secret请保管好这AccessKey ID和AccessKey Secret,拿到的人相当于对该网站拥有实际控制权!一定要保管好且不要泄密,就和你的steam号不外借是同一个道理! 我们要复制好AccessKey ID和AccessKey Secret,这两个在关闭页面就无法在看到了,因此要提前存放好。

DDNS软件的选择

DDNS软件的选择有很多,比如ddns-golucky等,这边使用对windows操作更加顺手的lucky来作为演示。

我们下载完lucky并安装在nas上以后,启动lucky,并在右下角小图标处右键lucky图标,设置为开机自启动,然后点击打开lucky后台进入到webui页面

我们输入账号和密码(默认都是:666),点击设置,把管理账号和密码修改成你自己的。外网访问按需打开。

设置好并重新登陆lucky后台,我们点击动态域名>添加任务,然后把相关信息填写上,域名写刚刚购买的域名,AccessKey ID和AccessKey Secret就填写刚刚建立的。类型选择上如果有公网ipv4就选择公网ipv4,有公网ipv6就选择公网ipv6,都有的话建议多添加一次任务,把ipv4和ipv6都解析了。

注意:我们购买的域名一般都是主域名,子域名是挂载在主域名下的,不需要额外购买,因此我们可以在域名列表处写入子域名。

子域名命名规则其实很简单,组合方式为:你要的域名名称.主域名,和之前一样,比如我购买的主域名为asdadsahdah.top,那么子域名我可以设置为abc123.asdadsahdah.top,其中这个abc123可以是任何英文和数字。

都填入正确并添加成功后应该可以看到这个页面

可以看到公网ip未改变或者成功上传ip的相关字样

远程访问nas

现在我们已经成功将ip和域名配置成功,那么就可以来访问测试一下。在浏览器输入域名:端口即可访问。前文我安装了飞牛os和emby服务器,运行的端口号分别是56668096,那么我在浏览器输入域名:5666域名:8096既可。

SSL证书

我们上面的一系列操作完成后都只是能在http上访问,而http在现在互联网中其实相当于明文传输,相当不安全,因此建议加上SSL证书来达成https访问。至于SSL是什么东西,请看下面的文章:

SSL证书——百度百科

添加SSL证书

之所以前面选择lucky作为ddns软件,就是因为它不单止可以作为ddns转发,还可以帮我们续签SSL证书。我们点击SSL/TLS证书>添加证书,添加方式选择ACME,证书机构推荐使用Let's Encrypt,验证方式选择阿里云(在什么地方买得域名就选择什么),IDSecret写入之前获取的AssessKey,域名写入刚刚ddns设置的域名(比如前文的abc123.asdadsahdah.top),也可以写入你的主域名*.主域名(比如asdadsahdah.top*.asdadsahdah.top

反向代理

添加完SSL证书后,我们还需要设置反向代理,把https的域名指向本机的ip

我们点击web服务>添加web服务规则,设置一个端口号,然后把TLS打开。接着点击添加子规则,前端地址写入ddns设置的域名, 后端地址写入本机ip:端口,在点击添加web服务规则即可。

如图,这样一番设置后,我在浏览器输入https://abc123.asdadsahdah.top:10010,先是会通过ddns来解析到nas公网ip地址,然后通过lucky的反向代理,10010端口的流量指向192.168.110.1:8096,我们就可以浏览到192.168.110.1这台设备8096端口上的内容了。而前面emby服务是运行在8096端口,因此输入https://abc123.asdadsahdah.top:10010即可远程访问机器上的emby服务器。小姐姐就可以随时随地的来到我们身边了。

反向代理的端口是可以复用的,因此你可以把abc123.asdadsahdah.top:10010指向emby,把gskandp.asdadsahdah.top:10010指向nas系统等

IPV4和IPV6互不相通

前面说了,ipv4的网络无法访问只有ipv6地址的网站,反过来也一样,因此你需要确认你的域名和你的流量都支持同一个网际协议版本InternetProtocolversion,缩写:ipv)。如果你和我一样,只有公网ipv6,那么在通过这样的办法连接家里设备之前,先去测试一下ipv6吧。

现在国内的绝大部分手机都是兼容ipv4和ipv6流量的,因此手机流量应该可以直接访问ipv6地址的网页。

目前阿里云平台的ipv6转ipv4是需按照流量收费的,而赛博善人cloudflare则是不用,我们可以免费使用cloudflare的cdn服务来实现v4v6均可访问。 但由于cloudflare是美国公司,因此速度方面会比较感人,有舍有得吧。碍于篇幅这里暂且搁置不谈,以后有机会再填坑。 (咕咕咕)


内网穿透

如果家里没有公网ip,那么我们得用内网穿透的方式来把两台设备连接在一起。内网穿透的定义是

内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。

在这里,我选择zerotier作为内网穿透工具,它通过虚拟局域网(VLAN) 技术将不同设备连接到一个“虚拟的局域网”中,让设备随时随地都可以互相访问。

注册并配置zerotier客户端

我们必须先去zerotier注册并并且建立一个虚拟局域网先。

ZeroTier | Global Networking Solution for IoT, SD-WAN, and VPN

设置zerotier局域网

注册并登陆zerotier后,选择free计划,然后我们可以看到这个页面

我们点击上面的Create A Network就可以看到下面多出一个条目

点击进入后,我们首先来到,我们需要注意以下几个地方

Network ID    #该局域网的识别码,对于任何设备想要添加进入这个虚拟局域网都需要这个ID

Name    #给该局域网设置名称,任意即可

Description    #给该局域网设置相关描述,任意即可

Access Control    #加入局域网的控制权限,请尽量保持Private,这样每个设备加入局域网都需要在你的zerotier帐户上同意后方可加入,可以提高安全性

IPv4 Auto-Assign    #请尽量选择easy里面的几个网段,这些都是容易记住的,不建议在advanced里面自己设置网段

安装zerotier docker客户端

我们可以到zerotier的Download处下载到相关系统的客户端,想要安装在nas系统里面的可以选择docker版本。以飞牛os的docker为例。

在docker中搜索并安装zerotier

然后建立镜像,记得勾选开机自启动,在存储位置处添加路径映射,把一个你想要放置zerotier文件的文件夹映射/var/lib/zerotier-one文件夹,比如

功能处选择使用高权限执行容器

网络选择host(先取消勾选bridge然后再选择host

点击设置>SSH,打开SSH功能,我们需要远程ssh来给zerotier容器添加Network ID

打开任意一个ssh工具,这边我使用的是MobaXterm。打开MobaXterm,点击Session>sshRemote host ***** 输入nas的ip地址

nas的ip地址可以再nas的系统设置>网络设置中找到

对着左侧列表的ip地址右键选择Connect as…,然后输入自己nas的账户名,这样就成功连接上nas的ssh

接下来所有的命令我们需要在root权限下,因此我们输入sudo -i,然后输入自己nas的密码来进入到root权限中。注意,输入密码的时候是不会显示密码的,要盲打

接下来执行以下操作

docker ps    #查看docker中zerotier容器的名字,可选,其实在fnos中的docker看也一样
docker exec -it zeroier容器名字 zerotier-cli status    #查看节点状态,返回 200 info 就算成功
docker exec -it zeroier容器名字 zerotier-cli join zerotierID #加入虚拟局域网,zerotierID就是你的Network ID

此时再度进入zerotier的官网并进入你方才建立的局域网,现在你应该发现就会有一个设备出现在页面上

Name是给添加进入的设备起名称,可以随意,Managed IPs则是虚拟局域网内的ip,这个ip就是zerotier局域网的ip。这样一台设备就真正的加入到虚拟局域网中了。注意,zerotier局域网的网段和家里真实局域网的网段不能相同。

可以尝试一下,比如家里的局域网网段是192.168.110.x,zerotier的局域网网段是192.168.193.x,两台设备之间ping zerotierIP可以ping通,就算成功。

安装zerotier Windows端

我们还是来到zerotier官网的Download处,选择下载Windows版本

下载下来应该是一个.msi文件。双击进行安装,安装完毕后在右下角小图标出应该可以找到zerotier的图标,接着右键>join new network,弹出的提示框内输入虚拟局域网的Network ID,然后跟上面的一样,在zerotier局域网管理页面运行设备加入即可。

zerotier 路由转发

其实我们可以更近一步,通过设备的转发功能,实现一台设备安装zerotier,那么该局域网的所有设备都被添加进zerotier局域网的效果。 由于本人使用openwrt作为旁路由进行zerotier转发,因此下面举例是基于openwrt的,飞牛OS和Windows的也各自有教程

zerotier 内网穿透实用教程 - 攻略分享 飞牛私有云论坛 fnOS

windows下利用zerotier虚拟网访问局域网其他电脑 - 知乎

我们进入openwrt的后台并输入

opkg update    #更新软件包
opkg install zerotier    #安装zerotier

随后进入openwrt webui,来到VPN>zerotier,把启用打开,并输入局域网的Network IDZeroTier Network ID处,并把自动允许客户端 NAT打开,然后选择保存并应用。

回到zerotier局域网管理页面,我们找到Settings>Advanced>Managed Routes,在Add Routes进行路由表的配置。Destination输入自己本地局域网的网段, 比如我家里的nas ip地址是192.168.110.5,那么我就应该输入192.168.110.0/24

Via则是输入自己想要进行转发的设备,比如我要用opnewrt进行转发,该设备在zerotier的局域网中ip为192.168.193.2,那么就输入192.168.193.2。然后点击Submit来提交。

这样我外面的设备连接上zerotier局域网后,输入的设备就直接输入真实局域网的ip就可以了,再也不用多记ip且一个一个设备安装zerotier了。


中继转发

有些nas系统的服务商其实是配置了中继转发的,飞牛的中继转发叫做FN Connect。 开启后输入指定连接后边可以直接连接。如果是在同一局域网内,那么它会自动帮你切换成局域网内连接,不然就会通过飞牛的服务器把你的外部设备和nas连接在一起。

由于是经过了飞牛的服务器,因此速度是有限制的,还是更加推荐zerotier或者是ddns。

我们进入到设置>设备信息>飞牛账号中,用自己的手机号注册一个飞牛帐户。注册完成后继续来到远程访问中,把FN ID输入一个自己的id名(不可跟他人重复),然后打开FN Connect即可。

我们再回到设备信息处,就可以看到FN Connect处有一个连接,这个就是专属连接,直接再浏览器输入便可以连接到飞牛nas了

当然我们用中继转发的话只能连接飞牛nas,是无法连接Windows电脑和emby之类的服务的。虽然仿佛简单,但是局限也大。


这么一大串下来,我们终于是把常用的远程连接都说完了。谁能想到,我本来只打算弄一个远程观看毛片的,结果把这一串玩意都折腾完了。忍不住感叹一句

好奇是科学发展的原动力,色欲也是。