第273篇:虚拟网络:VPC、子网、安全组、ACL
关键词
VPC、虚拟私有云、子网划分、安全组、网络ACL、云网络隔离、虚拟防火墙、状态化防火墙
一、VPC(Virtual Private Cloud)
1.1 什么是 VPC
VPC 是云计算中租户专属的虚拟网络,在公有云或私有云中提供逻辑隔离:
VPC 的隔离逻辑:
公有云物理网络:
| 云提供商物理网络 ┌─────────── VPC 租户 A ───────────┐ └──────────────────────────────────┘ ┌─────────── VPC 租户 B ───────────┐ └──────────────────────────────────┘ 租户 A 和租户 B 使用相同 IP 段 但完全隔离(通过 VXLAN VNI 隔离) | 10.0.0.0/8 ┌─────┐ ┌─────┐ └─────┘ └─────┘ 10.0.0.0/8 ┌─────┐ ┌─────┐ └─────┘ └─────┘ | VM1 VM3 | VM2 VM4 | |||
|---|---|---|---|---|---|---|
VPC 的核心特征: 1. 逻辑隔离——每个 VPC 是一个独立的二层网络 2. IP 自主——租户可自定义 IP 地址范围 3. 不重叠——VPC 之间默认完全隔离 4. 弹性——按需创建、调整规模
1.2 VPC 的实现
VPC 的技术实现(以 VXLAN/EVPN 为例):
租户 A VPC(VNI 10001) 10.0.1.0/24(子网 A) 10.0.2.0/24(子网 B) VXLAN 封装(VNI 10001) 所有 VM 在同一个 VXLAN 网络中
租户 B VPC(VNI 20001) 10.0.1.0/24(子网 A) 10.0.2.0/24(子网 B) VXLAN 封装(VNI 20001) 与租户 A 完全隔离
即使两个 VPC 使用相同的 IP 地址(10.0.1.0/24), 因为 VNI 不同,它们完全隔离。
华为云 VPC 实现: 基于 VXLAN + EVPN 的分布式网关 每个 VPC 对应一个或多个 VNI 每个 VPC 有独立的虚拟路由器(VRF)
1.3 VPC 设计原则
VPC 规划最佳实践:
1. 按业务/环境划分 VPC
生产 VPC:10.0.0.0/8
测试 VPC:172.16.0.0/12
开发 VPC:192.168.0.0/16
2. 每个 VPC 预留足够地址空间
小型:/16(65536 地址)
中型:/12(1048576 地址)
大型:/8(16777216 地址)
3. VPC 间通信通过 Peering 或 VPN
VPC A ←→ VPC Peering ←→ VPC B
或通过 VPN/专线连接到物理网络
4. 避免 VPC IP 重叠
如果未来需要 VPC 互联
重叠 IP 需要 NAT,增加复杂度
二、子网(Subnet)
2.1 子网在 VPC 中的角色
VPC 内的子网划分:
| ┌──── VPC(10.0.0.0/16)────────────────────┐ | ||
|---|---|---|
| ┌─ 子网 A:10.0.1.0/24 ─────────────┐ └───────────────────────────────────┘ ┌─ 子网 B:10.0.2.0/24 ─────────────┐ └───────────────────────────────────┘ 子网 A 和子网 B 在同一个 VPC 内 默认互通(通过虚拟路由器) | 可用 IP:10.0.1.1 - 10.0.1.254 网关:10.0.1.1 可用区:AZ1 VM1, VM2, VM3 可用 IP:10.0.2.1 - 10.0.2.254 网关:10.0.2.1 可用区:AZ2 VM4, VM5, VM6 |
子网的作用: 1. IP 地址分配——每个子网定义一个 IP 范围 2. 可用区映射——可以部署到不同 AZ 实现高可用 3. 路由策略——子网级别路由控制 4. 安全边界——不同子网可设置不同的 ACL
2.2 子网设计策略
子网设计策略:
- 按功能划分子网
| 子网名称 | 网段 | 用途 |
|---|---|---|
| Web App DB Admin | 10.0.1.0/24 10.0.2.0/24 10.0.3.0/24 10.0.4.0/24 | Web 服务器 应用服务器 数据库 管理/跳板机 |
- 跨可用区部署
AZ1:10.0.1.0/24(Web),10.0.3.0/24(DB) AZ2:10.0.2.0/24(Web),10.0.4.0/24(DB)
- 预留足够的子网空间
每个子网 /24(254 个 IP) 如果业务扩展,可以再增加子网 不建议使用小于 /28 的子网
三、安全组(Security Group)
3.1 安全组 vs 传统防火墙
安全组——云原生的"状态化"虚拟防火墙:
特性: 1. 状态化——自动允许回程流量 2. VM 级别——每个 VM 独立规则 3. 允许规则——只支持 Allow,不支持 Deny 4. 规则顺序——所有规则一起评估(无顺序) 5. 有状态——出站规则关联入站自动允许
安全组规则示例:
| 方向 | 协议 | 端口 | 源/目的 |
|---|---|---|---|
| Ingress Ingress Ingress Ingress Egress | TCP TCP TCP ICMP ALL | 22 80 443 - ALL | 0.0.0.0/0 0.0.0.0/0 0.0.0.0/0 0.0.0.0/0 0.0.0.0/0 |
安全组的评估: 所有规则取并集(OR) 任何规则匹配 → 允许 没有规则匹配 → 拒绝
3.2 安全组最佳实践
安全组设计原则:
1. 最简原则——只开放必要的端口
不良示例:
Ingress:ALL(0-65535)→ 不安全
良好示例:
Ingress:TCP 80, 443, 22(仅业务需要)
2. 使用安全组引用代替 IP 段
不良示例:
Ingress TCP 3306 from 10.0.1.0/24(写死 IP)
良好示例:
Ingress TCP 3306 from sg-app-servers(引用安全组)
好处:App 服务器扩容后自动允许
3. 分层的安全组设计
sg-web:开放 80/443 到 0.0.0.0/0
sg-app:开放 8080 到 sg-web
sg-db:开放 3306 到 sg-app
逻辑:
Internet → sg-web → sg-app → sg-db
四、网络 ACL(Access Control List)
4.1 ACL vs 安全组
网络 ACL——子网级别的"无状态"防火墙:
| 对比维度 | 安全组 | 网络 ACL |
|---|---|---|
| 范围 状态 规则类型 规则评估 回程流量 适用场景 | VM 级别 状态化 仅 Allow 所有规则(OR) 自动允许 VM 级细粒度控制 | 子网级别 无状态 Allow + Deny 按序号顺序评估 需显式配置 子网级批量控制 |
两者结合使用: 网络 ACL:子网级别的第一道防线(粗粒度) 安全组:VM 级别的第二道防线(细粒度)
流量评估顺序: 入站:网络 ACL → 安全组 出站:安全组 → 网络 ACL 两者都必须允许才能通过
4.2 ACL 配置
ACL 规则示例:
┌──────────────────────────────────────────┐
│ 网络 ACL:Web-Subnet-ACL │
│ │
│ Inbound Rules(按序号评估): │
│ 序号 100:Allow TCP 80 from 0.0.0.0/0 │
│ 序号 110:Allow TCP 443 from 0.0.0.0/0│
│ 序号 120:Allow TCP 22 from 10.0.0.0/8│
│ 序号 200:Deny ALL from 0.0.0.0/0 │
│ │
│ Outbound Rules: │
│ 序号 100:Allow TCP 80 to 0.0.0.0/0 │
│ 序号 110:Allow TCP 443 to 0.0.0.0/0 │
│ (无状态,需显式写回程规则) │
│ 序号 200:Deny ALL to 0.0.0.0/0 │
└──────────────────────────────────────────┘
重要:网络 ACL 是无状态的!
入站允许了 TCP 80 进入
出站必须显式允许回程流量
否则客户端能收到 SYN-ACK 但无法发送 ACK!
华为云 ACL 配置:
# 创建网络 ACL
openstack network acl create web-acl
# 添加入站规则
openstack network acl rule create web-acl \
--protocol tcp --dst-port 80:80 \
--source-ip-prefix 0.0.0.0/0 --ingress
# 添加出站规则(回程流量)
openstack network acl rule create web-acl \
--protocol tcp --dst-port 1024:65535 \
--destination-ip-prefix 0.0.0.0/0 --egress
五、VPC 连通性方案
5.1 VPC Peering
VPC Peering——两个 VPC 之间的直接连接:
| VPC A 10.0.0.0/16 VM1 ↔ VM2 | ◄───────► Peeering | VPC B 172.16.0.0/16 VM3 ↔ VM4 |
|---|---|---|
特点: 互通:两个 VPC 内所有资源可互访 私有:通过云内部网络,不经过公网 无带宽限制:利用云网络带宽 非传递:A↔B,B↔C 不代表 A↔C(需显式建立)
路由配置: VPC A 添加路由: 目的地:172.16.0.0/16 → Peering 连接 VPC B 添加路由: 目的地:10.0.0.0/16 → Peering 连接
5.2 VPN/专线连接
连接本地数据中心到 VPC:
| 本地数据中心 192.168.0.0/16 | ─── VPN/专线 ───────── | 云 VPC 10.0.0.0/16 |
|---|---|---|
VPN(IPSec): 通过公网加密隧道 成本低、部署快 带宽受限(通常 < 1Gbps) 延迟不稳定
专线(Direct Connect): 物理专线连接 带宽大(1G-100Gbps) 延迟稳定 成本高、部署周期长
混合方案: 关键业务走专线 非关键业务走 VPN(备份链路) 专线故障自动切换到 VPN
六、总结
| 知识点 | 核心要点 |
|---|---|
| VPC | 租户专属虚拟网络,VXLAN/VNI 实现逻辑隔离 |
| 子网 | VPC 内的 IP 段划分,可映射可用区 |
| 安全组 | VM 级状态化防火墙,仅支持 Allow |
| 网络 ACL | 子网级无状态防火墙,支持 Allow+Deny |
| 安全组 vs ACL | 状态化 vs 无状态,VM 级 vs 子网级 |
| VPC Peering | VPC 间直接互联,非传递性 |
| VPN/专线 | 连接本地到云:VPN(低成本)、专线(高性能) |
七、思考
- VPC 如何实现租户间的逻辑隔离?即使两个 VPC 使用重叠的 IP 地址,为什么它们不会互相干扰?
- 安全组和网络 ACL 的主要区别是什么?为什么安全组不需要显式添加回程规则,而 ACL 需要?
- 在一个三层 Web 架构中(Web → App → DB),请设计安全组规则确保最小权限。
- VPC Peering 的"非传递性"特征意味着什么?如果 A 与 B Peering,B 与 C Peering,A 如何与 C 通信?
- 如果在 AWS 或华为云上创建一个 VPC(10.0.0.0/16),包含 3 个可用区的子网,前端 Web 需要公网访问,后端 DB 只允许 App 访问,请画出架构图并说明配置要点。
下篇预告:第274篇《Overlay 网络中隧道终结与网关》——VXLAN 隧道在云计算网络中的终结方式、分布式 vs 集中式网关、以及与物理网络的桥接方案。