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调整网络架构。
如果 ECS 实例已绑定 EIP,其出口 IP 优先级高于 SNAT 条目绑定的 EIP,SNAT 不会生效。请先在 ECS 控制台解绑 EIP,再配置 SNAT 条目。如果 ECS 持有固定公网 IP,需先将其转换为 EIP 后再解绑。SNAT 条目优先级:当多条 SNAT 条目源网段重叠时,遵循最长子网掩码匹配规则。例如,ECS粒度的SNAT条目源网段的子网掩码为/32,长度最长,优先级最高。
路由配置与 SNAT 粒度配置的关系路由配置和 SNAT 粒度配置是两个独立的环节,分别控制不同层面:
路由配置:决定哪些流量被引流到 NAT 网关。例如,在 VPC 系统路由表中配置 0.0.0.0/0 指向 NAT 网关,由于系统路由表默认关联 VPC 内所有交换机,该 VPC 下所有 ECS 实例访问公网的流量都会被路由到 NAT 网关。
SNAT 粒度配置:决定进入 NAT 网关后,对哪些源 IP 地址做转换。例如,选择交换机粒度,则仅该交换机下的 ECS 实例的流量会做源地址转换。
建议路由配置的范围与 SNAT 粒度保持一致。例如,路由表在 VPC 系统路由表配置 0.0.0.0/0 指向 NAT 网关时,SNAT 选择 VPC 粒度可确保所有流量都能匹配 SNAT 规则;如果 SNAT 选择交换机粒度,仅该交换机下的流量会完成地址转换并访问公网,其他交换机的流量虽然也会被路由到 NAT 网关,但因无匹配的 SNAT 规则而无法访问公网。
1. 创建公网 NAT 网关并绑定 EIP公网NAT网关需要绑定EIP才能正常工作。一个公网NAT网关最多可绑定20个EIP,可以前往配额管理页面自助提升配额。从2022年09月19日起,新创建的公网NAT网关绑定一个EIP时将占用NAT网关所在交换机的一个私网IP(已有NAT网关实例不受影响),请确保NAT网关所在交换机内私网IP地址充足,否则无法成功绑定。控制台前往NAT 网关 - 公网 NAT 网关购买页。
付费模式:按量付费。
地域:选择创建公网 NAT 网关的地域。
网络及可用区:选择公网 NAT 网关所属的VPC和交换机。此处选择的交换机用于为 NAT 网关分配私网 IP,绑定 EIP 时将占用该交换机的一个私网 IP 地址。创建成功后无法修改。
容灾类型:选择 NAT 网关的容灾部署模式。
跨可用区容灾(默认):在主备两个可用区部署,当主可用区故障时自动切换至备可用区。
单可用区容灾:仅在所选可用区内部署,通过设备级冗余保障高可用。实例费为跨可用区容灾的 50%,CU 费为 80%。
弹性公网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粒度:所属VPC下的所有ECS均可以通过配置的SNAT规则访问公网。
交换机粒度:所选交换机下的所有 ECS 实例可通过该 SNAT 条目经 NAT 网关访问公网。
一个公网 NAT 网关支持为同一 VPC 内的多个交换机分别创建 SNAT 条目,各交换机下配置了 SNAT 规则的 ECS 实例均可通过该 NAT 网关访问公网。此处选择的交换机决定 SNAT 规则的生效范围,与创建 NAT 网关时选择的交换机无关。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 进入详情页,单击自定义路由条目页签,根据路由表类型执行对应操作。
交换机绑定系统路由表时:
系统路由表中不存在 0.0.0.0/0 的路由条目:创建该 VPC 内的第一个公网 NAT 网关时,系统将自动配置指向该公网 NAT 网关的路由条目,无需手动操作。
系统路由表中已存在 0.0.0.0/0 的路由条目:找到该路由条目,单击编辑,将下一跳类型选择为NAT网关,选择目标公网 NAT 网关实例。
配置后,VPC 内所有交换机均可通过该 NAT 网关访问公网。交换机绑定自定义路由表时:单击添加路由条目,目标网段填写 0.0.0.0/0,下一跳类型选择NAT网关,选择目标公网 NAT 网关实例。
配置后,仅绑定了该路由表的交换机可通过 NAT 网关访问公网。API调用CreateRouteEntry添加单个路由条目
调用ModifyRouteEntry调整路由条目下一跳。
验证网络连通性登录 ECS 实例,执行以下命令。
# 确保 ECS 实例所属的安全组已放行访问公网的对应流量
# 测试能否访问公网
ping www.aliyun.com
# 查看当前出口公网IP,应显示为NAT网关绑定的EIP
curl ifconfig.me