这个架构是企业 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”