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

设计使用 NAT 网关的虚拟网络

NAT 网关为虚拟网络的一个或多个子网提供出站 Internet 连接。 NAT 网关关联到某个子网后,NAT 会为该子网提供源网络地址转换 (SNAT)。 NAT 网关指定虚拟机在创建出站流时要使用的静态 IP 地址。 静态 IP 地址来自公共 IP 地址和/或公共 IP 前缀。 如果使用公共 IP 前缀,则由 NAT 网关使用整个公共 IP 前缀的所有 IP 地址。 NAT 网关最多可以使用公共 IP 地址或公共 IP 前缀中的 16个静态 IP 地址。

Diagram depicts a NAT gateway resource that consumes all IP addresses for a public IP prefix and directs traffic to and from two subnets of VMs and a virtual machine scale set.

图:用于出站 Internet 连接的虚拟网络 NAT

如何部署 NAT

我们有意简化了 NAT 网关的配置和使用:

NAT 网关:

  • 创建非区域或区域 NAT 网关。
  • 分配公共 IP 地址或公共 IP 前缀。
  • 如有必要,请修改 TCP 空闲超时(可选)。 在更改默认值之前,请查看计时器

虚拟网络:

  • 将虚拟网络子网配置为使用 NAT 网关。

不需要指定用户定义的路由。

设计指南

请阅读本部分来了解有关使用 NAT 设计虚拟网络的注意事项。

将专用网络连接到 Azure 服务(例如存储、SQL、Cosmos DB 或此处列出的任何其他 Azure 服务)时,建议的方法是使用专用链接

专用链接使用虚拟机的专用 IP 地址或 Azure 网络中的其他计算资源通过 Azure 主干网络(而不是 Internet)以私密且安全的方式连接到 Azure PaaS 服务。 请尽可能使用专用链接连接到 Azure 服务,因为它可以释放 SNAT 端口,以便与 Internet 建立出站连接。 若要详细了解 NAT 网关如何使用 SNAT 端口,请参阅源网络地址转换

使用 NAT 网关连接到 Internet

对于需要连接到公共终结点的所有生产工作负载的出站方案,建议使用 NAT 网关。 在子网中配置 NAT 网关后,将会取代所有以前的出站配置(例如负载均衡器或实例级公共 IP (IL PIP)),NAT 网关会将所有出站流量定向到 Internet。 对出站发起流做出的响应中的返回流量也将通过 NAT 网关。 添加 NAT 网关不会影响入站发起的流量。 通过负载均衡器或 IL PIP 的入站流量与通过 NAT 网关的出站流量将分开转换。 这种隔离性使得入站和出站服务能够无缝共存。

以下示例方案演示如何确保用于入站服务的负载均衡器或实例级公共 IP 与用于出站服务的 NAT 网关共存。

使用实例级公共 IP 的 NAT 和 VM

Diagram that depicts a NAT gateway resource that consumes all IP addresses for a public IP prefix and directs that traffic to and from two subnets of VMs and a virtual machine scale set.

图:使用实例级公共 IP 的虚拟网络 NAT 和 VM

方向 资源
入站 使用实例级公共 IP 的 VM
出站 NAT 网关

VM 将使用 NAT 网关建立出站连接。 来源入站连接不受影响。

使用标准公共负载均衡器的 NAT 和 VM

Diagram that depicts a NAT gateway that supports outbound traffic to the internet from a virtual network and inbound traffic with a public load balancer.

图:使用标准公共负载均衡器的虚拟网络 NAT 和 VM

方向 资源
入站 标准公共负载均衡器
出站 NAT 网关

负载均衡规则或出站规则中的任何出站配置将由 NAT 网关取代。 来源入站连接不受影响。

使用实例级公共 IP 和标准公共负载均衡器的 NAT 和 VM

Diagram that depicts a NAT gateway that supports outbound traffic to the internet from a virtual network and inbound traffic with an instance-level public I P and a public load balancer.

图:使用实例级公共 IP 和标准负载均衡器的虚拟网络 NAT 与 VM

方向 资源
入站 使用实例级公共 IP 和标准公共负载均衡器的 VM
出站 NAT 网关

负载均衡规则或出站规则中的任何出站配置将由 NAT 网关取代。 VM 也使用 NAT 网关建立出站连接。 来源入站连接不受影响。

缩放 NAT 网关

缩放 NAT 网关功能主要用于管理共享的可用 SNAT 端口库存。 NAT 需有足够的 SNAT 端口库存,才能解决已附加到 NAT 网关的所有子网的预期高峰出站流。 可以使用公共 IP 地址和/或公共 IP 前缀来创建 SNAT 端口库存。

注意

