使用公网 NAT 网关实现公网访问

公网 NAT 网关作为网络地址转换网关,通过转换和隐藏云服务的真实地址,避免对外暴露,提升公网访问的安全性。

创建公网 NAT 网关并绑定 EIP 后,可以:

  • 配置 SNAT:多个 ECS 共享 EIP 访问公网,节省公网 IP 资源。

  • 配置 DNAT:ECS 通过端口映射或 IP 映射,面向公网提供服务。

SNAT - 服务器访问公网

image

DNAT - 对外提供 Web 服务

image

SNAT - 服务器访问公网

当多个 ECS 实例访问公网时,逐一配置 EIP 会增加成本。使用公网 NAT 网关的 SNAT 功能,可实现多个 ECS 实例共享 EIP 上网,节省成本的同时,通过隐藏实例的真实 IP 地址、限制入向连接提升安全性。

工作原理

以 ECS 实例(私网IP:192.168.1.100)访问公网为例。

  1. 路由转发:按照 VPC 路由表中指向 NAT 网关的路由规则,访问数据包被转发至公网 NAT 网关。

  2. SNAT(源地址转换):NAT 网关接收到数据包后,根据 SNAT 规则配置将源 IP 地址192.168.1.100 转换为 NAT 网关绑定的EIP。同时记录原始五元组(协议、源IP、源端口、目的IP、目的端口)与转换后的五元组(协议、EIP、公网源端口、目的IP、目的端口)的对应关系。

  3. 发往公网:经过地址转换后的数据包被发送至互联网。该请求的发起方为 EIP,而非ECS实例的私网IP。

当公网的目标服务器返回响应数据包时,将按照会话映射表还原为原始的私网IP,从而转发回 ECS 实例。

image

SNAT 生效规则

SNAT 功能配置后是否生效,取决于以下规则:

  • 确保 VPC 内访问公网的流量被正确路由到 NAT 网关,即 VPC 路由表中访问公网目标网段的路由条目下一跳指向公网 NAT 网关。

    • 自动配置:如果 VPC 系统路由表中无0.0.0.0/0 路由,该 VPC 创建第一个公网 NAT 网关时,系统会自动添加此路由。

    • 手动配置:如果使用自定义路由表,或系统路由表中已存在 0.0.0.0/0 路由,需要手动添加或调整自定义路由条目。建议遵循最小权限原则,配置目标网段为访问的具体公网网段。

    • 路由优先级:当多条路由的目标网段重叠时,遵循最长前缀匹配原则转发流量。

  • 出口 IP 优先级:实例持有的固定公网IP/EIP > DNAT IP映射(任意端口) > SNAT条目绑定的EIP。可参考统一公网出口IP调整网络架构。

  • SNAT 条目优先级:当多条 SNAT 条目源网段重叠时,遵循最长子网掩码匹配规则。例如,ECS粒度的SNAT条目源网段的子网掩码为/32,长度最长,优先级最高。

1. 创建公网 NAT 网关并绑定 EIP

公网NAT网关需要绑定EIP才能正常工作。一个公网NAT网关最多可绑定20EIP,可以前往配额管理页面自助提升配额。
20220919日起,新创建的公网NAT网关绑定一个EIP时将占用NAT网关所在交换机的一个私网IP(已有NAT网关实例不受影响),请确保NAT网关所在交换机内私网IP地址充足,否则无法成功绑定。

控制台

前往NAT 网关 - 公网 NAT 网关购买页

  • 付费类型:按量付费。

  • 地域:选择创建公网 NAT 网关的地域。

  • 网络及可用区:选择公网 NAT 网关所属的VPC和交换机。创建成功后无法修改。

  • 弹性公网IP:根据是否已创建 EIP 等情况选择。

    • 选择已有:选择未绑定实例的EIP。

    • 新购弹性公网IP:无可用 EIP 时选择。默认创建BGP(多线)类型的按使用流量计费的EIP,可根据自身业务需要选择带宽峰值

      如需绑定BGP(多线)_精品线路类型或其他计费类型的EIP,需先申请EIP,创建时选择已有进行绑定。
    • 稍后配置:成功创建的NAT网关将不具备公网能力,用户需后续手动绑定EIP。

      创建完成后,单击目标公网NAT网关实例弹性公网IP列的立即绑定,可从已有弹性公网IP中选择或新购弹性公网IP并绑定。

API

2. 配置 SNAT 条目

控制台

