你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

防止 Azure 中的 IPv4 耗尽

Azure 防火墙
Azure 虚拟网络
Azure 专用链接

本文介绍如何在 Azure 中构建大型网络时最大程度地减少专用地址空间消耗。 如果未建立适当的分配策略,并且要分配给 Azure 虚拟网络的专用 IP 地址用完,则可能需要最大程度地减少地址空间消耗。 本文介绍在 Azure 中正确管理 IP 地址的两种方法。

方案详细信息

企业网络通常使用 RFC 1918 中定义的专用 IPv4 地址范围内的地址空间。 地址范围为 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16。 在本地环境中,这些范围提供足够的 IP 地址,甚至满足最大网络的要求。 因此,许多组织制定地址管理做法,优先考虑简单的路由配置和敏捷的 IP 分配过程。 有效使用地址空间不是优先事项。

在云中,大型混合网络易于构建,一些常见的体系结构模式(如微服务或容器化)可能会导致 IP 地址消耗增加。 因此,调整这些地址管理做法非常重要。 在云环境中,将专用 IPv4 地址视为有限的资源。

Azure 虚拟网络 IP 地址范围

在 Azure 虚拟网络中,建议使用 RFC 1918 定义的地址块。 这些地址块适用于通用专用网络,在公共 Internet 上不可路由。

可以使用其他范围,但在虚拟网络中使用这些范围之前,请阅读 Internet 号码分配机构 (IANA) 文档,了解对环境的潜在影响。 可使用以下范围:

  • 由 RFC 6598 定义的共享地址空间,用于运营商级网络地址转换 (NAT),在 Azure 虚拟网络中被视为专用地址空间。 地址块为 100.64.0.0/10。
  • 组织不拥有的公共、可 Internet 路由的 IP 地址。 不建议这种做法,因为虚拟网络中的资源无法访问通过公共 IP 地址公开的 Internet 终结点。
  • IANA 定义的专用地址块,如 192.0.0.0/24、192.0.2.0/24、192.88.99.0/24、198.18.0.0/15、198.51.100.0/24、203.0.113.0/24 和 233.252.0.0/24。

注意

Windows 阻止将类 E IP 地址范围 240.0.0.0/4 分配给 NIC,并且此地址范围在 Linux 的环境下存在兼容性问题。 因此,虽然可以通过编程方式将范围分配给虚拟网络,但我们不建议在 Azure 虚拟网络中使用它。

注意

前面的范围没有为存在 IPv4 耗尽问题的组织提供长期解决方案。 在这种情况下,应最大程度地减少专用地址空间的消耗。

不能在 Azure 虚拟网络中使用以下 IP 地址范围:

  • 224.0.0.0/4(多播)
  • 255.255.255.255/32(广播)
  • 127.0.0.0/8(环回)
  • 169.254.0.0/16(本地链路)
  • 168.63.129.16/32(内部 DNS)

Azure 登陆区域对齐

本文中的建议适用于基于 Azure 登陆区域体系结构的方案。 本指南假定:

  • 每个区域都有一个中心辐射型拓扑。
  • 位于不同区域的中心辐射型网络通过全局虚拟网络对等互连或连接到同一 Azure ExpressRoute 线路或线路相互连接。
  • 中心辐射型网络通过 ExpressRoute 线路和站点到站点 VPN 的组合连接到本地站点。

下图显示了一个示例体系结构。 这些建议同样适用于基于 Azure 虚拟 WAN 构建的网络,这些网络在每个区域中也有中心辐射型网络。

显示区域中心辐射型网络拓扑的图。下载此体系结构的 PowerPoint 文件

在基于 Azure 登陆区域体系结构的方案中,应用程序部署在其自己的登陆区域中。 每个登陆区域都包含一个与区域中心对等互连的分支虚拟网络。 分支虚拟网络是公司网络不可或缺的一部分,分配有可路由的 IPv4 地址。 这些地址在整个企业网络中是唯一的。 因此,部署在 Azure 虚拟网络中的所有体系结构组件使用公司网络地址空间中的 IPv4 地址,即使只有少数组件公开必须从整个企业网络访问的终结点也是如此。 这些体系结构组件可能是虚拟机、第一方或第三方网络虚拟设备 (NVA),或者虚拟网络注入的平台即服务 (PaaS) 服务。

