Pular para o conteúdo principal

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ísticaSubnet PúblicoSubnet 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 usoWeb servers, LBBanco 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​

ConceitoDescrição
SubnetSub-rede em uma AZ
Public SubnetRota para IGW, acesso à Internet
Private SubnetSem rota IGW, isolado
Route TableRegras de direcionamento de tráfego
localRota automática para o VPC
0.0.0.0/0Rota padrão (Internet)

Quiz de Validação​

  1. Um subnet pode se estender por várias AZ?
  2. O que faz um subnet ser "público"?
  3. Qual rota torna um subnet público?
  4. Quantos endereços utilizáveis em um /24?
  5. O que é a Main Route Table?

Próxima seção: Internet Gateway