AWS优惠码 AWS 公有子网与私有子网设计教程:VPC、NAT、路由表与安全组配置实践
很多用户搜索 AWS 公有子网与私有子网设计,并不是为了了解名词区别,而是卡在几个具体决策上:Web 服务器到底要不要放公有子网、数据库为什么不能直接分配公网 IP、私有子网中的 ECS/EC2 如何安装软件包、NAT Gateway 是否一定要买两台、跨可用区后路由表怎么绑、实例明明有安全组却还是连不上。本文直接围绕这些操作问题展开,给出一套可落地的配置流程,适合网站部署、应用分层、数据库隔离和生产环境整改。
一、用户最关心的不是定义,而是这几个设计决策
实际操作中,用户通常在以下阶段出现犹豫或配置错误:
- 创建 VPC 后,不知道公有子网和私有子网各放什么资源。
- AWS优惠码 EC2 需要远程 SSH/RDP 登录,但又不想直接暴露业务端口。
- RDS、Redis、应用服务器之间通信正常,但私有子网实例无法访问外网安装依赖。
- 控制台里已经创建了子网,却因为路由表未关联,导致“看起来配置了,实际上不生效”。
- 为了省钱只建一个 NAT Gateway,后续某个可用区故障时私有子网全部失去外网出口。
如果你的目标是部署一个常见三层架构,最稳妥的划分通常是:
| 资源类型 | 建议子网 | 原因 |
| ALB/NLB | 公有子网 | 需要接收公网流量 |
| 跳板机 Bastion | 公有子网 | 仅开放受控管理入口 |
| 应用服务器 EC2/ECS | 私有子网 | 避免直接暴露到公网 |
| RDS/MySQL/PostgreSQL | 私有子网 | 仅允许应用层访问 |
| Redis/ElastiCache | 私有子网 | 降低暴露面 |
如果你当前在纠结“应用服务器需不需要公网 IP”,答案通常是不需要。更常见做法是:负载均衡进公有子网,应用实例在私有子网,出网流量通过 NAT Gateway。
二、开始之前先把规划做对,否则后面很难改
1. 账号与权限要求
建议使用具备以下权限的 IAM 用户,而不是长期直接使用根账号:
- AmazonVPCFullAccess
- AmazonEC2FullAccess
- IAMReadOnlyAccess 或最小化自定义 IAM 权限
- 如需创建 RDS,还需要 AmazonRDSFullAccess
AWS优惠码 如果企业账号启用了 Service Control Policy,需要先确认是否允许创建 Internet Gateway、Elastic IP 和 NAT Gateway,否则控制台会出现可以点但无法提交的情况。
2. 资源与地址规划
AWS优惠码 不要在创建时随意填写网段。后期扩容、对接专线、接入办公网、打通多 VPC 时,CIDR 冲突会非常麻烦。一个适合中小业务起步的规划如下:
| 资源 | 建议配置 | 示例 |
| VPC CIDR | /16 | 10.10.0.0/16 |
| 公有子网-A | /24 | 10.10.1.0/24 |
| 公有子网-B | /24 | 10.10.2.0/24 |
| 私有应用子网-A | /24 | 10.10.11.0/24 |
| 私有应用子网-B | /24 | 10.10.12.0/24 |
| 私有数据库子网-A | /24 | 10.10.21.0/24 |
| 私有数据库子网-B | /24 | 10.10.22.0/24 |
这样做有两个好处:一是便于按功能分层管理路由和 ACL,二是为后续扩展缓存、容器节点、VPN 接入预留了足够空间。
3. 可用区选择建议
至少选择两个可用区,不要把公有、私有、数据库子网全部放在同一个 AZ。生产环境中,最容易被忽略的问题不是“能不能用”,而是“单 AZ 故障时会不会全站失联”。
推荐结构:
- AWS优惠码 AZ-a:公有子网-a、应用私有子网-a、数据库私有子网-a
- AZ-b:公有子网-b、应用私有子网-b、数据库私有子网-b
AWS优惠码 三、控制台创建流程:从 VPC 到可用网络架构
步骤1:创建 VPC
进入 AWS 管理控制台,打开 VPC 服务。
点击“Your VPCs”或“VPC”,选择“Create VPC”。
建议填写:
| 参数 | 建议值 | 说明 |
| Name tag | prod-vpc | 按环境命名,便于后期识别 |
| IPv4 CIDR | 10.10.0.0/16 | 避免与本地办公网冲突 |
| Tenancy | Default | 大多数场景无需 Dedicated |
创建完成后,先确认 DNS Hostnames 和 DNS Resolution 已启用。很多用户在后面使用内网域名时才发现默认没有打开。
步骤2:创建公有子网与私有子网
进入“Subnets”,点击“Create subnet”。同一个 VPC 内分别创建 6 个子网。
| 子网名称 | 可用区 | CIDR | 用途 |
| public-a | ap-east-1a 或所选 AZ-a | 10.10.1.0/24 | ALB、Bastion、NAT |
| public-b | AZ-b | 10.10.2.0/24 | ALB、NAT |
| app-private-a | AZ-a | 10.10.11.0/24 | 应用服务器 |
| app-private-b | AZ-b | 10.10.12.0/24 | 应用服务器 |
| db-private-a | AZ-a | 10.10.21.0/24 | 数据库 |
| db-private-b | AZ-b | 10.10.22.0/24 | 数据库 |
创建完公有子网后,选中 public-a 和 public-b,点击“Edit subnet settings”,开启“Auto-assign public IPv4 address”。这一项如果不打开,即使路由有公网出口,新建的 EC2 也不会自动获得公网 IP。
步骤3:创建 Internet Gateway 并挂载到 VPC
进入“Internet Gateways”,点击“Create internet gateway”,命名为 igw-prod,创建后点击“Attach to VPC”,选择刚才的 prod-vpc。
如果这一步漏掉,公有子网中的实例就算分配了公网 IP,也无法被公网访问。
步骤4:创建路由表并关联子网
这里是最容易出错的环节。请至少创建三张路由表,而不是把所有子网都绑到默认路由表。
| 路由表 | 关联子网 | 核心路由 |
| rtb-public | public-a、public-b | 0.0.0.0/0 -> Internet Gateway |
| rtb-app-private-a/b | app-private-a、app-private-b | 0.0.0.0/0 -> NAT Gateway |
| rtb-db-private | db-private-a、db-private-b | 通常不配默认公网路由 |
具体操作:
- AWS优惠码 进入“Route Tables”点击“Create route table”。
- 在“Routes”页签点击“Edit routes”。
- 为 rtb-public 添加 0.0.0.0/0 指向 igw-prod。
- 在“Subnet associations”页签,把 public-a、public-b 关联进去。
注意:数据库私有子网通常不建议直接配置默认外网出口。数据库补丁升级、备份传输等如有需求,优先使用厂商托管能力或专用运维通道。
步骤5:创建 NAT Gateway,让私有子网能出网
进入“NAT Gateways”,点击“Create NAT gateway”。
建议每个可用区创建一个 NAT Gateway,并分别放在对应的公有子网中:
| NAT 名称 | 所在子网 | 弹性公网 IP |
| nat-a | public-a | 新申请 EIP |
| nat-b | public-b | 新申请 EIP |
然后给 app-private-a 所关联的路由表添加:0.0.0.0/0 指向 nat-a;app-private-b 走 nat-b。
很多人会省成本只建一个 NAT Gateway,再让两个可用区都指向同一个 NAT。这样短期能用,但存在两个问题:
- 单可用区故障时,另一侧私有子网可能失去出网能力。
- 跨 AZ 转发会增加流量费用和时延。
步骤6:创建 EC2 实例并放入正确子网
AWS优惠码 进入 EC2 控制台,点击“Launch instances”。这里分别创建一台跳板机和一台应用服务器。
6.1 跳板机配置
| 参数 | 建议值 |
| AMI | Amazon Linux 2023 或 Ubuntu 22.04 |
| 实例类型 | t3.micro / t3.small |
| 子网 | public-a |
| Auto-assign Public IP | Enable |
| 安全组 | 仅放行你的办公公网 IP 的 22 端口 |
如果是 Windows 跳板机,则开启 3389 端口,但务必限制源地址,不要开放 0.0.0.0/0。
6.2 应用服务器配置
| 参数 | 建议值 |
| AMI | 按业务系统选择 Linux 或 Windows |
| 实例类型 | t3.small、t3.medium 或 c7g.large 起步 |
| 子网 | app-private-a 或 app-private-b |
| Public IP | Disable |
| 安全组 | 仅允许来自 ALB、安全组或跳板机的流量 |
Linux 系统安装完成后,通常通过 SSH 从跳板机进入:
ssh -i app.pem [email protected]
Windows 私有实例则通过跳板机做 RDP 中转,或使用 Systems Manager Session Manager 替代传统 RDP 暴露。
步骤7:创建 RDS 并放到私有数据库子网
进入 RDS 控制台,点击“Create database”。在“Connectivity”配置中:
| 参数 | 建议值 |
| Public access | No |
| VPC | prod-vpc |
| DB subnet group | 选择 db-private-a、db-private-b 所在组 |
| Security group | 只允许来自应用服务器安全组的 3306/5432 |
数据库连接失败,最常见原因不是密码错误,而是安全组引用关系没配对:应用服务器安全组出站默认允许,但数据库安全组入站未放行应用安全组。
四、远程连接、端口开放与系统初始化怎么做更稳妥
1. SSH 远程连接
Linux 服务器建议优先使用密钥对,不要启用密码登录。购买或创建实例时下载 .pem 文件,本地执行:
chmod 400 mykey.pem
ssh -i mykey.pem ec2-user@公网IP
如果 SSH 连接超时,优先检查以下四项:
- 实例是否真的在公有子网。
- 是否分配了公网 IP 或绑定了 EIP。
- 公有路由表是否配置了 0.0.0.0/0 指向 IGW。
- 安全组是否放行 22,系统内部 firewalld/iptables 是否拦截。
2. RDP 远程桌面连接
Windows 实例部署在公有子网时,安全组开放 3389 仅给办公 IP 段。首次登录需要在 EC2 控制台获取 Administrator 密码。
如果你只是临时运维,建议不要长期保留 3389 对公网开放。更稳妥的方法是:
- 使用跳板机中转。
- AWS优惠码 使用 AWS Systems Manager Session Manager。
- 限制源地址为固定办公出口 IP。
3. Linux/Windows 防火墙设置
即使 AWS 安全组已放行,系统内的防火墙也可能导致端口不通。
Linux 常见检查:
sudo systemctl status firewalld
sudo firewall-cmd --list-all
sudo ss -lntp
Windows 常见检查:
- Windows Defender Firewall 入站规则是否放行 80、443、3389。
- IIS 或应用服务是否真实监听在 0.0.0.0,而不是仅监听 127.0.0.1。
五、不同业务场景下,子网该怎么选
1. 个人开发者
如果只是部署测试环境,可简化为 1 个公有子网 + 1 个私有子网:
- 公有子网:跳板机、测试 Nginx
- 私有子网:应用服务、测试数据库
- NAT:可按需启用,非持续在线场景注意成本
适合预算有限但又需要演练分层架构的场景。
2. 企业网站
推荐 ALB 放公有子网,Web/API 实例放私有子网,RDS 放数据库私有子网。这样可以把公网暴露面集中到负载均衡层,证书、WAF、HTTPS 也更容易统一管理。
3. 跨境业务
应优先根据用户来源选择 Region,再在该 Region 内做双 AZ 部署。不要先随意选地域,后面再试图靠 CDN 或加大带宽弥补基础时延问题。
上线前建议执行:
- 从目标用户地区做 Ping、TCPing、HTTP 首包时延测试。
- 确认 EIP 是否受目标地区访问策略影响。
- 如需 HTTPS,提前申请 ACM 证书并在 ALB 终止 SSL。
4. 数据库业务
数据库实例不要放公有子网,不要给数据库开放公网入口。备份、恢复、迁移时,优先通过内网链路、DMS、Bastion 或专线/VPN 实施。
MySQL 高并发场景中,除了子网隔离,还应检查:
- 参数组中的 max_connections
- innodb_buffer_pool_size
- 慢查询日志是否开启
- 应用层连接池是否过量创建连接
六、最常见的错误案例与排查路径
案例1:实例在公有子网,但浏览器打不开网站
排查顺序:
- 确认实例安全组已放行 80/443。
- 确认系统防火墙已放行对应端口。
- 确认 Nginx/Apache/IIS 已启动并监听公网网卡。
- 确认子网绑定的路由表是公有路由表,而不是默认私有路由表。
案例2:私有子网服务器无法 yum update 或 apt update
通常是 NAT 路由问题:
- 确认私有路由表里 0.0.0.0/0 指向 NAT Gateway。
- 确认 NAT Gateway 本身位于公有子网。
- 确认 NAT 所在公有子网的路由表已指向 Internet Gateway。
- 确认 NACL 未拦截临时端口返回流量。
案例3:RDS 连不上,但 Ping 子网地址正常
RDS 不依赖 Ping 判断连通性,应直接测试端口:
telnet db-endpoint 3306
nc -zv db-endpoint 3306
重点检查数据库安全组是否允许“源为应用服务器安全组”的入站规则,而不是错误地只放行某个 IP。
案例4:EC2 创建时选了私有子网,却仍然被分配公网 IP
说明你在实例创建页手动启用了公网 IP 分配,或该子网启用了自动分配公网 IPv4。私有子网应关闭这项设置。
七、配置建议:按用户类型给出落地方案
| 用户类型 | 推荐架构 | 关键配置 | 注意事项 |
| 个人开发者 | 单 VPC,1 公有 + 1 私有 | 跳板机 + 私有应用 | 控制 NAT 成本 |
| 企业用户 | 双 AZ,2 公有 + 2 应用私有 + 2 数据库私有 | ALB、NAT 双活、RDS Multi-AZ | 安全组按层隔离 |
| 跨境业务 | 就近 Region + 双 AZ | ALB + ACM + Route 53 | 先测延迟再选区 |
| 网站应用 | 公有 ALB + 私有 Web/API | 443 终止在 ALB | 源站不直接暴露 |
| 数据库业务 | 数据库独立私有子网 | 安全组仅允许应用访问 | 避免公网连接 |
八、优化建议:不是多配资源,而是减少错误面
1. 安全优化
- 跳板机只开放固定办公 IP,不要开放全网。
- 数据库安全组不要直接写 0.0.0.0/0。
- 使用 IAM Role 给实例授权,避免把 AK/SK 写进服务器。
- 优先考虑 Session Manager,减少 SSH/RDP 暴露。
2. 性能优化
- AWS优惠码 Web 层走 ALB,静态内容可前置 CDN。
- 应用与数据库放同 Region、尽量同 VPC 内通信。
- 数据库与应用跨 AZ 部署时评估时延,不要把低延迟业务拆得过散。
3. 成本优化
- NAT Gateway 持续计费,测试环境可定时关闭相关资源。
- 低流量业务可评估是否用 IPv6 出网或 VPC Endpoint 减少 NAT 流量。
- 把不需要公网访问的实例全部移到私有子网,避免浪费 EIP 和额外暴露面。
4. 稳定性优化
- 公有和私有资源至少分布在两个可用区。
- 关键实例开启快照备份,数据库启用自动备份。
- 修改路由表前先记录原始配置,避免批量误操作导致全网中断。
如果你现在正准备上线一个 AWS 网站或应用系统,最优先要做的不是继续增加实例数量,而是先确认三件事:公网入口是否只留给负载均衡或跳板机、应用层是否全部转入私有子网、数据库是否彻底与公网隔离。只要这三点先落实,后续做扩容、迁移、备份和故障排查都会容易很多。