对于本文的其余部分,前端组件是指可从整个公司网络或组件登陆区域外部访问的应用程序组件。 后端组件是指一个应用程序组件,它不公开企业网络中的终结点,只需从其自己的登陆区域中访问。 例如,公开终结点的 Web 应用程序是前端组件,不公开终结点的数据库是后端组件。

以下部分介绍在 Azure 中构建大型网络时,最大程度地减少专用地址空间消耗的两种方法。

方法 1:不可路由的登陆区域分支虚拟网络

RFC 1918 将 IP 地址块从 IPv4 32 位地址空间中刻出,使其在公共 Internet 上不可路由,因此可以在多个专用网络中重复使用它们进行内部通信。 此方法基于适用于专用地址空间的相同原则。 一个或多个地址范围从组织使用的整个专用地址空间中刻出,并在组织的公司网络中声明为不可路由。 地址范围在多个登陆区域中重复使用。 因此,每个登陆区域:

  • 分配了由一个或多个地址范围组成的可路由地址空间。 你的组织集中管理地址范围,并将它们唯一地分配给登陆区域,以便与公司网络进行通信。 可路由空间中的地址分配给前端组件。
  • 可以使用不可路由地址空间,这是组织在公司网络中声明不可路由的地址范围。 可以使用这些保留范围在所有登陆区域中进行内部通信。 不可路由空间中的地址将分配给后端组件。

在客户托管或基于虚拟 WAN 的 Azure 中心辐射型网络中,两个或多个辐射型虚拟网络不能有重叠的 IP 地址空间。 无法将不可路由的地址块分配给登陆区域分支。 虚拟网络对等互连是非传输性的,因此登陆区域分支虚拟网络可以与具有不可路由地址空间的二级分支虚拟网络对等互连。 下图显示了登陆区域的双重虚拟网络拓扑。

显示登陆区域的双重虚拟网络拓扑的图。下载此体系结构的 PowerPoint 文件

每个应用程序登陆区域都包含两个对等互连的虚拟网络。 一个虚拟网络具有可路由的 IP 地址并托管前端组件。 另一个虚拟网络具有不可路由的 IP 地址,并托管后端组件。 可路由的登陆区域分支与区域中心对等。 具有可路由登陆区域分支的不可路由登陆区域分支对等方。 虚拟网络对等互连是不可传递的,因此不可路由的前缀对区域中心或公司网络的其余部分不可见。 可路由的虚拟网络不能使用不可路由的地址范围。 某些组织已将分散的地址空间分配给可路由网络。 识别未使用的大型地址块并声明它们不可路由可能很困难。 在这种情况下,请考虑 RFC 1918 地址空间中不包含的未使用的地址。 上图提供了不可路由分支虚拟网络中运营商级 NAT 地址的示例,例如 RFC 6598。

单虚拟网络登陆区域迁移

虚拟网络对等互连在两个对等互连虚拟网络之间提供完整第 3 层连接。 部署在通过 IP 相互通信的传统单一虚拟网络登陆区域中的应用程序组件可以在登陆区域中的可路由和不可路由的分支虚拟网络之间自由移动。 本部分介绍两种典型的迁移模式。

以下应用程序通过第 7 层应用程序传送控制器公开:

显示通过第 7 层应用程序传送控制器公开的应用程序的迁移模式的图。下载此体系结构的 PowerPoint 文件

通过第 7 层应用程序传送控制器公开的应用程序可以移动到不可路由的分支。 应用程序传送控制器是唯一必须驻留在可路由登陆区域分支中的前端组件。

以下应用程序通过 Azure 负载均衡器公开:

显示通过 Azure 负载均衡器公开的应用程序迁移模式的图。下载此体系结构的 PowerPoint 文件

如果应用程序通过 Azure 负载均衡器公开其终结点,则属于负载均衡器后端池的计算实例必须保留在同一虚拟网络中。 Azure 负载均衡器仅支持其自己的虚拟网络中的后端实例。

