这是 VPC 架构中最重要的一块拼图之一。如果你掌握了「让子网访问公网」的完整流程,基本上就能理解 AWS 网络配置的 80%。
🎯 目标:让子网中的 EC2 实例能访问公网
我们要实现的场景是:
启动一台 EC2,部署个服务(比如 Nginx),能上网(如 curl 官网)、也能被公网访问(如用浏览器访问它的 IP)
🛠️ 实现这个目标,必须满足三个条件(一个都不能少):
条件 | 名称 | 说明 |
---|---|---|
✅ 条件1 | Internet Gateway (IGW) | 给整个 VPC 开一扇通向互联网的大门 |
✅ 条件2 | 路由表(Route Table) | 明确告诉子网:到公网走 IGW |
✅ 条件3 | 公网 IP 地址(Public IP) | 实例或 ENI 本身要有“门牌号”,外部才能找到你 |
✅ 三件套详细说明
条件 1:创建并附加 IGW
aws ec2 create-internet-gateway
aws ec2 attach-internet-gateway --vpc-id vpc-xxxx
或者控制台:VPC → Internet Gateway → Create → Attach to VPC
条件 2:更新子网关联的路由表,添加一条:
目标:0.0.0.0/0
下一跳:Internet Gateway (igw-xxxx)
意思是:“所有非内网流量都走 IGW”
确保这个路由表是和你的子网关联的。
条件 3:实例分配公网 IP
- ✅ 启动 EC2 实例时,选项中“Auto-assign public IP” 设为 Enable
- 或者启动后给 ENI 添加 Elastic IP(弹性公网 IP)
🧠 总结一句话口诀:
“子网要出门:得有大门(IGW)、指路牌(路由表)、身份证(公网 IP)”
📊 图解流程(文字版)
┌──────────────────────────────┐
│ VPC │
│ ┌──────────────────────┐ │
│ │ Subnet A │◄─┐│
│ │ ┌────────────┐ │ ││
│ │ │ EC2实例 │ │ ││
│ │ └────┬───────┘ │ ││
│ │ │ENI(含公网IP)│ ││
│ └──────┼───────────────┘ ││
│ ▼ ▲ ││
│ Route Table NACL │ │
│ (0.0.0.0/0 → IGW) │ │
│ │ │ │
│ ▼ │ │
│ IGW(Internet Gateway) │
│ │ │
│ ▼ │
│ Internet(公网) │
└──────────────────────────────┘
🧪 实战建议
-
默认 VPC 通常已经配好了 IGW 和路由表,是最好的练手场景。
-
自定义 VPC 要手动配置三件套,否则 EC2 默认无法联网。
-
安装完 EC2 后可以测试:
curl ifconfig.me ping www.google.com
「内网子网 + NAT 网关 访问外网但不暴露」的经典企业内外网架构
这个架构是企业 VPC 设计中的核心模式之一。它解决了一个关键矛盾:
“我希望服务访问公网(比如下载依赖、调用第三方 API),但我又不希望公网能访问它(出得去,进不来)。”
这就用到了 私有子网 + NAT 网关 的经典组合。
🧱 场景目标
我们有两类子网:
类型 | 子网位置 | 是否分配公网 IP | 是否能访问公网 | 是否能被公网访问 |
---|---|---|---|---|
公有子网 | DMZ 区域 | ✅ 有公网 IP | ✅ 能访问公网 | ✅ 被公网访问 |
私有子网 | 内网服务区域 | ❌ 无公网 IP | ✅ 能访问公网 | ❌ 不能被公网访问 |
🧠 企业为什么这么设计?
- 内网的服务(如数据库、业务后端)要更新软件、下载镜像、连第三方 API → 要访问公网
- 但这些服务不希望暴露 IP,以防止被攻击或暴露接口
- 这时候就让它们通过 NAT Gateway 统一“代理出去”
🔄 NAT Gateway 的作用是:
“像一个内网翻墙器,多个内网实例出门时统一走它。”
它会把内网实例的私有 IP 转换成 NAT 网关绑定的公网 IP,然后出网,公网看到的不是源实例的 IP,而是 NAT 的 IP。
🔧 实现步骤(你可以类比前面的三件套):
步骤 | 操作 |
---|---|
1 | 创建一个 NAT Gateway,绑定一个 Elastic IP(公网地址) |
2 | 把 NAT 网关部署在 公有子网中(因为它要连公网) |
3 | 给私有子网关联一个 路由表,加一条: 0.0.0.0/0 -> NAT Gateway |
4 | 私有子网的实例不要分配公网 IP |
🌐 路由逻辑图
┌───────────────┐ ┌────────────┐
│ 私有子网 │ │ 公有子网 │
│ EC2 (无公网IP)│──路由表──►│ NAT Gateway│──► Internet
└───────────────┘ └────────────┘
📦 示例结构整理
VPC (10.0.0.0/16)
├── 公有子网 A (10.0.1.0/24)
│ └── NAT Gateway + EIP
├── 私有子网 B (10.0.2.0/24)
│ └── 后端 EC2,无公网 IP
-
公有子网:部署 NAT Gateway、可能还有负载均衡器(ALB)
-
私有子网:部署业务服务、数据库、安全敏感组件
-
路由配置:
- 公有子网 → IGW
- 私有子网 → NAT Gateway
✅ 这种架构的优势
优势 | 解释 |
---|---|
出得去、进不来 | 内网实例安全,不暴露在公网 |
公网访问通过负载均衡器或 Bastion | 控制入口,防止攻击 |
能正常使用云服务(S3, STS等) | NAT Gateway 支持访问 AWS 公网服务 |
合规性更强 | 安全审计、运维分离更规范 |
🚫 注意事项
注意点 | 建议 |
---|---|
NAT Gateway 计费按流量 | 如果不希望额外费用,可替代方案:NAT 实例(自建 EC2) |
不能跨 AZ 部署 NAT Gateway | 每个 AZ 内都需一个 NAT GW(或设定跨 AZ 路由) |
默认路由表不要搞混 | 公有子网走 IGW,私有子网走 NAT |
🧠 总结一句话口诀:
“让内网能访问外网但又不被访问:公有 NAT + 私有子网 + 路由表指向 NAT”