前往公网 NAT 网关页面。单击目标实例操作列的设置SNAT,单击创建SNAT条目

  • SNAT条目粒度:SNAT 规则的生效范围,根据管理精细度需求选择。

    • 专有网络粒度:所属VPC下的所有ECS均可以通过配置的SNAT规则访问公网。配置最简单,但控制粒度最粗。

    • 交换机粒度:仅指定的交换机下的ECS可访问公网。通过交换机实现业务逻辑隔离时,选择该粒度可实现精准的访问控制。选择多个交换机时,将会创建多条SNAT条目,均使用相同的EIP。

    • ECS/弹性网卡粒度:仅指定的ECS或弹性网卡可访问公网。控制最精确,但配置繁琐。

    • 自定义网段粒度:为指定的CIDR网段提供公网访问能力,适用于更复杂的网络规划。

  • 选择弹性公网IP地址:在下拉列表中选择提供公网访问的EIP。

    • 没有可选的EIP时,可在下拉列表单击新购弹性公网IP并绑定,在弹出的对话框中完成EIP的购买。

    • 可以选择多个EIP,业务连接会通过哈希算法分配到多个EIP,由于每个连接的流量不同,可能会出现多EIP业务流量不均匀的情况,建议将每个EIP加入到同一个共享带宽中以避免单EIP带宽达到上限导致业务受损。

  • EIP亲和性:选择多个EIP,未开启EIP亲和性时,同一个私网IP访问单一目的IP,可能使用不同的EIP。开启后,会使用相同的EIP。但访问单一目标的并发连接数过多时,会造成端口分配失败,需持续监控 端口分配失败丢失数

创建完成后,可单击目标条目操作列的编辑,修改EIPEIP亲和性。

API

3. 配置路由

配置路由,确保 ECS 实例发往互联网的流量正确路由到 NAT 网关。

控制台

前往专有网络控制台 - 路由表页面。在顶部菜单栏,选择公网NAT网关的地域。找到 ECS 实例所在交换机关联的路由表,单击 ID 进入详情页。

  • 自动配置:如果创建该 VPC 内的第一个公网 NAT 网关,且 ECS 实例所在的交换机关联了系统路由表,系统会自动添加一条目标网段为 0.0.0.0/0、下一跳为该NAT网关的路由。此情况下,无需任何操作。

  • 手动配置:如果 VPC 内已存在 0.0.0.0/0 路由或交换机绑定了自定义路由表,需在对应路由表中添加目标网段为需访问的具体公网网段、路由下一跳为 NAT 网关的自定义路由。

API

验证网络连通性

登录 ECS 实例,执行以下命令。

# 确保 ECS 实例所属的安全组已放行访问公网的对应流量
# 测试能否访问公网
ping www.aliyun.com

# 查看当前出口公网IP,应显示为NAT网关绑定的EIP
curl ifconfig.me

DNAT - 对外提供 Web 服务

当 ECS 实例对外提供 Web 服务时,直接为其分配 EIP 会暴露实例的所有端口,增加安全风险。使用公网 NAT 网关的 DNAT 功能,可通过将 NAT 网关 EIP 的特定端口或所有流量转发至 ECS 实例,避免地址暴露。需确保 ECS 实例未绑定 EIP,才能配置 DNAT 条目。

工作原理

以 ECS 实例(私网IP:192.168.1.100)面向公网提供服务为例。

  1. 公网用户访问服务:数据包的目标 IP 为公网 NAT 网关绑定的用于提供服务的 EIP。

  2. DNAT(目标地址转换):NAT 网关接收数据包后,根据 DNAT 规则,将 EIP 转换为ECS实例的私网 IP。同时记录地址转换的映射关系。

  3. 访问服务:经过地址转换后的数据包转发至目标 ECS实例。

当目标 ECS 实例返回响应数据包时,将按照路由转发至公网 NAT 网关,并根据会话映射表转换为EIP,发送至公网用户。

image

配置 DNAT 条目

此处仅说明如何配置 DNAT 条目。创建 NAT 网关、绑定 EIP 与路由配置可参考服务器访问公网

控制台

  1. 前往公网 NAT 网关页面。在顶部菜单栏,选择公网NAT网关的地域。

  2. 单击目标公网NAT网关实例操作列的设置DNAT,单击创建DNAT条目

    • 选择弹性公网IP地址:选择公网用户访问的EIP。支持同一个EIP同时用于DNAT条目和SNAT条目。

    • 选择私网IP地址:选择对外提供服务的真实私网IP。支持通过ECS或弹性网卡进行选择或通过手动输入。

    • 端口设置:配置DNAT映射。

      • 任意端口:属于IP映射,任何访问该EIP的请求都将转发到目标ECS实例上,将占用全部端口。

        • 目标ECS实例也可以使用该EIP主动访问公网。该EIP不能再被其他DNAT条目或SNAT条目使用。

        • 如果公网NAT网关既配置了DNAT IP映射,又配置了SNAT条目,则ECS实例访问公网时,优先使用DNAT IP映射方式的EIP。

      • 具体端口:属于端口映射,以指定协议和端口访问该EIP的请求将转发到目标ECS实例的指定端口上。 配置公网端口(进行端口转发的外部端口或端口段)、私网端口(进行端口转发的内部端口或端口段)、协议类型(转发端口的协议类型)。

        • 输入的端口范围需要在1~65535之间,如果需要在端口段内转发,请在输入时以正斜线(/)隔开起始端口,例如10/20。公私网端口段中的端口数量一致,公私网需同为端口或者端口段,且需确保端口数量一致。例如公网端口设置为10/20私网端口设置为80/90

        • 当选择的EIP已创建SNAT条目,且需要设置大于1024的公网端口时,因SNAT默认分配端口范围在1025~65535之间,需单击开启端口突破

          重要

          开启端口突破会导致部分存量SNAT的连接闪断,重连即可恢复,请谨慎操作。

    创建完成后,可单击目标条目操作列的编辑,修改EIP、私网IP和端口。

