引子
入手了群晖 NAS 之后,一直使用厂家提供的 quickconnect 来从外网访问家里的 NAS。quickconnect 的原理其实是要通过群晖的服务器进行中转,然后再连接 NAS,由于服务器不在国内,其传输速度可想而知,通常就是几十上百 K的水平。如果只是通过 web 连接 NAS 来管理或者操作FileStation 来下载还是勉强可用的,但是如果要从外网上传文件到 NAS 或者从 NAS 下载,这种速度是不可忍受的。
直连
要提高速度的办法,只能是外网直连 NAS 了。但是一般 NAS 都会部署在家里或者公司的内网环境,要能从外网访问,一般需要使用路由器带的端口转发或者 DMZ 功能。具体流程就是
外网通过公网 IP 连接到路由器
路由器通过端口转发,将特定端口的包转发给内网同一网段的 NAS,从而实现通信
不过,在开始前,我们还有几个问题需要预先解决
首先,国内大部分网络环境是光猫拨号进行上网,运营商默认会设置光猫为路由(Route)模式,猫自动进行 PPPoE拨号,同时也带有简单的路由功能,于是我们可以直接连接猫的 Lan 口进行上网。但是一般猫的路由功能很鸡肋, 往往没有无线 Wifi 功能,带的 Lan 口也有限,所以一般会在猫后面接一个专用路由器来管理家里的诸多设备及无线上网。所以 NAS 是连接到路由器,再通过光猫连接到公网环境的。这带来一个问题:如果我们能连接到光猫,也没法直接访问内网的 NAS。所幸光猫还提供了一种成为桥接(Bridage)的模式,意思是将外网和光猫后面的设备(也就是我们的路由器)进行直连,由我们的路由器来进行拨号,而光猫本事是透明的,只是用来透传数据。
- 运营商一般会给用户默认分配内网 IP,这导致我们没法连接到家里的路由器。因此需要联系运营商,让他们分配公网 IP 给我们。
这些完成之后,我们就可以检查公网是否能访问自己的网络了,使用 ping 来检查是否畅通(如果有路由上设置了禁止 ping,需要关闭该设置)
1 | $ ping xxx.xxx.xxx.xxx |
这里xxx.xxx.xxx.xxx
是运营商分配给你的公网 IP,你可以替换为自己的来进行测试。
有时候猫或者路由上设置了防火墙,禁止 ping,所以需要关闭该设置再进行测试。
一般 NAS 服务的访问端口是5000(http)和5001(https),这个可以在 NAS 里进行设置:
假如 NAS 的内网 ip 是10.0.0.11,那在内网可以通过10.0.0.11:5000来访问。现在如果想在外网访问 NAS,比如说是通过 http://xxx.xxx.xxx.xxx:5000 ,那么我们就需要在路由器上配置端口转发,将路由器上所有对5000端口的访问都转发到内网 NAS 地址(即10.0.0.11)的5000端口。各个路由器可能不一样,我们这里以 R7000的梅林系统为例:
设置完成后,我们测试一下端口是否可以正常访问
至此,通过公网 IP 我们已经顺利访问了 NAS,就如同内网访问一样。
域名访问
到目前为止,似乎一切都很美好。但是需要提出的是,运营商分配分配给我们的公网 IP 往往是动态变化的,并不固定,所以如果 IP 不停发生着变化,在访问 NAS 之前我们就必须查询一次自己的 IP。好在有种称为 DDNS 的技术,可以解决这个问题。
DDNS(Dynamic Domain Name Server) 翻译过来是动态域名服务,也就是不管我们的 IP 怎么动态变化,域名都能准确指向它,因此通过这个动态域名,我们就无需关心实际的 ip 是什么,每次都能访问到 NAS 上。
很多路由器都带有 DDNS 功能,其工作原理大致是每次 ip 发生变化时,路由器都会将当前的 ip 上报更新到 DDNS 服务提供商,因此域名解析出来的 ip 也会随之得到更新。
假设我们在路由器上开启 DDNS 时设置的域名是 myddns.asuscomm.com
那么之后我们就可以通过 myddns.asuscomm.comm:5000来访问了。如果你有自己的域名,则可以设置一个 cname 类型的域名来指向 myddns.asuscomm.comm 域名。
如果路由不带 DDNS 功能,可以考虑使用 NAS 的 DDNS 功能(有很多提供商可以选择),具体请 google 设置方法。国内花生壳也提供了 DDNS 功能。