阿里云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网关之前,需要完成以下准备工作。
3.1 创建VPC和交换机
首先确认已创建VPC和交换机。如果尚未创建,需先在阿里云VPC控制台完成VPC及交换机的创建。建议VPC网段选择RFC 1918规定的私有地址段,如192.168.0.0/16、172.16.0.0/12或10.0.0.0/8,避免与本地数据中心或其他云环境网段冲突。交换机应部署在需要访问公网的ECS所在的可用区。
3.2 准备弹性公网IP(EIP)
NAT网关必须绑定至少一个EIP才能正常工作。如果尚未创建EIP,可以在创建NAT网关时选择“新购弹性公网IP”,系统会自动完成创建与绑定。EIP是独立的公网IP资源,可以单独创建与持有、动态绑定与解绑,比ECS固定公网IP更加灵活。
3.3 创建服务关联角色
首次创建NAT网关时,需要创建服务关联角色。系统会提示您完成该操作,单击“创建关联角色”即可自动完成授权。
4. 创建公网NAT网关
完成准备工作后,进入公网NAT网关的创建流程。
4.1 控制台创建步骤
登录专有网络管理控制台,在左侧导航栏中选择“NAT网关”>“公网NAT网关”。单击“创建公网NAT网关”。配置以下关键参数:
- 付费类型:选择按量付费。NAT网关仅支持后付费模式,计费方式为按使用量计费。
- 所属地域:选择与您的ECS实例相同的地域。
- 所属专有网络:选择步骤3.1中创建的VPC。
- 关联交换机:选择VPC内的一个交换机。NAT网关将部署在该交换机中,创建成功后无法修改。
- 容灾类型:支持跨可用区容灾和单可用区容灾两种模式。跨可用区容灾模式下NAT网关跨可用区冗余部署,单可用区故障时自动切换;单可用区容灾模式部署在单一可用区内。
- 弹性公网IP:选择“新购弹性公网IP”自动创建并绑定EIP,或选择“选择已有”绑定已有的EIP。
勾选服务协议,单击“立即购买”完成支付。
4.2 通过阿里云CLI创建
对于需要自动化运维的场景,可以使用阿里云CLI创建NAT网关。以下为示例命令:
# 创建公网NAT网关
aliyun vpc CreateNatGateway \
--RegionId cn-hangzhou \
--VpcId vpc-xxxxxxxx \
--VSwitchId vsw-xxxxxxxx \
--NatGatewayName my-nat-gateway \
--NatType Enhanced \
--InternetChargeType PayByLcu创建完成后,需要绑定EIP:
# 绑定EIP到NAT网关
aliyun vpc AssociateEipAddress \
--AllocationId eip-xxxxxxxx \
--InstanceId ngw-xxxxxxxx \
--InstanceType Nat4.3 通过Terraform创建
使用Terraform可以实现基础设施即代码(IaC),便于版本控制和团队协作。以下为Terraform配置示例:
resource "alicloud_vpc" "default" {
vpc_name = "my-vpc"
cidr_block = "10.0.0.0/16"
}
resource "alicloud_vswitch" "default" {
vpc_id = alicloud_vpc.default.id
cidr_block = "10.0.1.0/24"
zone_id = "cn-hangzhou-g"
}
resource "alicloud_eip" "default" {
bandwidth = "100"
}
resource "alicloud_nat_gateway" "default" {
vpc_id = alicloud_vpc.default.id
vswitch_id = alicloud_vswitch.default.id
nat_gateway_name = "my-nat-gateway"
nat_type = "Enhanced"
}
resource "alicloud_eip_association" "default" {
allocation_id = alicloud_eip.default.id
instance_id = alicloud_nat_gateway.default.id
}5. 配置SNAT条目实现ECS访问公网
创建NAT网关并绑定EIP后,需要配置SNAT条目才能让VPC内的ECS实例通过NAT网关访问公网。
5.1 控制台配置SNAT
在NAT网关管理控制台,点击目标NAT网关实例ID进入详情页,切换到“SNAT管理”页签,点击“创建SNAT条目”。创建SNAT条目时需要配置以下参数:
- SNAT条目粒度:支持VPC粒度、交换机粒度和ECS粒度三种。VPC粒度为整个VPC内所有资源提供SNAT能力;交换机粒度仅为指定交换机内的ECS提供SNAT;ECS粒度(源网段掩码为/32)为单台ECS提供SNAT。
- 选择交换机:当选择交换机粒度时,指定需要访问公网的交换机。
- 源网段:当选择VPC粒度时,系统自动填充VPC的网段。
- 选择弹性公网IP地址:选择已绑定到NAT网关的EIP。支持选择多个EIP实现出口IP的负载均衡。
- 条目名称:输入便于识别的名称。
配置完成后,单击“确定”即可。
5.2 SNAT工作原理详解
以ECS实例(私网IP:192.168.1.100)访问公网为例,SNAT的工作流程如下:
- 路由转发:按照VPC路由表中指向NAT网关的路由规则,访问数据包被转发至公网NAT网关。
- 源地址转换:NAT网关接收到数据包后,根据SNAT规则配置将源IP地址192.168.1.100转换为NAT网关绑定的EIP。同时记录原始五元组(协议、源IP、源端口、目的IP、目的端口)与转换后的五元组(协议、EIP、公网源端口、目的IP、目的端口)的对应关系。
- 发往公网:经过地址转换后的数据包被发送至互联网,该请求的发起方为EIP,而非ECS实例的私网IP。
- 响应返回:当公网的目标服务器返回响应数据包时,按照会话映射表还原为原始的私网IP,从而转发回ECS实例。
5.3 验证SNAT功能
配置完成后,登录无公网IP的ECS实例,执行以下命令验证公网出口IP:
curl myip.ipip.net若返回的公网出口IP与NAT网关SNAT条目中配置的EIP一致,说明ECS实例已通过NAT网关的SNAT功能成功访问互联网。
也可以使用ping命令测试网络连通性:
ping www.aliyun.com如果能接收到回复报文,表示公网访问已配置成功。
6. 配置DNAT条目将内网服务暴露到公网
DNAT功能让公网用户能够通过NAT网关绑定的EIP访问VPC内ECS实例提供的服务。
6.1 控制台配置DNAT
在NAT网关实例详情页,切换到“DNAT管理”页签,点击“创建DNAT条目”。配置以下参数:
- 公网IP地址:选择NAT网关绑定的EIP。
- 公网端口:公网用户访问时使用的端口。
- 私网IP地址:目标ECS实例的私网IP。
- 私网端口:ECS实例上服务监听的端口。
- 协议类型:TCP、UDP或任意协议。
6.2 DNAT的两种映射模式
DNAT支持两种映射模式:
- 端口映射:将公网IP的特定端口映射到内网ECS的指定端口。例如将EIP的80端口映射到ECS的8080端口,适合多服务共用同一个EIP的场景。
- IP映射:将整个公网IP映射到一台ECS,适合需要完整IP级访问的场景。
6.3 验证DNAT功能
配置DNAT条目后,从本地设备执行以下命令测试连通性:
ssh root@<公网IP> -p <公网端口>若成功连接,说明已通过NAT网关的DNAT功能实现公网访问。需要注意的是,如果ECS实例本身绑定了EIP,外部用户无法通过DNAT条目访问该ECS实例,需要先解绑ECS实例的EIP。
7. 路由表与NAT网关的协同工作机制
路由表是NAT网关能够正常工作的关键基础设施。增强型公网NAT网关创建后,系统会在VPC的路由表中自动添加一条目标网段为0.0.0.0/0、下一跳为NAT网关的路由条目,用于将流量路由到NAT网关。
7.1 自动路由与手动路由
SNAT功能配置后是否生效,取决于VPC内访问公网的流量是否被正确路由到NAT网关。具体规则如下:
- 自动设置:如果VPC系统路由表中无0.0.0.0/0路由,该VPC创建第一个公网NAT网关时,系统会自动添加此路由。
- 手动设置:如果使用自定义路由表,或系统路由表中已存在0.0.0.0/0路由,需要手动添加或调整自定义路由条目。建议遵循最小权限原则,配置目标网段为访问的具体公网网段。
7.2 路由优先级
当多条路由的目标网段重叠时,遵循最长前缀匹配原则转发流量。例如,0.0.0.0/0和10.0.0.0/8两条路由中,访问10.0.0.1的流量会匹配10.0.0.0/8这条更精确的路由。
8. 高可用部署方案
对于生产环境,建议采用高可用部署方案以确保业务连续性。
8.1 跨可用区容灾
公网NAT网关支持跨可用区容灾部署模式。在该模式下,NAT网关跨可用区冗余部署,单可用区故障时自动容灾切换。适用于ECS等实例分布在多个可用区、需要共享同一NAT网关访问公网的场景。
8.2 多NAT网关部署
当VPC内需要多个NAT网关时,可以通过合理规划实现高可用。例如,在不同的可用区部署独立的NAT网关,为不同交换机提供公网访问能力。如果不需要多个NAT网关,建议删除未使用的NAT网关,并将所有交换机的SNAT条目添加到剩余的NAT网关中。
8.3 结合负载均衡实现高可用
将多台ECS实例添加到同一个负载均衡器(CLB)后端服务器组,配置CLB监听和转发规则,使用NAT网关的公网IP作为统一出入口。当ECS实例故障时,CLB自动屏蔽故障实例并将请求分发给正常运行的实例,保持业务高可用性。
9. 多VPC共用NAT网关
通过VPC对等连接可以实现多个VPC共用一个公网NAT网关。对等连接可以在两个VPC之间建立网络连接,实现私网互通。通过在两个VPC间创建对等连接并配置路由条目,然后在公网NAT网关配置SNAT条目,即可实现多个VPC通过同一个公网NAT网关访问公网。
10. 计费模式与成本优化
10.1 计费方式
公网NAT网关的付费类型仅为后付费,计费方式为按使用量计费。计费项包括实例费和容量单位CU费。计费周期为1小时,不足1小时按1小时计算。
10.2 按量计费的成本构成
- 实例费:按NAT网关实例的保有时长计费。
- CU费:按实际使用的容量单位(CU)计费。
跨可用区容灾模式的NAT网关仅支持按量付费,不支持包年包月。
11. 配额限制
使用NAT网关时需注意以下配额限制:
- 每个VPC可创建的公网NAT网关数量有上限,具体配额可在阿里云控制台“配额管理”中查看。
- 每个NAT网关可绑定的EIP数量有限制。
- 每个NAT网关可创建的SNAT条目和DNAT条目数量有限制。
如果业务需求超出默认配额,可以提交工单申请提升配额。
12. 常见故障排查
12.1 SNAT无法访问公网
按照以下步骤排查:
- 检查路由配置:在公网NAT网关实例详情页查看指向NAT的专有网络路由信息,确认是否有指向该公网NAT网关的路由条目。
- 检查SNAT条目状态:在SNAT管理页签确认SNAT条目的状态为“可用”。
- 检查源地址:确认访问公网的源地址在SNAT条目的源网段内。
- 检查EIP绑定状态:确认NAT网关已绑定至少一个EIP且状态正常。
12.2 DNAT无法被公网访问
按照以下步骤排查:
- 检查安全组:确认ECS实例的安全组已放行对应服务端口。
- 检查EIP绑定:如果ECS实例本身绑定了EIP,需要先解绑才能通过DNAT访问。
- 检查DNAT条目配置:确认公网端口、私网IP、私网端口和协议类型配置正确。
- 检查NAT网关模式:确认公网NAT网关已切换至NAT模式。
12.3 其他常见问题
- 可用区无法购买NAT网关:由于资源建设原因,NAT网关在某些可用区尚未部署,可以调用ListEnhancedNatGatewayAvailableZones查询支持创建的可用区。
- EIP找不到:创建的EIP和NAT网关不在同一地域,请选择与NAT网关同一地域下的EIP。
- 一个EIP能否同时用于DNAT和SNAT:可以,但当DNAT条目粒度为任意端口时,该EIP将无法再用于创建其他DNAT或SNAT条目。
13. 企业级最佳实践
13.1 最小权限原则
在配置SNAT时,建议遵循最小权限原则,配置目标网段为访问的具体公网网段,而不是简单地使用0.0.0.0/0。这样可以避免VPC内资源意外访问不应访问的公网地址。
13.2 多EIP负载均衡
当业务流量较大时,可以为NAT网关绑定多个EIP,并在创建SNAT条目时选择“使用多IP”。多个EIP可以实现出口流量的负载均衡,避免单一EIP成为性能瓶颈。
13.3 监控与告警
建议为NAT网关配置监控告警,关注以下指标:
- 公网出流量和入流量
- 并发连接数
- 丢包率
- EIP带宽利用率
通过云监控服务可以实时查看这些指标,并在异常时触发告警通知。
13.4 定期审计
定期审查NAT网关的SNAT和DNAT条目配置,删除不再使用的规则,避免安全风险和不必要的成本支出。
14. 总结
本文全面介绍了阿里云VPC中公网NAT网关的配置方法,从产品选型、创建NAT网关、绑定EIP、配置SNAT和DNAT条目,到路由表机制、高可用部署、自动化配置、故障排查和最佳实践。通过掌握这些技能,您可以灵活地为VPC内资源提供安全、高效、高可用的公网访问能力。
无论是开发测试环境还是生产环境,NAT网关都是VPC公网访问的核心组件。结合自动化工具(如阿里云CLI和Terraform)可以实现基础设施的代码化管理,提升运维效率。同时,合理的架构设计(如跨可用区容灾、多EIP负载均衡)和持续的监控告警,能够确保业务的稳定运行。
Q&A
Q1:NAT网关和EIP有什么区别?什么时候该用NAT网关?
A1:EIP是独立的公网IP资源,可以绑定到单个ECS实例上使其获得公网IP。NAT网关则是一种网络地址转换服务,可以让VPC内多台ECS共享一个或多个EIP访问公网。当您有多台ECS需要访问公网但不想为每台都分配EIP时,或者需要统一管理公网出入口时,应该使用NAT网关。
Q2:SNAT和DNAT可以同时配置吗?
A2:可以。SNAT用于VPC内资源主动访问公网,DNAT用于公网用户访问VPC内的服务。两者可以同时配置在同一个NAT网关实例上,互不干扰。但需要注意,当一个EIP同时用于SNAT和DNAT时,如果DNAT条目粒度为任意端口,则该EIP无法再用于创建其他DNAT或SNAT条目。
Q3:配置SNAT后ECS仍然无法访问公网,怎么办?
A3:按照以下步骤排查:首先检查VPC路由表中是否有指向NAT网关的0.0.0.0/0路由;其次检查SNAT条目的状态是否为“可用”;然后确认ECS实例所在的交换机在SNAT条目的源网段内;最后确认NAT网关已绑定EIP且EIP状态正常。
Q4:NAT网关支持IPv6吗?
A4:公网NAT网关目前主要支持IPv4地址转换。如果您的VPC需要IPv6公网访问,可以考虑为VPC和交换机开启IPv6功能,系统会自动创建IPv6网关。对于纯IPv6场景,建议使用IPv6网关而非NAT网关。
Q5:NAT网关的计费方式是怎样的?
A5:公网NAT网关仅支持按量付费(后付费),计费方式为按使用量计费。计费项包括实例费和容量单位CU费。计费周期为1小时,不足1小时按1小时计算。跨可用区容灾模式的NAT网关仅支持按量付费,不支持包年包月。
Q6:如何实现多个VPC共用同一个NAT网关?
A6:通过VPC对等连接可以实现多个VPC共用一个公网NAT网关。在两个VPC之间创建对等连接并配置路由条目实现私网互通,然后在公网NAT网关配置SNAT条目,即可实现多个VPC通过同一个NAT网关访问公网。