出站依赖项

应用程序的后端组件不需要可从公司网络访问或接收入站连接,但它们通常具有出站依赖项。 在 DNS 解析、Active Directory 域服务域控制器、访问其他登录区域公开的应用程序终结点或访问日志记录或备份设施等情况下,后端组件可能需要连接到其登录区域之外的终结点。

注意

客户端到 Active Directory 域服务 (ADDS) 域控制器 (DC) 通过 NAT 的通信已测试且受支持,DC 到 DC 通信未测试且不受支持,如通过 NAT 的 Active Directory 的支持边界的描述中所述

当服务在不可路由的分支虚拟网络中启动连接时,必须为可路由 IP 地址后面的连接实现源 NAT (SNAT)。 若要实现 SNAT,请在可路由分支虚拟网络中部署支持 NAT 的设备。 每个登陆区域运行自己的专用 NAT NVA。 在登陆区域中实现 SNAT 有两个选项:Azure 防火墙或第三方 NVA。 在这两种情况下,不可路由分支中的所有子网都必须与自定义路由表相关联。 如下图所示,路由表将流量转发到登陆区域外的目标,并转发到 SNAT 设备。 对于发往专用 IP 地址空间(例如 RFC 1918 空间)的流量,Azure NAT 网关不支持 SNAT。

显示自定义路由表将流量转发到转发到 SNAT 设备的图。下载此体系结构的 PowerPoint 文件

通过 Azure 防火墙实现 SNAT

Azure 防火墙:

  • 提供高可用性。
  • 提供本机可伸缩性和三种不同的 SKU。 SNAT 不是资源密集型任务,因此请先考虑基本 SKU。 对于需要来自不可路由地址空间的大量出站流量的登陆区域,请使用标准 SKU。
  • 对其任何实例的专用 IP 地址后面的流量执行 SNAT。 每个实例都可以使用所有非特权端口。

下图显示了使用 Azure 防火墙在中心辐射型网络拓扑中实现 SNAT 的登陆区域布局。

显示使用 Azure 防火墙实现 SNAT 的图。下载此体系结构的 PowerPoint 文件

必须将不可路由分支中的所有子网与自定义路由表相关联,以便将流量发送到登陆区域之外的目标,并发送到 Azure 防火墙。

下图显示了使用 Azure 防火墙在基于虚拟 WAN 中心辐射型网络中实现 SNAT 的登陆区域布局。

显示使用 Azure 防火墙在基于虚拟 WAN 网络中实现 SNAT 的图。下载此体系结构的 PowerPoint 文件

必须将不可路由分支中的所有子网或未连接到虚拟 WAN 的分支中的所有子网与自定义路由表相关联,以便将流量发送到登陆区域外部的目标,并发送到 Azure 防火墙。

对于这两种布局,若要为不可路由分支中的资源提供对其登陆区域外部的可路由 IP 地址的访问,必须在每个登陆区域的可路由辐射中将“执行 SNAT”选项设置为“始终”的情况下部署 Azure 防火墙。 可以在公共文档中找到有关如何配置 Azure 防火墙以在所有收到的连接上实现 SNAT 的说明。 以下屏幕截图显示了将 Azure 防火墙用作由不可路由分支虚拟网络中的资源发起的连接的 NAT 设备所需的配置。

显示 Azure 防火墙默认 SNAT 行为的对话。“执行 SNAT”选项设置为“始终”。

通过第三方 NVA 实现 SNAT

Azure 市场中提供了具有 NAT 功能的第三方 NVA。 这些映像具有以下特性:

  • 对横向缩减和横向扩展的精细控制。
  • NAT 池的精细控制。
  • 自定义 NAT 策略,例如根据传入连接的属性使用不同的 NAT 地址,如源或目标 IP 地址。

请考虑以下建议:

  • 若要实现高可用性,请部署至少具有两个 NVA 的群集。 使用 Azure 负载均衡器将传入连接从不可路由的分支虚拟网络分发到 NVA。 高可用性端口负载均衡规则是必需的,因为群集在离开登陆区域的所有连接上实现 SNAT。 Azure 标准负载均衡器支持高可用性端口负载均衡规则。
  • Azure SDN 堆栈支持单臂和双臂 NVA。 首选单臂 NVA,因为它们减少了可路由分支虚拟网络中的地址空间消耗。