如果分配公共 IP 前缀,则会使用整个公共 IP 前缀。 不能先分配一个公共 IP 前缀,然后再将个别 IP 地址取出来分配给其他资源。 如果要将来自公共 IP 地址前缀的个别 IP 地址分配给多个资源,则你需要创建个别公共 IP 地址,再根据需要分配这些地址,而不能使用公共 IP 前缀本身。

SNAT 将专用地址映射到一个或多个公共 IP 地址,并重写进程中的源地址和源端口。 单个 NAT 网关最多可扩展为 16 个 IP 地址。 如果提供了公共 IP 前缀,则前缀中的每个 IP 地址都会提供 SNAT 端口库存。 添加更多公共 IP 地址可以增加可用 SNAT 端口库存。 TCP 和 UDP 是独立的 SNAT 端口库存,与 NAT 网关无关。

缩放工作负载时,应假设每个流需要新的 SNAT 端口,然后缩放出站流量的可用 IP 地址总数。 仔细考虑你正在设计的缩放,并相应分配 IP 地址数量。

发送到不同目标的 SNAT 端口很有可能被重用。 随着 SNAT 端口即将耗尽,流可能不会成功。

有关 SNAT 示例,请参阅 SNAT 基础知识

监视出站网络流量

通过网络安全组可以筛选虚拟机的入站和出站流量。 若要监视从 NAT 流出的出站流量,可以启用 NSG 流日志。

若要详细了解 NSG 流日志,请参阅 NSG 流日志概述

有关如何启用 NSG 流日志的指南,请参阅启用 NSG 流日志

性能

每个 NAT 网关最多可提供 50 Gbps 的吞吐量。 可以将部署拆分成多个子网,为每个子网或子网组分配一个 NAT 网关,以便进行横向扩展。

每个 NAT 网关公共 IP 地址提供 64,512 个 SNAT 端口以建立出站连接。 对于 TCP 和 UDP,NAT 网关最多可以支持每个公共 IP 地址通过 Internet 到同一目的地终结点的 50,000 个并发连接。 NAT 网关每秒可处理 1M 数据包,并可纵向扩展到每秒 5M 数据包。

请查看以下部分来获取详细信息,并查看故障排除文章来了解具体的问题解决指南。

协议

NAT 网关与 UDP 和 TCP 流的 IP 和 IP 传输标头进行交互。 NAT 网关对应用层有效负载不可知。 不支持其他 IP 协议。

源网络地址转换

基础

源网络地址转换 (SNAT) 将流的源重写为源自不同的 IP 地址和/或端口。 通常,当专用网络需要通过 Internet 连接到公共主机时,会使用 SNAT。 SNAT 允许专用 VNet 中的多个 VM 实例使用同一个公共 IP 地址或 IP 地址集(前缀)连接到 Internet。

NAT 网关在从虚拟网络出站进入 Internet 之前,将对虚拟机(或其他计算资源)的私有 IP 地址和源端口通过 SNAT 转换为静态公共 IP 地址。 与同一目标终结点建立连接时,将使用不同的源端口进行连接,以便可以将连接相互区分开来。 当源终结点耗尽了可用于区分新连接的 SNAT 端口时,将发生 SNAT 端口耗尽错误。

NAT 网关的示例 SNAT 流

以下示例流说明了 SNAT 的基本概念以及它是如何与 NAT 网关一起工作的。

在下表中,VM 会从以下源元组(IP 和端口)连接到目标 IP 65.52.0.1:

流向 源元组 目标元组
1 192.168.0.16:4283 65.52.0.1:80
2 192.168.0.16:4284 65.52.0.1:80
3 192.168.0.17.5768 65.52.0.1:80

将 NAT 网关配置为公共 IP 地址 65.52.1.1 时,源 IP 会通过 SNAT 转换为 NAT 网关的公共 IP 地址,如下所示:

流向 源元组 进行 SNAT 之后的源元组 目标元组
1 192.168.0.16:4283 65.52.1.1:1234 65.52.0.1:80
2 192.168.0.16:4284 65.52.1.1:1235 65.52.0.1:80
3 192.168.0.17.5768 65.52.1.1:1236 65.52.0.1:80

每个流的源 IP 地址和端口通过 SNAT 转换为公共 IP 地址 65.52.1.1(经过 SNAT 转换之后的源元组),并且每个新连接到相同目的地的不同端口终结点。 NAT 网关在连接到 Internet 之前将所有源端口和 IP 替换为公共 IP 和端口的行为称为 IP 伪装或端口伪装 。 多个专用源在公共 IP 后面伪装。

NAT 网关动态分配 SNAT 端口

NAT 网关在子网的资源(即虚拟机)之间动态分配 SNAT 端口。 通过将公共 IP 地址附加到 NAT 网关来提供 SNAT 端口库存。 配置了 NAT 网关的子网上的任何虚拟机都可以使用库存中所有可用的 SNAT 端口:

Diagram that depicts the inventory of all available SNAT ports used by any VM on subnets configured with NAT.

图:虚拟网络 NAT 按需出站 SNAT

不需要将 SNAT 端口预先分配给每个虚拟机,这意味着,不主动使用 SNAT 端口的 VM 就不会使用这些端口。

Diagram that depicts the inventory of all available SNAT ports used by any VM on subnets configured with NAT with an exhaustion threshold.

图:耗尽方案的差异

释放某个 SNAT 端口后,该端口可供配置了 NAT 的子网上的任何 VM 使用。 按需分配允许子网上的动态和分散工作负载按需使用 SNAT 端口。 只要有 SNAT 端口可用,SNAT 流便会成功。

源 (SNAT) 端口重用

NAT 网关从可用的端口清单中随机选择一个端口来建立新的出站连接。 如果 NAT 网关没有找到任何可用的 SNAT 端口,那么它将重用一个 SNAT 端口。 只要未与同一目标 IP 和端口建立现有连接,就可以重用某个端口。

下面的示例演示了此概念,作为上一组的额外流,一个 VM 流向了新的目标 IP 65.52.0.2。

流向 源元组 目标元组
4 192.168.0.16:4285 65.52.0.2:80

NAT 网关将流 4 转换为可能已用于其他目标的源端口(请参阅上表中的流程 1)。 请参阅缩放 NAT 网关,了解有关正确调整 IP 地址预配大小的更多讨论。

流向 源元组 进行 SNAT 之后的源元组 目标元组
4 192.168.0.16:4285 65.52.1.1:1234 65.52.0.2:80

请不要依赖于上面示例中源端口的特定分配方式。 上面只是基本概念的演示图。

计时器

端口重用计时器

端口重用计时器确定在连接关闭后,NAT 网关可以在源端口保持占用状态多长时间之后重用该端口来连接到同一目标终结点。

下表提供了有关 TCP 端口何时可供 NAT 网关重复用来连接到同一目标终结点的信息。

计时器 描述
TCP FIN TCP FIN 数据包关闭连接后,将激活一个占用 SNAT 端口的 65 秒计时器。 该计时器结束后,该 SNAT 端口可供重用。 65 秒
TCP RST TCP RST 数据包(重置)关闭连接后,将激活一个占用 SNAT 端口的 20 秒计时器。 该计时器结束时,该端口可供重用。 20 秒
TCP 半开 在建立连接期间,当一个连接终结点正在等待另一终结点的确认时,将激活 25 秒计时器。 如果未检测到任何流量,则连接将会关闭。 连接关闭后,可以重用源端口连接到同一目标终结点。 25 秒

对于 UDP 流量,在连接关闭后,端口将保持占用状态 65 秒,然后可供重用。

空闲超时计时器

计时器 描述
TCP 空闲超时 如果在任一终结点之间长时间未传输任何数据,则 TCP 连接可能处于空闲状态。 计时器可配置为 4分钟(默认)到 120 分钟(2 小时),使进入空闲状态的连接超时。 流上的流量会重置空闲超时计时器。 可配置;4分钟(默认)- 120 分钟
UDP 空闲超时 如果在任一终结点之间长时间未传输任何数据,则 UDP 连接可能处于空闲状态。 UDP 空闲超时计时器为 4 分钟,且不可配置。 流上的流量会重置空闲超时计时器。 不可配置;4 分钟

注意

这些计时器设置随时可能更改。 提供这些值是为了帮助进行故障排除,暂时请不要依赖于特定的计时器。

计时器注意事项

配置计时器的一些设计建议:

  • 在空闲连接方案中,NAT 网关会一直占用 SNAT 端口,直到连接空闲超时。由于长时间空闲超时计时器可能会不必要地增加 SNAT 端口耗尽的可能性,因此建议不要将 TCP 空闲超时持续时间增加到超过默认的 4 分钟。 如果流永远不会进入空闲状态,则它不受空闲计时器的影响。

  • TCP keepalive 可用于提供刷新长时间空闲连接和终结点活动状态检测的模式。 TCP Keepalive 以重复 ACK 的形式显示给终结点,其开销较低,对应用层不可见。

  • 由于 UDP 空闲超时计时器不可配置,因此应使用 UDP keepalive 来确保未达到空闲超时值并保持连接。 与 TCP 连接不同,在连接的一端启用 UDP keepalive 功能仅适用于一个方向的流量流。 必须在流量流的两端均启用 UDP keepalive,从而保持流量流活动状态。

限制

  • 基本负载均衡器和基本公共 IP 地址与 NAT 不兼容。 请改用标准 SKU 负载均衡器和公共 IP。

  • NAT 网关不支持 ICMP

  • IP 拆分不适用于 NAT 网关。

后续步骤