阿里云VPC NAT网关配置完全指南:从零搭建公网访问架构
1. NAT网关概述与产品选型
在阿里云专有网络VPC中,云服务器ECS实例默认只有私网IP地址,无法直接访问公网,也无法被公网直接访问。为了实现VPC内资源与公网的互通,阿里云提供了NAT网关(NAT Gateway)这款全托管的网络地址转换服务。NAT网关通过转换和隐藏云服务的真实地址,既实现了公网访问能力,又避免了内网地址直接对外暴露,有效提升了网络安全性。
阿里云NAT网关分为两种类型:公网NAT网关和VPC NAT网关。公网NAT网关可以绑定弹性公网IP(EIP)实现公网访问,适用于VPC内ECS实例访问互联网或对外提供服务的场景。VPC NAT网关不支持绑定EIP,主要用于私网地址转换,解决VPC之间网段冲突时的互访问题,或满足金融等行业使用指定私网IP访问本地IDC的合规诉求。本文聚焦公网NAT网关的配置,帮助读者掌握VPC内资源通过NAT网关实现公网访问的核心技能。
需要先登录阿里云控制台,点击:阿里云控制台
2. 公网NAT网关的核心功能
公网NAT网关提供两个核心功能:SNAT(源网络地址转换)和DNAT(目的网络地址转换)。
SNAT功能让VPC内多个无公网IP的ECS实例共享一个或多个EIP访问公网。当ECS实例主动发起对外访问时,NAT网关将数据包的源IP地址(私网IP)转换为NAT网关绑定的EIP,公网目标服务器看到的请求来源是EIP而非ECS的私网IP。响应数据返回时,NAT网关根据会话映射表将目的IP还原为ECS的私网IP,完成整个通信过程。SNAT的核心价值在于节省公网IP资源——无需为每台ECS单独分配EIP,同时隐藏了内网拓扑结构,提升了安全性。
DNAT功能则相反,它允许公网用户通过NAT网关绑定的EIP和指定端口访问VPC内ECS实例提供的服务。DNAT支持端口映射和IP映射两种模式。端口映射将公网IP的特定端口映射到内网ECS的指定端口,适合多服务共用同一个EIP的场景;IP映射则将整个公网IP映射到一台ECS,适合需要完整IP级访问的场景。
3. 配置前的准备工作
在开始配置NAT网关之前,需要完成以下准备工作。
首先确认已创建VPC和交换机。如果尚未创建,需先在阿里云VPC控制台完成VPC及交换机的创建。建议VPC网段选择RFC 1918规定的私有地址段,如192.168.0.0/16、172.16.0.0/12或10.0.0.0/8,避免与本地数据中心或其他云环境网段冲突。交换机应部署在需要访问公网的ECS所在的可用区。
其次准备弹性公网IP(EIP)。NAT网关必须绑定至少一个EIP才能正常工作。如果尚未创建EIP,可以在创建NAT网关时选择\"新购弹性公网IP\",系统会自动完成EIP的创建和绑定。也可以提前在弹性公网IP控制台创建好EIP,再在创建NAT网关时选择已有EIP进行绑定。
还需了解NAT网关的计费方式。公网NAT网关仅支持按量付费(后付费),计费项包括实例费用和CU(容量单位)费用。实例费用按小时计费,CU费用根据实际使用的流量和连接数等指标计算。单可用区容灾模式的NAT网关仅支持按量计费,不支持包年包月,且暂不支持资源包抵扣。可购买NAT网关资源包来抵扣CU费用。
4. 创建公网NAT网关
完成准备工作后,进入NAT网关管理控制台开始创建。登录阿里云控制台后,在顶部菜单栏选择与VPC相同的地域,然后在产品列表中找到\"NAT网关\"并进入管理页面。
点击\"创建NAT网关\"按钮。首次使用NAT网关时,系统会提示创建服务关联角色,点击\"创建关联角色\"即可自动完成授权。创建页面需要配置以下关键参数:
- 所属地域:必须与目标VPC所在的地域一致。
- 所属专有网络:选择需要开通公网访问能力的VPC。
- 关联交换机:选择NAT网关实例部署的交换机。注意从2022年9月19日起,新创建的公网NAT网关绑定EIP时会占用NAT网关所在交换机的一个私网IP地址。请确保该交换机有足够的空闲私网IP。
- 访问模式:选择\"VPC全通模式(SNAT)\",系统会自动为整个VPC配置SNAT条目。如果选择手动模式,则需后续自行创建SNAT条目。
- 弹性公网IP:选择\"新购弹性公网IP\"或\"使用已有弹性公网IP\"。如果新购,需配置带宽峰值,建议根据业务流量需求合理设置。
- 容灾类型:选择\"跨可用区容灾\"或\"单可用区容灾\"。跨可用区容灾是默认选项,NAT网关在两个可用区冗余部署,单可用区故障时自动切换。单可用区容灾仅在单一可用区内部署,实例费用约为跨可用区的50%,CU费用约为80%,适合业务集中在一个可用区的场景。
填写完参数后点击\"立即购买\",完成创建。创建成功后,在NAT网关列表中可以查看新创建的实例。
5. 配置SNAT条目实现ECS访问公网
创建NAT网关并绑定EIP后,需要配置SNAT条目才能让VPC内的ECS实例通过NAT网关访问公网。
在NAT网关管理控制台,点击目标NAT网关实例ID进入详情页,切换到\"SNAT管理\"页签,点击\"创建SNAT条目\"。创建SNAT条目时需要配置以下参数:
- SNAT条目粒度:支持VPC粒度、交换机粒度和ECS粒度。VPC粒度为整个VPC内的所有ECS配置SNAT,最常用。交换机粒度仅为指定交换机下的ECS提供SNAT。ECS粒度仅针对单台ECS实例,粒度最细,优先级最高。
- 源网段:根据选择的粒度填写对应的网段。VPC粒度填写VPC的CIDR网段;交换机粒度填写交换机的CIDR网段;ECS粒度填写ECS的私网IP。
- 选择公网IP:选择\"使用单IP\"或\"使用多IP\"。单个EIP可提供的SNAT端口数量有限,当大量会话访问同一目的地址时可能造成端口分配失败。建议根据并发会话数配置多个EIP。
点击\"确定\"完成创建。SNAT条目创建后,状态变为\"可用\"即表示配置成功。此时,源网段内的ECS实例即可通过NAT网关绑定的EIP访问公网。
以下是使用阿里云CLI创建SNAT条目的示例代码:
# 首先创建NAT网关
aliyun vpc CreateNatGateway \
--RegionId cn-hangzhou \
--VpcId vpc-xxxxx \
--VSwitchId vsw-xxxxx \
--NatType Enhanced \
--NatGatewayName my-nat-gateway
# 绑定EIP到NAT网关
aliyun vpc AssociateEipAddress \
--RegionId cn-hangzhou \
--AllocationId eip-xxxxx \
--InstanceId ngw-xxxxx \
--InstanceType Nat
# 创建SNAT条目(VPC粒度)
aliyun vpc CreateSnatEntry \
--RegionId cn-hangzhou \
--NatGatewayId ngw-xxxxx \
--SnatIp 47.96.xxx.xxx \
--SourceVSwitchId vsw-xxxxx6. 配置DNAT条目将内网服务暴露到公网
如果VPC内的ECS需要对外提供Web服务、数据库服务等,需要配置DNAT条目。
在NAT网关详情页切换到\"DNAT管理\"页签,点击\"创建DNAT条目\"。配置参数如下:
- 公网IP地址:选择NAT网关绑定的EIP。
- 公网端口:公网用户访问时使用的端口。范围1-65535。
- 协议类型:TCP、UDP或任意。
- 私网IP地址:目标ECS的私网IP。
- 私网端口:ECS上服务监听的端口。
例如,将EIP的80端口映射到ECS私网IP 192.168.1.10的8080端口,公网用户访问http://EIP:80时,请求会被转发到ECS的8080端口。
需要注意的是,配置DNAT后,还需确保ECS的安全组规则允许公网访问对应的私网端口。可以在同VPC内的其他ECS执行telnet命令测试私网端口是否可达。
以下是使用Terraform创建DNAT条目的示例:
resource \"alicloud_nat_gateway\" \"default\" {
vpc_id = \"vpc-xxxxx\"
vswitch_id = \"vsw-xxxxx\"
nat_gateway_name = \"my-nat-gateway\"
nat_type = \"Enhanced\"
}
resource \"alicloud_eip\" \"default\" {
bandwidth = \"100\"
}
resource \"alicloud_eip_association\" \"default\" {
allocation_id = alicloud_eip.default.id
instance_id = alicloud_nat_gateway.default.id
}
resource \"alicloud_snat_entry\" \"default\" {
snat_table_id = alicloud_nat_gateway.default.snat_table_id
source_vswitch_id = \"vsw-xxxxx\"
snat_ip = alicloud_eip.default.ip_address
}
resource \"alicloud_forward_entry\" \"default\" {
forward_table_id = alicloud_nat_gateway.default.forward_table_id
external_ip = alicloud_eip.default.ip_address
external_port = \"80\"
ip_protocol = \"tcp\"
internal_ip = \"192.168.1.10\"
internal_port = \"8080\"
}7. 路由表与NAT网关的协同机制
NAT网关本身只负责地址转换,不决定流量的走向。数据包是否被发送到NAT网关,以及地址转换后流向何处,由VPC的路由表控制。
当VPC内ECS访问公网时,数据包会匹配路由表中的路由条目。如果存在目标网段为0.0.0.0/0、下一跳指向NAT网关的路由条目,则该流量会被转发到NAT网关。如果VPC系统路由表中没有0.0.0.0/0路由,创建第一个公网NAT网关时系统会自动添加该路由。如果使用了自定义路由表,或系统路由表中已存在0.0.0.0/0路由,则需要手动添加或调整路由条目。
路由优先级方面,当多条路由的目标网段重叠时,遵循最长前缀匹配原则。例如,目标网段192.168.1.0/24的路由优先级高于0.0.0.0/0。出口IP的优先级顺序为:实例持有的固定公网IP/EIP高于DNAT IP映射(任意端口),高于SNAT条目绑定的EIP。
8. 多可用区高可用部署方案
对于生产环境,建议考虑NAT网关的高可用部署。阿里云NAT网关提供跨可用区容灾和单可用区容灾两种模式。
跨可用区容灾模式下,NAT网关在两个可用区各部署一套实例,主可用区由用户指定,备可用区由阿里云自动选择。单可用区故障时自动切换,适用于ECS等实例分布在多个可用区、需要共享同一NAT网关访问公网的场景。该模式的初始性能指标为:新建连接速率2万CPS、吞吐量5Gbps、并发连接数50万、包处理速率80万PPS,弹性上限可分别达到10万CPS、15Gbps、200万、250万PPS。
单可用区容灾模式下,NAT网关仅在用户指定的单个可用区内部署,可用区内设备级冗余。该模式的初始吞吐量为10Gbps,高于跨可用区模式的5Gbps。实例费用约为跨可用区的50%,CU费用约为80%。适用于业务集中在某一个可用区、使用独立NAT网关访问公网的场景。建议在不同可用区分别部署单可用区NAT网关,使每个可用区的流量独立转发,确保单个可用区故障时其他可用区的业务仍可对外提供服务。
当NAT网关的性能超过最大指标时,业务访问将面临丢包风险。建议结合实际业务特点提前进行压力测试评估实例性能,并合理配置监控项。
9. 配额限制与注意事项
使用NAT网关时需注意以下配额限制:
- 单个VPC内可创建的NAT网关数量有配额限制,可在配额中心查看和申请提升。
- 单个公网NAT网关最多可绑定20个EIP。如需更多可通过配额管理页面自助提升配额。
- 单个NAT网关实例最多100条SNAT/DNAT规则,每条规则最多10个源CIDR。
- 单个NAT网关实例最多可建立100条限速规则,单条限速规则最多支持10个源地址网段。
其他注意事项:
- 单个EIP可提供的SNAT端口数量有限。当用户访问同一个目的地址的会话数量过多而EIP数量过少时,可能造成端口分配失败。建议增加SNAT规则中配置的EIP数量。
- 如需开启IPv4网关进行统一的公网出入口管控,需将NAT交换机关联的默认路由表中配置默认路由并指向IPv4网关。
- 如需NAT出站安全防护,可开启NAT边界防火墙。
- 建议NAT网关与服务器在同一可用区部署,以便更好地应对可用区故障风险。
10. 常见故障排查
10.1 ECS配置DNAT后无法被公网访问
可能原因及排查方法:
- 安全组规则不允许公网访问DNAT条目中配置的ECS私网端口。需检查并开放对应端口。
- 路由表中没有目标网段0.0.0.0/0、下一跳为NAT网关的路由条目。DNAT条目中的ECS被访问后回复响应报文时也需要有去往NAT网关的路由。需手动添加该路由条目。
10.2 新创建交换机的ECS无法通过SNAT访问公网
可能原因及排查方法:
- NAT网关的SNAT条目中不包含新创建交换机的网段。需手动为新建交换机创建SNAT条目。
- 新建交换机绑定了自定义路由表,但自定义路由表中没有目标网段0.0.0.0/0、下一跳为NAT网关的路由条目。需手动添加。
10.3 VPC内存在多个NAT网关时某交换机ECS无法访问公网
如果VPC内使用系统路由表且只有一条0.0.0.0/0路由指向其中一个NAT网关,则该路由指向的NAT网关负责所有流量的转发。需确保SNAT条目覆盖了所有需要访问公网的交换机网段。
11. 最佳实践建议
基于以上内容,总结以下企业级最佳实践建议:
- 网段规划先行:创建VPC前做好CIDR规划,避免与本地IDC或其他云环境网段冲突。
- 按可用区部署NAT网关:在每个有业务服务器的可用区独立部署NAT网关,实现可用区级容灾。
- 合理配置EIP数量:根据并发会话数评估所需EIP数量,避免单EIP端口耗尽。
- 监控与告警:配置NAT网关的性能监控和告警,关注并发连接数、新建连接速率、吞吐量等指标。
- 安全加固:结合安全组、NAT边界防火墙等产品构建多层安全防护体系。
- 成本优化:根据业务流量特点选择合适的容灾类型(单可用区容灾费用更低),购买资源包抵扣CU费用。
12. 常见问题问答
问1:NAT网关和EIP有什么区别?可以只使用EIP实现公网访问吗?
EIP是公网IP地址资源,绑定到ECS后该ECS即可直接访问公网和被公网访问。NAT网关是网络地址转换服务,绑定EIP后可以为整个VPC内多台ECS提供共享公网出口。如果只有少量ECS需要公网访问,直接绑定EIP即可;如果有多台ECS需要共享公网出口或统一管理公网访问,应使用NAT网关。
问2:SNAT和DNAT可以同时配置吗?
可以。SNAT和DNAT解决的是不同方向的问题——SNAT让内网ECS主动访问公网,DNAT让公网用户访问内网ECS。两者可以同时配置在同一NAT网关上,互不冲突。
问3:配置SNAT后ECS仍然无法访问公网,可能是什么原因?
常见原因包括:SNAT条目未覆盖该ECS所在的交换机网段;VPC路由表中缺少0.0.0.0/0指向NAT网关的路由;ECS安全组出方向规则限制;NAT网关绑定的EIP欠费或被释放。可按顺序逐一排查。
问4:NAT网关支持IPv6吗?
公网NAT网关目前仅支持IPv4地址转换。如需IPv6公网访问,可使用IPv6网关产品。
问5:一个VPC可以创建多个NAT网关吗?
可以。一个VPC内可以创建多个公网NAT网关,用于实现不同业务系统的公网出口隔离,或在不同可用区分别部署以实现高可用。需注意VPC内NAT网关的数量有配额限制。
问6:NAT网关的费用包括哪些部分?
公网NAT网关的费用包括实例费用和CU(容量单位)费用两部分。实例费用按小时计费,CU费用根据实际使用的流量、新建连接数、并发连接数等指标综合计算。可购买NAT网关资源包抵扣CU费用。EIP本身也单独计费,包括保有费和信息流量费。




