Subnets e Tabelas de Roteamento
O que é um Subnet?
Um subnet (sub-rede) é uma subdivisão do seu VPC. Cada subnet existe em apenas uma Zona de Disponibilidade.
┌─────────────────────────────────────────────────────────────┐
│ SUBNETS │
├─────────────────────────────────────────────────────────────┤
│ │
│ VPC (10.0.0.0/16) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ REGIÃO us-east-1 │ │ │
│ │ │ │ │ │
│ │ │ ┌─────────────┐ ┌─────────────┐ │ │ │
│ │ │ │ AZ 1a │ │ AZ 1b │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ ┌─────────┐ │ │ ┌─────────┐ │ │ │ │
│ │ │ │ │Subnet A │ │ │ │Subnet B │ │ │ │ │
│ │ │ │ │10.0.1.0 │ │ │ │10.0.2.0 │ │ │ │ │
│ │ │ │ │ /24 │ │ │ │ /24 │ │ │ │ │
│ │ │ │ └─────────┘ │ │ └─────────┘ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ └─────────────┘ └─────────────┘ │ │ │
│ │ │ │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Regra: 1 Subnet = 1 AZ (não pode se estender) │
│ Mas: 1 AZ pode ter vários Subnets │
│ │
└─────────────────────────────────────────────────────────────┘
Subnet Público vs Subnet Privado
┌─────────────────────────────────────────────────────────────┐
│ PÚBLICO vs PRIVADO │
├─────────────────────────────────────────────────────────────┤
│ │
│ INTERNET │
│ │ │
│ ▼ │
│ ┌──────────┐ │
│ │ IGW │ │
│ └────┬─────┘ │
│ │ │
│ ┌─────────────────────┼─────────────────────┐ │
│ │ VPC │ │ │
│ │ │ │ │
│ │ ┌─────────────────┴───────────────┐ │ │
│ │ │ SUBNET PÚBLICO │ │ │
│ │ │ │ │ │
│ │ │ • Rota para IGW (0.0.0.0/0) │ │ │
│ │ │ • IP público auto-atribuído │ │ │
│ │ │ • Acessível da Internet │ │ │
│ │ │ │ │ │
│ │ │ Recursos: Load Balancer, │ │ │
│ │ │ Bastion, NAT Gateway │ │ │
│ │ │ │ │ │
│ │ └─────────────────┬───────────────┘ │ │
│ │ │ │ │
│ │ │ (NAT Gateway) │ │
│ │ │ │ │
│ │ ┌─────────────────┴───────────────┐ │ │
│ │ │ SUBNET PRIVADO │ │ │
│ │ │ │ │ │
│ │ │ • NÃO tem rota para IGW │ │ │
│ │ │ • Sem IP público │ │ │
│ │ │ • NÃO acessível da Internet │ │ │
│ │ │ • Pode sair via NAT │ │ │
│ │ │ │ │ │
│ │ │ Recursos: Servidores de App, │ │ │
│ │ │ Banco de dados │ │ │
│ │ │ │ │ │
│ │ └──────────────────────────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Diferenças-Chave
| Característica | Subnet Público | Subnet Privado |
|---|---|---|
| Rota para IGW | ✅ Sim (0.0.0.0/0 → igw) | ❌ Não |
| IP público automático | ✅ Ativável | ❌ Não |
| Acesso da Internet | ✅ Possível | ❌ Impossível |
| Acesso para Internet | ✅ Direto | ⚠️ Via NAT Gateway |
| Caso de uso | Web servers, LB | Banco de dados, App servers |
Tabelas de Roteamento
O que é uma Route Table?
Uma Route Table contém regras (rotas) que determinam para onde o tráfego de rede é direcionado.
┌─────────────────────────────────────────────────────────────┐
│ ROUTE TABLE │
├─────────────────────────────────────────────────────────────┤
│ │
│ Route Table = "Placa de sinalização" da rede │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Destino │ Target │ Resultado │ │
│ │ ─────────────────┼──────────────────┼────────────│ │
│ │ 10.0.0.0/16 │ local │ Resto VPC │ │
│ │ 0.0.0.0/0 │ igw-xxx │ Internet │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Como funciona: │
│ 1. Pacote chega com destino 8.8.8.8 │
│ 2. Verifica: 8.8.8.8 está em 10.0.0.0/16? Não │
│ 3. Verifica: 8.8.8.8 está em 0.0.0.0/0? Sim │
│ 4. Envia para igw-xxx (Internet Gateway) │
│ │
│ Regra: A rota mais específica vence │
│ 10.0.0.0/16 é mais específica que 0.0.0.0/0 │
│ │
└─────────────────────────────────────────────────────────────┘
Route Table Pública vs Privada
┌─────────────────────────────────────────────────────────────┐
│ ROUTE TABLE PÚBLICA vs PRIVADA │
├─────────────────────────────────────────────────────────────┤
│ │
│ ROUTE TABLE PÚBLICA │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Destino │ Target │ Descrição │ │
│ │─────────────────┼─────────────────┼─────────────────│ │
│ │ 10.0.0.0/16 │ local │ Tráfego interno │ │
│ │ 0.0.0.0/0 │ igw-xxxxxxxx │ → Internet │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ROUTE TABLE PRIVADA │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Destino │ Target │ Descrição │ │
│ │─────────────────┼─────────────────┼─────────────────│ │
│ │ 10.0.0.0/16 │ local │ Tráfego interno │ │
│ │ 0.0.0.0/0 │ nat-xxxxxxxx │ → NAT Gateway │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ROUTE TABLE ISOLADA (muito privada) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Destino │ Target │ Descrição │ │
│ │─────────────────┼─────────────────┼─────────────────│ │
│ │ 10.0.0.0/16 │ local │ Tráfego interno │ │
│ │ (sem 0.0.0.0/0) │ Sem Internet │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Associação Subnet ↔ Route Table
┌─────────────────────────────────────────────────────────────┐
│ ASSOCIAÇÃO SUBNET - ROUTE TABLE │
├─────────────────────────────────────────────────────────────┤
│ │
│ Cada subnet é associada a UMA Route Table │
│ │
│ ┌───────────────┐ │
│ │ Route Table │──────────┐ │
│ │ rtb-public │ │ │
│ └───────────────┘ │ │
│ │ │ │
│ │ ┌────▼────┐ │
│ ┌──────▼──────┐ │ Subnet │ │
│ │ Subnet │ │ 1b │ │
│ │ 1a │ │(público)│ │
│ │ (público) │ └─────────┘ │
│ └─────────────┘ │
│ │
│ ┌───────────────┐ │
│ │ Route Table │──────────┐ │
│ │ rtb-private │ │ │
│ └───────────────┘ │ │
│ │ │ │
│ │ ┌────▼────┐ │
│ ┌──────▼──────┐ │ Subnet │ │
│ │ Subnet │ │ 2b │ │
│ │ 2a │ │(privado)│ │
│ │ (privado) │ └─────────┘ │
│ └─────────────┘ │
│ │
│ Main Route Table: Route Table padrão se não associada │
│ │
└─────────────────────────────────────────────────────────────┘
Criar um Subnet
Via Console
1. VPC → Subnets → Create subnet
2. VPC : Selecione seu VPC
3. Subnet name : public-1a
4. Availability Zone : us-east-1a
5. IPv4 CIDR block : 10.0.1.0/24
6. Create subnet
Via AWS CLI
# Criar um subnet público
aws ec2 create-subnet \
--vpc-id vpc-xxx \
--cidr-block 10.0.1.0/24 \
--availability-zone us-east-1a \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=public-1a}]'
# Ativar auto-atribuição de IP público (para subnet público)
aws ec2 modify-subnet-attribute \
--subnet-id subnet-xxx \
--map-public-ip-on-launch
Criar e Configurar uma Route Table
Via AWS CLI
# Criar uma Route Table
aws ec2 create-route-table \
--vpc-id vpc-xxx \
--tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=rtb-public}]'
# Adicionar rota para Internet Gateway
aws ec2 create-route \
--route-table-id rtb-xxx \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id igw-xxx
# Associar o subnet à Route Table
aws ec2 associate-route-table \
--route-table-id rtb-xxx \
--subnet-id subnet-xxx
Plano de Endereçamento Recomendado
┌─────────────────────────────────────────────────────────────┐
│ PLANO DE ENDEREÇAMENTO RECOMENDADO │
├─────────────────────────────────────────────────────────────┤
│ │
│ VPC : 10.0.0.0/16 (65.536 endereços) │
│ │
│ SUBNETS PÚBLICOS (Web Tier) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ public-1a : 10.0.1.0/24 (AZ a) - 251 IPs │ │
│ │ public-1b : 10.0.2.0/24 (AZ b) - 251 IPs │ │
│ │ public-1c : 10.0.3.0/24 (AZ c) - 251 IPs │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ SUBNETS PRIVADOS (Application Tier) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ private-1a : 10.0.11.0/24 (AZ a) - 251 IPs │ │
│ │ private-1b : 10.0.12.0/24 (AZ b) - 251 IPs │ │
│ │ private-1c : 10.0.13.0/24 (AZ c) - 251 IPs │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ SUBNETS BANCO DE DADOS (Data Tier) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ database-1a: 10.0.21.0/24 (AZ a) - 251 IPs │ │
│ │ database-1b: 10.0.22.0/24 (AZ b) - 251 IPs │ │
│ │ database-1c: 10.0.23.0/24 (AZ c) - 251 IPs │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Convenção de nomenclatura: │
│ • 10.0.X.0/24 onde X = 1-9 para público │
│ • 10.0.X.0/24 onde X = 11-19 para app privado │
│ • 10.0.X.0/24 onde X = 21-29 para banco de dados │
│ │
└─────────────────────────────────────────────────────────────┘
Boas Práticas
1. Sempre Multi-AZ
✅ BOM: Subnets em pelo menos 2 AZ
❌ RUIM: Todos os subnets em uma única AZ
Motivo: Resiliência em caso de falha de uma AZ
2. Separar Público e Privado
✅ BOM:
- Subnets públicos para Load Balancers
- Subnets privados para servidores de aplicação
- Subnets isolados para bancos de dados
❌ RUIM: Tudo em subnets públicos
3. Planejar o Endereçamento
✅ BOM: Plano de endereçamento documentado antes de criar
❌ RUIM: CIDR aleatório, possíveis sobreposições
Dica: Deixe espaço para crescimento
Resumo
| Conceito | Descrição |
|---|---|
| Subnet | Sub-rede em uma AZ |
| Public Subnet | Rota para IGW, acesso à Internet |
| Private Subnet | Sem rota IGW, isolado |
| Route Table | Regras de direcionamento de tráfego |
| local | Rota automática para o VPC |
| 0.0.0.0/0 | Rota padrão (Internet) |
Quiz de Validação
- Um subnet pode se estender por várias AZ?
- O que faz um subnet ser "público"?
- Qual rota torna um subnet público?
- Quantos endereços utilizáveis em um /24?
- O que é a Main Route Table?
Próxima seção: Internet Gateway