背景
前不久在一个QQ群里面和一个开发大佬Panda-Studio聊天,发现使用群辉Nas的人不少,但是绝大多数用户只知道在家中通过IP访问,却并不知道如何使用自己的域名在外网进行访问。这位大佬曾在6年前写过一篇类似的文章,不过当时的工具恐怕都不太能用了。因此他又重新开发了一个DDNS解决方案。
本文将描述如何使用阿里云的域名和群辉Docker来让你在办公室、手机网络也能访问家中的设备文件。
原理
在开始之前,我们简单的回想一下通过域名访问网站的整个过程:浏览器在输入域名后,我们的计算机拿着这个域名去查找了DNS服务器 → 在DNS服务器上,通过域名与IP的对应关系得到了域名对应的IP → 我们的计算机再去访问这个IP显示了网站上的资源。
因此,我们要想在外网通过域名访问到自己家的Nas,就需要将自己家的IP地址添加到DNS解析服务上。然而新的问题出现了:我们家的IP地址通常是运营商动态分配的,如果只是去添加了一个IP,在运营商重新分配IP后,又无法访问了。于是提出一个动态的解决方案:程序每隔几分钟检测一遍当前的IP,如果发现IP变了,那么就去DNS解析服务上更新。这样在通过域名访问时候,就可以总是可以得到最新的IP来访问到家中的设备了。
准备条件
💡Tips:
1. 阿里云的域名
2. 一个可以分配到公网IP的网络环境
这里重点说明一下公网IP:
众所周知,IPv4资源是有限的,大部分运营商只会给某个区域1个公网IP,而不会分配到每个用户。这就好比是:你告诉了你朋友你家的地址,然而你只明确到了XX市XX县XX村。你朋友到了这个村仍然找不到你。因此只有当你自己有一个公网IP的时候,才能在全球范围内找到你,而不是只能找到你家所在的村。
如何判断拥有公网IP:
你可以访问路由器的管理界面来看到路由器的IP地址。然后和百度上搜索“我的IP”的返回结果进行对比,如果是同一个,那就说明你当前已经是公网IP了。
例如:小米路由器就看这里:
很多运营商不会给你公网IP,例如移动。如果你运气好是联通或者电信,可以打电话让运营商给你换成公网IP。
你可以这样描述:我需要在家里安装监控或要远程访问家里的电脑。
对于电信来说,本身是光猫拨号,这也需要让工作人员为你远程下发成路由器拨号才可以实现。
DDNS
DDNS(Dynamic-DNS)也就是动态将IP地址更新到DNS解析服务。在之前,我试过很多软件,用起来都不如有UI界面的舒服。因此我使用了Panda-Studio开发的一个基于Docker的阿里云DDNS方案,这套方案带有管理面板界面,只需要鼠标点击录入就可以启用了,非常方便。
拉取Docker镜像
打开群辉 Docker,从注册表中输入 pandastd/aliyun-ddns-with-ui ,选中后,下载这个镜像。
映射端口并启动
在映像中点击刚才下载完成的pandastd/aliyun-ddns-with-ui,启动它。
除了“端口映射”需要注意一下以外,别的都默认即可。端口映射的部分是将Docker内的端口映射为我们可以访问的端口,这里填写一个大于6000的数字都是可以的,例如9876。
其他根据默认值直接启动这个容器。启动成功后,在 容器页面 可以看到名为pandastd/aliyun-ddns-with-ui的容器。
配置 Aliyun DDNS
在容器启动后,浏览器地址栏输入:http://你的群辉IP + 英文冒号 + 刚才的端口号。
例如:http://10.0.1.15:9876 进入配置页面。
在页面中填写正确的配置,即可将你当前的IP更新到你指定的个人域名。
端口映射
到目前为止,虽然你家的IP已经动态的更新到DNS服务器了,然而你访问这个IP却不能有任何反馈。这就好比,虽然到达你家的公路已经修通了,然而,进了你家的大门,却不知道Nas在哪个房间。
因此需要将内网的端口映射到外网,这样才能用映射出来的端口访问到Nas对应的端口。
例如,群辉的管理页面是:5000,将这个端口在路由器上映射为5000(或其他你喜欢的数字),就能用http://你设置的域名+ 英文冒号 + 5000来访问到群辉的管理页面了。
例如小米路由器则在:高级设置-端口转发-添加规则。
经过这一番操作后,用你刚才的域名+英文冒号+5000,就可以使用群辉登录界面了。如果你还需要别的端口,那么也用相同的方法来做映射。
例如Drive就需要映射6690。更多群辉常用端口请在这里查看:群辉控制面板 - 外部访问 - 路由器配置 - 新增 - 内置应用程序。
对于大部分路由器而言,在这里新增了不会有任何效果,所以还是把端口记下来在路由器上设置才有用。