由于各种各样的原因,各地都在缩紧 IPv4 公网地址。新开的宽带已经很难拿到 IPv4 公网地址。原本已经开通的 IPv4 公网地址也有可能因为各种原因(近期主要是 PCDN)被运营商收回。V2EX 的宽带症候群频道一直都有这类帖子 在讨论收回。
而 IPv4 地址收回这个问题会影响远程访问自己家中的 NAS、监控等设备。尤其是在通过 DDNS 解析的方案中,公网 IP 地址是一个必备的环节。
好在本次收回的只是 IPv4 地址,IPv6 地址仍然是国家鼓励的。本文就来讲讲如何改用 IPv6 实现远程访问。
如何理解公网 IP 的作用?
首先,我们需要简单了解下公网 IP 起到的作用。
DDNS 其实就是动态 DNS。DNS 本身只是起到“解析”的作用。
当你购买了一个域名,通过 DNS 解析到一个 IP 时。你就可以通过域名访问这个 IP 代表的设备了。
同样的,当你购买了一个域名,通过 DNS 解析到自己家里的 IP,你就可以通过这个域名访问到家里路由器了。然后由于家里的 IP 通常是动态的,你需要在自己的 NAS 上配置个服务,每当 IP 变化的时候告诉域名提供商,我的 IP 变化了。这就是 DDNS 的本质。
我画了一张简单的示意图:
现在 IPv4 的公网 IP 被收回,这就意味着直接访问 IP 地址也无法访问到设备了,域名即便启用了 DDNS,也是指向了一个错误的 IP,自然就访问不到自己家里的设备了。
好在目前 IPv6 的成熟度也足够高,手机 4G、公司网络通常也都是默认分配 IPv6 地址的,那么就可以考虑改用基于 IPv6 的 DDNS 服务来实现。
现在回到开头。由于目前运营商只是收回 IPv4 的 IP,IPv6 的 IP 仍然可用,所以正确配置 IPv6 的 DDNS 就可以恢复访问了。
那么,如何判断自己是否可能受此影响呢?
最简单的判断方法是,如果你是通过 NAS 中“外部访问 - DDNS”这里进行配置的,那么这一定会影响你的正常使用。
准备工作
第一步,你需要确认你有 IPv6 公网 IP。
最简单的方法就是,进入路由器,在路由器中启用 IPv6。
然后在 NAS - 控制面板 - 网络 - 网络界面,展开“局域网 1”,查看是否有 IPv6 地址。一般来说这里会有 3 个地址。
如果没有,请先联系你的电信运营商,要求开通 IPv6 的公网访问。一个常见的理由是“家中有监控,需要从外部访问”。等开通完毕后,才能做后续的操作。
这里需要稍微补充一点关于 IPv6 的知识,这些地址最后有一个 /64
和 /128
,代表“子网前缀。
/64
:IPv6 地址的前 64 位用于表示网络部分,后 64 位表示主机部分。这意味着你可以在这个子网范围内分配很多不同的主机地址。/128
:IPv6 地址的全部 128 位都是网络前缀,表示这是一个单一的、唯一的地址,无法再进一步分配子地址。
假设你看到了下面这一串地址,你应该使用的是 /128
的 2401:821d:2e21:2bdc::103e
来访问你的 NAS。
而如果只有 fe80:
开头的 IPv6 地址,那是不行的,因为 fe80
是类似于 IPv4 的 127.0.0.1
中的 127
,也就是说,这是一个局域网内网的地址。
2401:821d:2e21:2bdc:211:42fa:fec1:32db/64
2401:821d:2e21:2bdc::103e/128
fe80::211:32fe:fee5:35db/64
验证能否直连 IPv6 地址
所以,你现在需要验证一下,这台 NAS 能否被外网访问了。
验证的方法是两步:
- 验证内网通了:在 PC/手机上使用内网,浏览器访问 NAS 的内网地址
http://[fe80::211:32fe:fee5:35db]:5000
(DSM 的管理界面),如果 OK,说明内网的 IPv6 没问题。 - 验证外网通了:在手机上使用 5G 网络,模拟外部访问。浏览器访问 NAS 的外网地址
http://[2401:821d:2e21:2bdc::103e]:5000
,如果 OK,说明外网的 IPv6 没问题。
注意,IPv6 直接访问时必须在地址前后加上中括号 []
。然后浏览器必须完整输入 http://
和端口号,才能正确访问 IPv6 地址。
只有直连 IPv6 没问题了,才能继续后面的 DDNS 配置工作。 否则连直连 IPv6 都连不上的话,无论后面怎么配置,都会是无用功。
接下来有两种方案来配置 DDNS。
方案一:直接使用 Synology 的 DDNS 服务
如果你用的是群晖官方提供的 Synology DDNS 服务。那么只需要在 NAS 中“外部访问 - DDNS”这里,简单修改一下 IPv6 地址,使其支持 IPv6 。配置就结束了。
这里只要把外部地址(IPv6)这里修改到一个可用的地址即可。然后如果你没有可公网访问的 IPv4 地址,最好把 IPv4 停用。
然后尝试访问你配置的域名,如果可以正常访问,就没问题了。
如果发现无法访问,首先检查你自己的设备是否具备 IPv6 的 IP 地址。因为 IPv6 设备之间才能互相访问,如果外部的设备只有 IPv4 的 IP ,也是不能正常访问“只有 IPv6”的域名和服务的。
最简单的方法就是用手机 5G 网络进行访问,5G 会默认分配 IPv6 的地址。
方案二:使用 Docker 部署一个 DDNS-GO 服务
如果你有自己的域名,原本也可以用群晖自带的 DDNS 来实现 IPv4 地址自动解析。现在 IPv4 不能用了,群晖又不提供 IPv6 的 DDNS 解析服务,那我们就需要自己找一个支持 IPv6 的 DDNS 解析服务了。
首先,你需要在 DNS 运营商那里配置一个 AAAA 记录,比如你的域名是 xxx.com,你需要在 DNS 那里配置一个 cloud.xxx.com 的 AAAA 记录。记录值可以随便填写一个符合 IPv6 格式的,比如 2400:da00::dbf:0:100
。
接下来在 NAS 上操作。
你需要用 Docker 部署一个 DDNS-GO 服务。这个服务像群晖 DDNS 一样,也提供了很多国内外运营商的自动化 DDNS 解析功能。
Docker 部署 DDNS-GO 只需要在群晖的 Container Manger - 注册表中搜索 DDNS-GO,选择第一个。
如果下载困难,可以参考此文:
Docker 镜像源下线,Image 越来越难以拉取?试试下载后离线转移到线上环境
然后创建容器,勾选“启用自动重新启动”。
这里选择 host ,也就是直接使用宿主机的网络,这样才能正确获取 NAS 的 IP 地址。
存储空间这里配置一个目录,映射到容器内的 /root/
目录下。DDNS-GO 会把配置文件存储在这个目录。
完成后,你就可以直接访问 【NAS IP 地址】:9876
,然后配置一个用户名密码,就可以进入到 DDNS 的配置界面了。
这里支持一系列国内外的 DDNS 解析服务,你在哪个对应的平台购买了域名,就按哪个平台的 API Key 文档获取 Key。
然后启用 IPv6 的解析。这里选择通过网卡获取。然后 Domains 里写你的域名。比如 cloud.xxx.com
。
完成后,就可以尝试访问 http://cloud.xxx.com:5000
看到 NAS 的管理页面了,此时已经实现了通过 IPv6 访问了。
Q&A
Q:FRP 方案会受影响吗?
而收回公网 IP 不会影响 FRP 方案(Fast Reverse Proxy)实现公网访问的用户。
因为 FRP 方案不需要公网 IP,FRP 主要是通过反向代理技术将内网设备的服务暴露到外网,而无需设备直接暴露在公网中。通过隧道就不涉及到公网 IP。
为什么在这两个方案中我更喜欢 DDNS 呢?因为 FRP 会受限于服务器的上下行带宽,服务器本身也需要费用。所以我总是将其作为备选方案。
Q:我还需要在路由器上做端口映射吗?
你会注意到,以往的方案中还有一步“路由器端口映射到 NAS”,暴露出去的是路由器的公网 IP。而现在通过 DDNS-GO 操作后,就变成了“直接访问 NAS 的 IPv6 地址”。即为 IPv6 中端到端直连。因此不再需要通过路由器转发。
但如果你局域网中还有其他的设备需要映射出去(比如除了 NAS 之外还有监控 NVR),那么就需要考虑在路由器上配置一个 IPv6 DDNS 服务,让路由器做端口转发了。
Q:路由器中有一个 NAT66 选项需要打开吗?
一般来说,不需要 NAT66,因为 IPv6 本身就能提供端到端的直接连接。
常规建议:如果外网通过 IPv6 可以直接访问 NAS,则关闭 NAT66。
例外情况是,如果你的网络架构要求必须使用 NAT66(例如需要把内网地址重新映射到公网地址),才需要启用。
Q:其他品牌的 NAS 是否可以部署 DDNS-GO?
当然可以!
使用群晖的图形界面配置 Docker 只是很大程度上避免命令行操作,让配置更简单易懂,不容易出错。
只要是支持 Docker、能够开启终端的 NAS、Linux、Windows、Mac 设备,都可以安装和配置 DDNS-GO 服务。路由器本身也可以部署。
如果你具备使用命令行的能力,你可以自行了解官方文档,文档也都是中文的。本文就不做进一步展开了。
如果你想了解更多有关 NAS 相关的知识,欢迎购买本站的《家用 NAS 入门指南》。