文章详情

AWS优惠码 AWS 公有子网与私有子网设计教程:VPC、NAT、路由表与安全组配置实践

亚马逊aws2026-10-21 15:40:27阿里专业云

很多用户搜索 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/1610.10.0.0/16
公有子网-A/2410.10.1.0/24
公有子网-B/2410.10.2.0/24
私有应用子网-A/2410.10.11.0/24
私有应用子网-B/2410.10.12.0/24
私有数据库子网-A/2410.10.21.0/24
私有数据库子网-B/2410.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 tagprod-vpc按环境命名,便于后期识别
IPv4 CIDR10.10.0.0/16避免与本地办公网冲突
TenancyDefault大多数场景无需 Dedicated

创建完成后,先确认 DNS Hostnames 和 DNS Resolution 已启用。很多用户在后面使用内网域名时才发现默认没有打开。

步骤2:创建公有子网与私有子网

进入“Subnets”,点击“Create subnet”。同一个 VPC 内分别创建 6 个子网。

子网名称可用区CIDR用途
public-aap-east-1a 或所选 AZ-a10.10.1.0/24ALB、Bastion、NAT
public-bAZ-b10.10.2.0/24ALB、NAT
app-private-aAZ-a10.10.11.0/24应用服务器
app-private-bAZ-b10.10.12.0/24应用服务器
db-private-aAZ-a10.10.21.0/24数据库
db-private-bAZ-b10.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-publicpublic-a、public-b0.0.0.0/0 -> Internet Gateway
rtb-app-private-a/bapp-private-a、app-private-b0.0.0.0/0 -> NAT Gateway
rtb-db-privatedb-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-apublic-a新申请 EIP
nat-bpublic-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 跳板机配置

参数建议值
AMIAmazon Linux 2023 或 Ubuntu 22.04
实例类型t3.micro / t3.small
子网public-a
Auto-assign Public IPEnable
安全组仅放行你的办公公网 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 IPDisable
安全组仅允许来自 ALB、安全组或跳板机的流量

Linux 系统安装完成后,通常通过 SSH 从跳板机进入:

ssh -i app.pem [email protected]

Windows 私有实例则通过跳板机做 RDP 中转,或使用 Systems Manager Session Manager 替代传统 RDP 暴露。

步骤7:创建 RDS 并放到私有数据库子网

进入 RDS 控制台,点击“Create database”。在“Connectivity”配置中:

参数建议值
Public accessNo
VPCprod-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 + 双 AZALB + ACM + Route 53先测延迟再选区
网站应用公有 ALB + 私有 Web/API443 终止在 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 网站或应用系统,最优先要做的不是继续增加实例数量,而是先确认三件事:公网入口是否只留给负载均衡或跳板机、应用层是否全部转入私有子网、数据库是否彻底与公网隔离。只要这三点先落实,后续做扩容、迁移、备份和故障排查都会容易很多。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系