VPC基础 #

一、VPC概述 #

1.1 什么是VPC #

Amazon VPC(Virtual Private Cloud)是AWS提供的虚拟网络服务,允许在AWS云中启动隔离的虚拟网络,完全控制IP地址、子网、路由表和网络网关。

1.2 VPC特点 #

text
VPC核心特点:
├── 网络隔离
│   └── 逻辑隔离的虚拟网络
│
├── 完全控制
│   ├── IP地址范围
│   ├── 子网划分
│   ├── 路由配置
│   └── 网关设置
│
├── 安全控制
│   ├── 安全组
│   └── 网络ACL
│
├── 连接选项
│   ├── Internet网关
│   ├── NAT网关
│   ├── VPN
│   └── Direct Connect
│
└── 灵活配置
    ├── 公有子网
    └── 私有子网

1.3 VPC核心组件 #

text
VPC组件:
├── VPC
│   └── 虚拟网络容器
│
├── 子网(Subnet)
│   └── VPC内的子网络
│
├── 路由表(Route Table)
│   └── 控制流量路由
│
├── Internet网关(IGW)
│   └── 连接互联网
│
├── NAT网关/实例
│   └── 私有子网访问互联网
│
├── 安全组(Security Group)
│   └── 实例级防火墙
│
└── 网络ACL(NACL)
    └── 子网级防火墙

二、创建VPC #

2.1 VPC CIDR规划 #

text
CIDR规划建议:
├── VPC CIDR范围
│   ├── 最小:/28(16个IP)
│   └── 最大:/16(65536个IP)
│
├── 常用CIDR
│   ├── 10.0.0.0/16(65536个IP)
│   ├── 172.16.0.0/16(65536个IP)
│   └── 192.168.0.0/16(65536个IP)
│
└── 预留空间
    └── 为未来扩展预留

2.2 创建VPC #

bash
aws ec2 create-vpc \
    --cidr-block 10.0.0.0/16 \
    --tag-specifications "ResourceType=vpc,Tags=[{Key=Name,Value=MyVPC}]"

2.3 创建子网 #

bash
aws ec2 create-subnet \
    --vpc-id vpc-12345678 \
    --cidr-block 10.0.1.0/24 \
    --availability-zone us-east-1a \
    --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=Public-Subnet-1}]"

2.4 公有子网配置 #

text
公有子网配置步骤:
├── 1. 创建Internet网关
├── 2. 附加IGW到VPC
├── 3. 创建路由表
├── 4. 添加默认路由到IGW
└── 5. 关联路由表到子网
bash
aws ec2 create-internet-gateway \
    --tag-specifications "ResourceType=internet-gateway,Tags=[{Key=Name,Value=MyIGW}]"

aws ec2 attach-internet-gateway \
    --vpc-id vpc-12345678 \
    --internet-gateway-id igw-12345678

aws ec2 create-route-table \
    --vpc-id vpc-12345678 \
    --tag-specifications "ResourceType=route-table,Tags=[{Key=Name,Value=Public-RT}]"

aws ec2 create-route \
    --route-table-id rtb-12345678 \
    --destination-cidr-block 0.0.0.0/0 \
    --gateway-id igw-12345678

aws ec2 associate-route-table \
    --subnet-id subnet-12345678 \
    --route-table-id rtb-12345678

三、子网 #

3.1 子网类型 #

text
子网类型:
├── 公有子网
│   ├── 有到IGW的路由
│   ├── 可直接访问互联网
│   └── 适合:Web服务器、负载均衡器
│
└── 私有子网
    ├── 无到IGW的路由
    ├── 不能直接访问互联网
    └── 适合:数据库、应用服务器

3.2 子网规划 #

text
子网规划示例(10.0.0.0/16):
├── 公有子网
│   ├── 10.0.0.0/24(AZ-a)
│   ├── 10.0.1.0/24(AZ-b)
│   └── 10.0.2.0/24(AZ-c)
│
├── 私有子网(应用)
│   ├── 10.0.10.0/24(AZ-a)
│   ├── 10.0.11.0/24(AZ-b)
│   └── 10.0.12.0/24(AZ-c)
│
└── 私有子网(数据库)
    ├── 10.0.20.0/24(AZ-a)
    ├── 10.0.21.0/24(AZ-b)
    └── 10.0.22.0/24(AZ-c)

3.3 子网注意事项 #

text
子网注意:
├── AWS保留IP
│   ├── .0 - 网络地址
│   ├── .1 - VPC路由器
│   ├── .2 - DNS服务器
│   ├── .3 - 预留
│   └── .255 - 广播地址
│
├── 可用IP数量
│   └── /24子网有251个可用IP
│
└── 跨可用区部署
    └── 提高高可用性

四、路由表 #

4.1 路由表概念 #

text
路由表组成:
├── 路由条目
│   ├── 目标(Destination)
│   └── 目标(Target)
│
├── 本地路由
│   └── 自动添加
│   └── 目标:VPC CIDR → local
│
└── 自定义路由
    └── 用户添加的路由

4.2 公有子网路由表 #

text
公有子网路由表示例:
┌──────────────────┬────────────────────┐
│ 目标             │ 目标               │
├──────────────────┼────────────────────┤
│ 10.0.0.0/16      │ local              │
│ 0.0.0.0/0        │ igw-xxxxxx         │
└──────────────────┴────────────────────┘

4.3 私有子网路由表 #

text
私有子网路由表示例(使用NAT网关):
┌──────────────────┬────────────────────┐
│ 目标             │ 目标               │
├──────────────────┼────────────────────┤
│ 10.0.0.0/16      │ local              │
│ 0.0.0.0/0        │ nat-xxxxxx         │
└──────────────────┴────────────────────┘

