阿里云的NAT和弹性公网IP,解决ECS机器访问外网的实现方案

一、背景

刚申请的ECS机器可以访问内网,却无法访问外网。

bash 复制代码
curl: (7) Failed to connect to xx.xxx.com port 443: Connection timed out

经测试,ping 百度也不通。

因为新创建的阿里云 ECS 实例默认没有开启公网访问能力导致的。

本文涉及到的阿里云几个组件:

  • NAT网关
  • 弹性公网IP
  • 资源组
  • ECS

二、总体架构

目标:

资源组B是新建的一套环境,需要与原资源组A进行隔离并区分。

所以,我们将新建NAT和弹性公网IP,然后指向资源组B。

但是,我们第一次新建NAT的时候,误选择了资源组A,而非资源组B。

需要注意的是,在创建弹性公网IP的时候,别选错了资源组。

三、NAT网关

NAT网关起什么作用?

多台内网服务器只需主动访问外网,不想每台都买 EIP。

为整个 VPC/交换机内的多台内网 ECS 提供公网访问。

一般地,它会绑定 EIP 才能上网。

属性 说明
本质 阿里云托管的网关设备,有公网出口
需要 EIP 必须绑定 EIP 才能上网(或共享带宽包)
作用 为整个 VPC/交换机内的多台内网 ECS 提供公网访问
使用场景 多台内网服务器只需主动访问外网,不想每台都买 EIP

NAT 网关不是 VPN:它只解决"内网访问外网",不解决"外网访问内网"。

1、新建NAT

选择对应的资源组和弹性公网IP。

前文也说了,因为我们初期新建NAT的时候,误选择了资源组,所以需要额外配置SANT。

而弹性公网IP,见本文的第三部分。

NAT 网关本身不能独立上网,它必须绑定 EIP 或共享带宽包,然后通过 SNAT 规则把内网 ECS 的流量"代理"出去。

下面看一看SNAT是如何配置的。

2、SNAT

通过SNAT为专有网络内无公网IP的ECS实例提供访问互联网的代理服务。

  • SNAT = 内网出站的"护照",没有它,内网 ECS 的出网包在互联网上是"黑户",会被丢弃。

把内网 ECS 的私网 IP 转换为 NAT 网关的公网 IP(EIP)。

SNAT依赖 NAT 网关存在,本身不是独立产品。

属性 说明
本质 NAT 网关内部的一种转换规则/功能
依赖关系 依赖 NAT 网关存在,本身不是独立产品
作用 把内网 ECS 的私网 IP 转换为 NAT 网关的公网 IP(EIP)
配置位置 在 NAT 网关控制台创建 SNAT 条目
功能 全称 方向 作用 是否必须
SNAT Source NAT 内网 → 外网 让内网实例主动访问互联网 必须(要上网的话)
DNAT Destination NAT 外网 → 内网 让外网访问内网特定端口(如 SSH、Web) ❌ 可选

四、弹性公网IP

属性 说明
本质 独立的公网 IP 资源,可绑定/解绑
绑定对象 单个 ECS、SLB、NAT 网关、ENI 网卡
特点 灵活漂移,ECS 挂了可以绑到另一台
使用场景 需要被外网直接访问,或单台服务器上网



五、资源组

六、ECS

七、 总结

概念 一句话定位
EIP 公网地址的"手机号",谁绑定谁就能上网/被访问
NAT 网关 内网 ECS 的"共享路由器",必须插一张 EIP 的"SIM 卡"才能工作
SNAT NAT 网关内部的"拨号规则",告诉它怎么帮内网 ECS "代拨"上网
相关推荐
葫芦和十三1 小时前
图解 MongoDB 23|两地三中心:跨可用区部署怎么扛机房故障
后端·mongodb·agent
勇哥java实战分享3 小时前
PaddleOCR 太慢?我换成 RapidOCR 后,速度直接起飞
后端
苏三说技术7 小时前
LangChain4j 和 LangGraph4j,哪个更好?
后端
ServBay9 小时前
7 个AI开发中真正用得上的 MCP Server,配合Claude Code食用效果更佳
后端·claude·mcp
妙码生花9 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十五):优化细节、网络请求封装
前端·后端·ai编程
用户6757049885029 小时前
Go 语言里判断字符串为空,90% 的人都写错了!
后端·go
用户67570498850210 小时前
Go 进阶必修:90% 的人都没用对的“表驱动法”
后端·go
小兔崽子去哪了10 小时前
Java 生成二维码解决方案
java·后端
苍何10 小时前
懂事的 Agent 已经开始自己看屏幕干活了,效率起飞!
后端