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