公网 NAT 网关作为网络地址转换网关,通过转换和隐藏云服务的真实地址,避免对外暴露,提升公网访问的安全性。
创建公网 NAT 网关并绑定 EIP 后,可以:
配置 SNAT:多个 ECS 共享 EIP 访问公网,节省公网 IP 资源。
配置 DNAT:ECS 通过端口映射或 IP 映射,面向公网提供服务。
SNAT - 服务器访问公网 | DNAT - 对外提供 Web 服务 |
SNAT - 服务器访问公网
当多个 ECS 实例访问公网时,逐一配置 EIP 会增加成本。使用公网 NAT 网关的 SNAT 功能,可实现多个 ECS 实例共享 EIP 上网,节省成本的同时,通过隐藏实例的真实 IP 地址、限制入向连接提升安全性。
工作原理
以 ECS 实例(私网IP:192.168.1.100)访问公网为例。
路由转发:按照 VPC 路由表中指向 NAT 网关的路由规则,访问数据包被转发至公网 NAT 网关。
SNAT(源地址转换):NAT 网关接收到数据包后,根据 SNAT 规则配置将源 IP 地址192.168.1.100 转换为 NAT 网关绑定的EIP。同时记录原始五元组(协议、源IP、源端口、目的IP、目的端口)与转换后的五元组(协议、EIP、公网源端口、目的IP、目的端口)的对应关系。
发往公网:经过地址转换后的数据包被发送至互联网。该请求的发起方为 EIP,而非ECS实例的私网IP。
当公网的目标服务器返回响应数据包时,将按照会话映射表还原为原始的私网IP,从而转发回 ECS 实例。
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网关最多可绑定20个EIP,可以前往配额管理页面自助提升配额。
从2022年09月19日起,新创建的公网NAT网关绑定一个EIP时将占用NAT网关所在交换机的一个私网IP(已有NAT网关实例不受影响),请确保NAT网关所在交换机内私网IP地址充足,否则无法成功绑定。
控制台
付费类型:按量付费。
地域:选择创建公网 NAT 网关的地域。
网络及可用区:选择公网 NAT 网关所属的VPC和交换机。创建成功后无法修改。
弹性公网IP:根据是否已创建 EIP 等情况选择。
选择已有:选择未绑定实例的EIP。
新购弹性公网IP:无可用 EIP 时选择。默认创建BGP(多线)类型的按使用流量计费的EIP,可根据自身业务需要选择带宽峰值。
如需绑定BGP(多线)_精品线路类型或其他计费类型的EIP,需先申请EIP,创建时选择已有进行绑定。
稍后配置:成功创建的NAT网关将不具备公网能力,用户需后续手动绑定EIP。
创建完成后,单击目标公网NAT网关实例弹性公网IP列的立即绑定,可从已有弹性公网IP中选择或新购弹性公网IP并绑定。
API
调用CreateNatGateway创建公网NAT网关。
调用ModifyNatGatewayAttribute修改公网NAT网关配置。
调用AssociateEipAddress绑定EIP。
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。但访问单一目标的并发连接数过多时,会造成端口分配失败,需持续监控 端口分配失败丢失数。
创建完成后,可单击目标条目操作列的编辑,修改EIP与EIP亲和性。
API
调用CreateSnatEntry创建SNAT条目。
调用ModifySnatEntry修改指定的SNAT条目。
3. 配置路由
配置路由,确保 ECS 实例发往互联网的流量正确路由到 NAT 网关。
控制台
前往专有网络控制台 - 路由表页面。在顶部菜单栏,选择公网NAT网关的地域。找到 ECS 实例所在交换机关联的路由表,单击 ID 进入详情页。
自动配置:如果创建该 VPC 内的第一个公网 NAT 网关,且 ECS 实例所在的交换机关联了系统路由表,系统会自动添加一条目标网段为
0.0.0.0/0
、下一跳为该NAT网关的路由。此情况下,无需任何操作。手动配置:如果 VPC 内已存在
0.0.0.0/0
路由或交换机绑定了自定义路由表,需在对应路由表中添加目标网段为需访问的具体公网网段、路由下一跳为 NAT 网关的自定义路由。
API
调用CreateRouteEntry添加单个路由条目
调用ModifyRouteEntry调整路由条目下一跳。
验证网络连通性
登录 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)面向公网提供服务为例。
公网用户访问服务:数据包的目标 IP 为公网 NAT 网关绑定的用于提供服务的 EIP。
DNAT(目标地址转换):NAT 网关接收数据包后,根据 DNAT 规则,将 EIP 转换为ECS实例的私网 IP。同时记录地址转换的映射关系。
访问服务:经过地址转换后的数据包转发至目标 ECS实例。
当目标 ECS 实例返回响应数据包时,将按照路由转发至公网 NAT 网关,并根据会话映射表转换为EIP,发送至公网用户。
配置 DNAT 条目
此处仅说明如何配置 DNAT 条目。创建 NAT 网关、绑定 EIP 与路由配置可参考服务器访问公网。
控制台
前往公网 NAT 网关页面。在顶部菜单栏,选择公网NAT网关的地域。
单击目标公网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
调用CreateForwardEntry创建DNAT条目。
调用ModifyForwardEntry修改指定的DNAT条目。
资源清理
公网 NAT 网关从创建完成到释放结束均收取实例费,处理流量时还将收取容量单位 CU 费。为避免非必要开销,当不再需要时,可按照以下步骤清理资源:
控制台
删除配置条目:在实例详情页的SNAT管理和DNAT管理页签,删除配置的条目。
解绑并释放 EIP:在实例详情页的绑定的弹性公网IP页签,解除绑定。仅解绑 EIP,仍需支付 EIP 配置费,需前往EIP释放 EIP。
未删除配置条目时,可强制解绑NAT。
删除公网 NAT 网关:单击目标公网NAT网关实例操作的
。未解绑EIP、删除配置条目时,可选择强制删除(删除 NAT 网关及其包含资源),由系统删除实例及相关资源。
为实例开启删除保护,可避免误删。删除实例前,需关闭删除保护。
API
分别调用DeleteSnatEntry和DeleteForwardEntry删除SNAT条目和DNAT条目。
调用UnassociateEipAddress解绑EIP。
调用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 后无法访问公网
可参考以下步骤排查:
路由配置:在公网 NAT 网关实例详情页查看指向NAT的专有网络路由信息,确认是否有指向该公网NAT网关的路由条目。
SNAT 条目配置:在公网 NAT 网关实例详情页的SNAT管理页签,确认SNAT条目的状态为可用。并确认访问公网的源地址在源网段内。
访问控制:检查访问的公网对端是否配置了访问控制策略或将实例绑定的EIP加入了白名单。
检查是否配置IPv4网关:与 IPv4 网关结合使用时,确保NAT网关为NAT模式,并正确配置路由。
访问公网连接超时或速度慢
通常由以下原因导致:
带宽不足:查看 NAT 网关绑定的 EIP 监控,检查带宽使用率,接近100%时需提升带宽或增加 EIP 并加入共享带宽。
连接数超限:访问单一目标的并发连接数过多时,会造成端口分配失败,连接被丢弃。查看 NAT 网关监控 - 端口分配失败丢失数,当持续增长时,增加 SNAT 规则中配置的 EIP 数量。
更多信息
计费说明
公网 NAT 网关收取实例费和容量单位CU费。绑定的 EIP 有独立的计费规则,费用由EIP收取。
配额
配额名称 | 描述 | 默认限制 | 提升配额 |
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个 |