五、安全组 #

5.1 安全组概念 #

text
安全组特点:
├── 实例级防火墙
├── 状态检测
│   ├── 自动允许返回流量
│   └── 无需配置出站规则
│
├── 默认规则
│   ├── 入站:拒绝所有
│   └── 出站:允许所有
│
├── 规则配置
│   ├── 协议(TCP/UDP/ICMP)
│   ├── 端口范围
│   └── 源/目标
│
└── 多安全组
    └── 一个实例可关联多个安全组

5.2 创建安全组 #

bash
aws ec2 create-security-group \
    --group-name MySecurityGroup \
    --description "My security group" \
    --vpc-id vpc-12345678

5.3 添加入站规则 #

bash
aws ec2 authorize-security-group-ingress \
    --group-id sg-12345678 \
    --protocol tcp \
    --port 22 \
    --cidr 0.0.0.0/0

aws ec2 authorize-security-group-ingress \
    --group-id sg-12345678 \
    --protocol tcp \
    --port 80 \
    --cidr 0.0.0.0/0

5.4 常用安全组规则 #

用途 端口
SSH 22 特定IP
HTTP 80 0.0.0.0/0
HTTPS 443 0.0.0.0/0
MySQL 3306 应用安全组
PostgreSQL 5432 应用安全组

5.5 安全组引用 #

text
安全组引用:
├── 引用另一个安全组
│   └── 允许特定安全组的实例访问
│
├── 示例
│   └── Web安全组允许来自ALB安全组的流量
│
└── 好处
    └── 动态更新,无需修改IP

六、网络ACL #

6.1 NACL概念 #

text
NACL特点:
├── 子网级防火墙
├── 无状态
│   └── 需要配置双向规则
│
├── 规则编号
│   ├── 按顺序评估
│   └── 最低编号优先
│
├── 默认规则
│   ├── 入站:允许所有
│   └── 出站:允许所有
│
└── 每个子网一个NACL

6.2 安全组 vs NACL #

特性 安全组 NACL
层级 实例级 子网级
状态 有状态 无状态
规则顺序 无序 有序
允许规则 仅允许 允许和拒绝
默认行为 拒绝入站 允许所有

6.3 NACL规则示例 #

text
NACL规则示例:
┌────────┬────────┬──────────┬──────────┬───────────┬────────┐
│ 规则#  │ 类型   │ 协议     │ 端口     │ 源        │ 操作   │
├────────┼────────┼──────────┼──────────┼───────────┼────────┤
│ 100    │ HTTP   │ TCP      │ 80       │ 0.0.0.0/0 │ ALLOW │
│ 110    │ HTTPS  │ TCP      │ 443      │ 0.0.0.0/0 │ ALLOW │
│ 120    │ SSH    │ TCP      │ 22       │ 10.0.0.0/8│ ALLOW │
│ *      │ 所有   │ 所有     │ 所有     │ 0.0.0.0/0 │ DENY  │
└────────┴────────┴──────────┴──────────┴───────────┴────────┘

七、公有IP和弹性IP #

7.1 公有IP #

text
公有IP特点:
├── 自动分配(可配置)
├── 动态IP
│   └── 实例停止/启动后变化
│
├── 从AWS地址池分配
└── 免费

7.2 弹性IP #

text
弹性IP特点:
├── 静态公有IP
├── 可关联到实例或ENI
├── 可重新映射
└── 收费
    ├── 关联时免费
    └── 未关联时收费

7.3 分配弹性IP #

bash
aws ec2 allocate-address --domain vpc

aws ec2 associate-address \
    --instance-id i-12345678 \
    --allocation-id eipalloc-12345678

八、VPC架构示例 #

8.1 标准三层架构 #

text
标准三层架构:
┌─────────────────────────────────────────────────────────────┐
│                          VPC                                 │
│  ┌─────────────────────────────────────────────────────────┐│
│  │                    公有子网                              ││
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐                 ││
│  │  │   ALB   │  │  NAT GW │  │  IGW    │                 ││
│  │  └─────────┘  └─────────┘  └─────────┘                 ││
│  └─────────────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────────────┐│
│  │                    私有子网(应用)                       ││
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐                 ││
│  │  │  EC2    │  │  EC2    │  │  EC2    │                 ││
│  │  └─────────┘  └─────────┘  └─────────┘                 ││
│  └─────────────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────────────┐│
│  │                    私有子网(数据库)                     ││
│  │  ┌─────────┐  ┌─────────┐                              ││
│  │  │  RDS    │  │  RDS    │                              ││
│  │  └─────────┘  └─────────┘                              ││
│  └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘

九、VPC最佳实践 #

9.1 规划建议 #

text
规划建议:
├── 合理规划CIDR
│   └── 预留足够空间
│
├── 跨可用区部署
│   └── 至少2个可用区
│
├── 分离子网
│   ├── 公有子网
│   └── 私有子网
│
├── 安全组最小权限
│   └── 只开放必要端口
│
└── 文档化
    └── 记录网络架构

9.2 安全建议 #

text
安全建议:
├── 使用私有子网部署敏感资源
├── 安全组最小权限原则
├── 使用NACL作为额外防护
├── 启用VPC Flow Logs
├── 定期审计安全组规则
└── 使用安全组引用

十、小结 #

本章介绍了VPC基础:

内容 要点
VPC概念 虚拟私有云、网络隔离
子网 公有子网、私有子网
路由表 控制流量路由
安全组 实例级防火墙
NACL 子网级防火墙

下一步学习 #

了解VPC基础后,接下来可以:

  1. VPC高级配置 - 学习NAT、VPN等
  2. Route53 DNS - 学习DNS服务
  3. 安全最佳实践 - 学习网络安全
最后更新:2026-03-28