![IPv4 到 IPv6 迁移建议](https://linux22.com/image/750938/IPv4%20%E5%88%B0%20IPv6%20%E8%BF%81%E7%A7%BB%E5%BB%BA%E8%AE%AE.png)
我目前正在致力于为我们的网络添加 IPv6 功能,并且我对 2020 年将我们习惯的一些 IPv4 概念转换到 IPv6 世界的最佳做法有一些疑问。
在我目前的设置中,ISP 为我们分配了一个 /64,路由器会向客户端通告该前缀,以便客户端使用 SLAAC 自行配置。这似乎运行良好,据我所知,每个人都有 IPv6 互联网访问权限。
然而,我们希望能够按名称查询事物,并且我不确定为客户提供 AAAA 记录的最佳做法是什么。
我所做的是在运行 DHCPv4 的 dnsmasq 实例上部署有状态 DHCPv6,并告诉它从某个范围分发 ULA,这自然会为任何请求地址的人提供 AAAA 记录。这似乎也很好用,但我知道有些人不喜欢有状态 DHCPv6。这也有助于我整合我们在静态 IP 上的服务器分配,就像我对 DHCPv4 所做的一样,出于各种原因,这些服务器应该可以通过固定 IP 地址访问,我们希望 IPv6 继续如此。
我能想到的执行 AAAA 记录的唯一其他方法是通过单播将路由器的 RA 前缀发送到 dnsmasq 机器,然后使用 dnsmasq 使用该ra-names
选项为 slaac 通告 GUA 前缀。但据我所知,这无法解决静态地址分配问题,而且我不确定它实际上有多可靠。有没有比使用有状态 DHCPv6 的 ULA 更好的方法来处理内部 AAAA 记录?
最后,随着一切开始起效,我们现在正在考虑将我们的公共服务迁移到 IPv6。我的理解是,这将需要一个固定的 GUA,以便服务器提供公共 AAAA 记录。我不确定如何使用边缘路由器的 SLAAC 来实现这一点,除非有某种动态 DNS 等效项。我可以再次使用 DHCPv6 或其他手动分配方法来选择我们分配的前缀中的 IP 吗?我犹豫了很久,因为我觉得它可能与 SLAAC 地址发生冲突,而且我不确定如果发生冲突会发生什么。或者,我可以选择向 ISP 请求一个 /48,我应该这样做吗?并为本地客户端宣传单个 /64 以获得连接,并为静态服务器宣传不同的 /64?对我来说这似乎有点小题大做,我们已经远远达不到填满单个 /64 的程度了,但这可能是我的 IPv4 思维模式让我感到困惑。
答案1
对我来说这似乎有点小题大做,我们已经远远达不到填满单个 /64 的程度了,但这可能是我的 IPv4 思维模式让我感到困惑。
别再计算主机了,这是 IPv4 的思维方式。子网千篇一律,非常庞大。/64 可以寻址所有 IP 设备,而且还有充足的空间。
然而,地址空间甚至更大,以至于单个站点可以轻松请求 /48。64 千个 /64,4 个十六进制数字,以根据您想要的地址计划提供。
对于 /48 我到底该用它做什么。
随心所欲!慷慨大方,做好发展规划。为每个子网、每个 VLAN、WiFi SSID、安全区域、云和远程访问 VPN、每个容器主机分配 /64,将“全零”/64 用于虚荣静态服务地址,等等。
尽可能聚合,以避免碎片化。因此,也许可以将 /60 或 /56 委托给内部网络,例如 DHCP 服务器、手动分配的静态池、wifi 控制器或容器编排系统。并为上述所有内容测试环境。
不必是动态的,例如 DHCP-PD,特别是如果您有来自 ISP 的静态前缀。但在 IPAM 系统中以某种方式跟踪事物。
或者如果确实发现冲突,是否有优雅的解决方案?
IPv6 节点应该重复地址检测在所有单播地址上,无状态、DHCPv6、手动或其他。标准是停止重复,而不是导致难以诊断的问题。/64 中随机生成的地址发生冲突的可能性非常低。
联合航空联盟
ULA 是不互联网寻址。由于无法全局访问,标准默认地址选择策略使其优先级甚至低于 IPv4。请参阅 rfc6724。因此,您需要在接入 IPv6 互联网的主机上使用全局可路由(非 ULA)地址。
某种动态 DNS 等效物。
是的,DNS是必需的。名称对于人类来说比IP更容易理解。
是的,了解 IP 通常是在具有状态的 DHCPv6 服务器和配置了动态 DNS 客户端的 SLAAC 节点之间进行选择。 路由器通告标志 A 和 M告诉客户端有状态还是无状态。
AD DS 加入的主机相当简单,预计它们会将自身添加到 DNS。
或者,为服务器接口配置无状态但非随机的基于 EUI-64 的地址。然后,您可以根据 MAC 地址预先计算地址,并将其放入 DNS 中。
也许并非所有设备都需要 DNS。如果允许个人 Android 设备使用访客互联网,则它们不会使用 DHCPv6。如果不由 MDM 管理,您将不知道它们的 IP。
答案2
首先:获取 /48。出于安全性和可管理性考虑,不要将所有内容都放在单个广播域 (VLAN) 中是一种很好的做法。
第二:对于服务器,只需静态配置地址。如果需要,您可以在同一网络上使用 SLAAC、DHCPv6 和静态地址。
将工作站的 IPv6 地址放入 DNS 中并不常见,但在某些情况下它很有用。对于拥有稳定地址的企业,我建议不要使用 ULA。
在您的情形下,我会保持 SLAAC 处于启用状态,以便用户可以获取隐私地址等。在提供固定地址的一侧添加 DHCPv6 服务器,并根据需要将其放入 DNS 中。此外,在路由器通告中设置 M 标志,以便客户端知道存在 DHCPv6 服务器。
由于 IPv6 对所有内容都使用全局地址,因此请确保您拥有适当的网络安全,例如防火墙。
答案3
或者,我可以选择向 ISP 索要 /48,我是否应该这样做并为本地客户端公布单个 /64 以获得连接,并为静态服务器公布不同的 /64?
一定要向你的 ISP 索要 /48。你无法对 /64 进行子网划分,否则会破坏各种东西(包括 SLAAC)。
您将服务器和本地客户端放在不同网络上的想法也是一个很好的主意(即使在 IPv4 中也是如此)。当然,有时网络基础设施不允许您这样做(您需要单独布线或 VLAN 功能),但既然您问了这个问题,我认为这对您来说不是问题。
隔离网络可让您在网络之间放置防火墙。由于在 IPv6 中,所有内容都是公共 IP 地址,因此与 IPv4 相比,仔细微调防火墙更为重要;很容易意外地将系统直接置于互联网上;这是 IPv6 的主要弱点之一。如果您隔离网络,在一个网络上犯下这样的错误不会自动暴露另一个网络。
此外,如果您隔离网络,如果有意义的话,您可以在服务器端网络上实施零信任方法(这可能会减少对防火墙的需求),而不必在内部网络上执行同样的事情。
或者您可以迁移您的服务器并将工作站保留在仅 IPv4 的网络上;这可以减少您的工作量,支持不支持 IPv6 的旧设备,并且还有许多其他好处(尽管一些 IPv6 倡导者反对这样做)。
底线:只要您的基础设施支持它,就一定要隔离您的网络,这样会有很多好处,而没有真正的坏处。
至于您的第二个问题:听起来您正在运营一个规模相当大的企业网络。我强烈建议您实施 IPAM 解决方案,而不是尝试自行开发。
针对您的情况的一般答案正如您所建议的那样:具有自动更新 DNS 服务器的状态 DHCPv6。大多数 IPAM 解决方案基本上都是这两种技术,再加上管理前端。
编辑以添加:只是为了完整性,虽然它可能不适合您,但您也可以使用 mdns(又名 bonjour 或 zeroconf)进行名称解析。
对它的支持有点不稳定。Apple 通常支持它,Windows 10 部分支持它,但你必须操作注册表才能使其在传统 Windows 应用程序中工作,而我在 Android 上根本无法让它工作。
当然,mdns 也不会回答您有关更新外部 DNS 服务器的问题。