下图显示了使用第三方 NVA 在中心辐射型网络拓扑中实现 SNAT 的登陆区域布局。

显示使用第三方 NVA 在中心辐射型网络拓扑中实现 SNAT 的图。下载此体系结构的 PowerPoint 文件

下图显示了使用第三方 NVA 在基于虚拟 WAN 中心辐射型网络拓扑中实现 SNAT 的登陆区域布局。

显示使用第三方 NVA 在基于虚拟 WAN 中心辐射型网络拓扑中实现 SNAT 的图。下载此体系结构的 PowerPoint 文件

对于这两个第三方 NVA 布局,必须在 Azure 负载均衡器后面部署多个实例,以提供高可用性。 需要 Azure 负载均衡器标准版 SKU。

专用链接提供对未连接到虚拟网络的虚拟网络中部署的应用程序的访问权限。 在服务器端或应用程序、虚拟网络中,部署专用链接服务并将其与在内部 Azure 标准 SKU 负载均衡器的前端 IP 地址上公开的应用程序终结点相关联。 在客户端虚拟网络中,部署专用终结点资源并将其与专用链接服务相关联。 专用终结点公开虚拟网络中的应用程序终结点。 专用链接提供隧道和 NAT 逻辑,用于在客户端和服务器端之间路由流量。 有关详细信息,请参阅什么是 Azure 专用链接?

专用链接不需要客户端虚拟网络与服务器端虚拟网络之间的第 3 层连接。 这两个虚拟网络可以具有重叠的 IP 地址空间。 专用链接允许在专用的隔离虚拟网络中部署应用程序,所有这些虚拟网络使用相同的不可路由地址空间。 应用程序在企业网络中公开为专用链接服务,后者使用可路由地址空间。 在 Azure 登陆区域体系结构的上下文中,生成的登陆区域拓扑具有:

  • 托管整个应用程序以及与应用程序终结点关联的专用链接服务的隔离虚拟网络。 应用程序团队定义虚拟网络地址空间。
  • 具有可路由地址空间的辐射虚拟网络,用于托管与专用链接服务关联的专用终结点。 分支虚拟网络直接与区域中心对等互连。

下图显示了已启用专用链接的登陆区域拓扑。

显示专用链接服务公开隔离的虚拟网络中部署的应用程序时的登陆区域拓扑的图。下载此体系结构的 PowerPoint 文件

在隔离的分支虚拟网络中部署应用程序时,请对出站依赖项使用专用链接服务。 在隔离分支虚拟网络中定义专用终结点,并将其与可路由虚拟网络中的专用链接服务相关联。 下图显示了这些概念性方式。

显示在隔离的虚拟网络中部署应用程序时,对出站依赖项使用专用链接服务的图。下载此体系结构的 PowerPoint 文件

在实际大规模实现中,专用链接方法可能不适用:

  • 如果隔离虚拟网络中部署的应用程序有多个出站依赖项。 为每个出站依赖项部署专用链接服务和专用终结点时,会增加复杂性和管理需求。
  • 如果出站依赖关系包括可路由网络中不能属于 Azure 负载均衡器后端池的终结点,则专用链接不适用。

若要克服这两个限制,请在可路由辐射中部署代理/NAT 解决方案,并使用专用链接从隔离的虚拟网络访问该解决方案。

显示使用下载此体系结构的 PowerPoint 文件

使用单个专用终结点或专用链接服务公开部署在可路由网络中的代理/NAT 解决方案。 端口转换和地址转换规则在 NVA 上定义。 这些规则允许使用隔离虚拟网络中的单个专用终结点来访问可路由网络中的多个依赖项。

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

  • 费德里科·盖里尼 | EMEA 技术主管
  • Khush Kaviraj | 云解决方案架构师
  • Jack Tracey | 高级云解决方案架构师

其他参与者:

若要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

后续步骤