API

资源清理

公网 NAT 网关从创建完成到释放结束均收取实例费,处理流量时还将收取容量单位 CU 费。为避免非必要开销,当不再需要时,可按照以下步骤清理资源:

控制台

  1. 删除配置条目:在实例详情页的SNAT管理DNAT管理页签,删除配置的条目。

  2. 解绑并释放 EIP:在实例详情页的绑定的弹性公网IP页签,解除绑定。仅解绑 EIP,仍需支付 EIP 配置费,需前往EIP释放 EIP。

    未删除配置条目时,可强制解绑NAT

  3. 删除公网 NAT 网关:单击目标公网NAT网关实例操作更多操作 > 删除

    未解绑EIP、删除配置条目时,可选择强制删除(删除 NAT 网关及其包含资源),由系统删除实例及相关资源。

    为实例开启删除保护,可避免误删。删除实例前,需关闭删除保护。

API

  1. 分别调用DeleteSnatEntryDeleteForwardEntry删除SNAT条目和DNAT条目。

  2. 调用UnassociateEipAddress解绑EIP。

  3. 调用DeleteNatGateway删除公网NAT网关。

应用于生产环境

最佳实践

  • 网络规划:为公网 NAT 网关创建独立的交换机,并预留足够的私网IP,避免因 IP 耗尽影响后续为 NAT 网关绑定多 EIP。

  • 精细化控制:使用交换机粒度或 ECS 粒度的 SNAT 条目,遵循最小权限原则,仅为需要访问公网的资源开启权限。

容灾策略

  • 高可用容灾:公网 NAT 网关提供主备可用区容灾,备可用区由阿里云选择。但主备切换过程中,可能存在最长 10 分钟的切换中断。对于无法接受此中断的业务,应在不同可用区部署多个 NAT 网关,并在业务层面实现流量调度和故障切换。

  • 多 EIP 冗余:为 SNAT 条目绑定多个 EIP。当某个 EIP 因攻击等原因不可用时,业务流量可以自动通过其他 EIP 流出。

风险防范

  • 安全组配置:公网 NAT 网关实现地址转换,后端 ECS 实例的安全防护仍依赖安全组和网络 ACL。请务必为 ECS 实例配置严格的入方向安全组规则,仅放行必要的端口。

  • 监控与告警:为 NAT 网关的关键指标(如并发连接数、出入方向带宽等)配置告警规则,以便在资源接近瓶颈时及时收到通知并扩容。

  • 连接数限制:业务需要大量连接到同一公网服务(如支付网关)时,需关注最大并发连接数(N × 55,000, N 是 SNAT 条目配置的 EIP 数量)。建议提前规划足够的 EIP 数量,并监控端口分配失败丢失数

  • ICMP 代回:默认开启,通过Ping命令进行探测时,通过 NAT 网关将会收到正常的回复报文,这无法保证后端服务器正常。对于依赖 Ping 进行精细化监控的场景,需在详情页关闭 ICMP 代回

    • 仅 DNAT 配置任意端口映射场景下,将ICMP报文转发至后端服务器。

    • 具体端口映射场景下,Ping将无法探测。可使用 telnet <EIP> <公网端口>直接探测映射的业务端口。

常见问题

配置 SNAT 后无法访问公网

可参考以下步骤排查:

  1. 路由配置:在公网 NAT 网关实例详情页查看指向NAT的专有网络路由信息,确认是否有指向该公网NAT网关的路由条目。

  2. SNAT 条目配置:在公网 NAT 网关实例详情页的SNAT管理页签,确认SNAT条目的状态为可用。并确认访问公网的源地址在源网段内。

  3. 访问控制:检查访问的公网对端是否配置了访问控制策略或将实例绑定的EIP加入了白名单。

  4. 检查是否配置IPv4网关:与 IPv4 网关结合使用时,确保NAT网关为NAT模式,并正确配置路由。

访问公网连接超时或速度慢

通常由以下原因导致:

更多信息

计费说明

公网 NAT 网关收取实例费和容量单位CU。绑定的 EIP 有独立的计费规则,费用由EIP收取。

image

配额

配额名称

描述

默认限制

提升配额

natgw_quota_nat_num_per_vpc

VPC内可以创建NAT网关的数量

5

前往配额管理页面配额中心申请提升配额。

natgw_quota_nat_ip_num_per_vpc_nat

每个NAT网关可绑定的EIP数量

20

natgw_quota_snat_entry_num

每个NAT网关中可保有的SNAT条目数量

40

natgw_quota_dnat_entry_num

每个NAT网关中可保有的DNAT条目数量

100