Toda VPC nasce de um número: o bloco CIDR. Ele parece só um detalhe de formulário na hora de criar a VPC, mas é ele que decide, de uma vez, quantas subnets você consegue criar, quantas instâncias cabem em cada uma e se essa VPC vai conseguir conversar com outra rede no futuro sem dar conflito de rota. Errar essa conta no dia 1 é o tipo de coisa que só aparece de novo seis meses depois, quando não sobra mais IP livre pra uma subnet nova.
O que o número depois da barra realmente significa
Um endereço IPv4 tem 32 bits, escritos como 4 blocos de 8 bits (os octetos): 10.0.0.0 é 00001010.00000000.00000000.00000000. A notação CIDR (10.0.0.0/16) diz quantos desses 32 bits são fixos, a parte de rede, e quantos ficam livres para variar, a parte de host.
/16→ 16 bits fixos, 16 livres → 2^16 = 65.536 endereços/24→ 24 bits fixos, 8 livres → 2^8 = 256 endereços
O detalhe que costuma confundir: quanto menor o número depois da barra, maior o bloco. Menos bits fixos significa mais combinações possíveis nos bits livres.
| CIDR | Bits livres | Total de IPs | Uso comum |
|---|---|---|---|
| /16 | 16 | 65.536 | VPC inteira |
| /20 | 12 | 4.096 | Subnet grande (EKS, muitas ENIs) |
| /24 | 8 | 256 | Subnet típica |
| /28 | 4 | 16 | Subnet pequena e fixa (NAT, firewall) |
| /32 | 0 | 1 | Um único host |
De um /16 a várias /24: a conta do terceiro octeto
Uma VPC 10.0.0.0/16 cobre todo o intervalo de 10.0.0.0 até 10.0.255.255. Se você fatia isso em subnets /24, cada subnet consome um valor inteiro do terceiro octeto:
10.0.0.0/24→10.0.0.0até10.0.0.25510.0.1.0/24→10.0.1.0até10.0.1.25510.0.2.0/24→10.0.2.0até10.0.2.255- ...até
10.0.255.0/24
Ou seja: uma VPC /16 comporta até 256 subnets /24. Você não precisa usar todas de uma vez, e não deveria, deixar números pulados entre grupos de subnets é o que sobra de espaço pra crescer sem precisar redesenhar a VPC inteira depois.
Nem todo IP da subnet é utilizável
Numa subnet /24 com 256 endereços, a AWS reserva 5 para uso interno, sobrando 251 utilizáveis:
Endereço (exemplo em 10.0.1.0/24) |
Reservado para |
|---|---|
10.0.1.0 |
Endereço de rede |
10.0.1.1 |
Roteador da VPC |
10.0.1.2 |
DNS |
10.0.1.3 |
Uso futuro da AWS |
10.0.1.255 |
Broadcast (não usado, mas reservado) |
Essa reserva é fixa em 5 endereços por subnet, não importa o tamanho dela. Numa /28 (16 endereços), sobram só 11 utilizáveis, o que faz subnets muito pequenas ficarem apertadas rápido se você não planejar o uso.
O que faz uma subnet ser pública ou privada
O CIDR não define isso, a tabela de rotas define. A mesma subnet /24 pode ser pública ou privada dependendo só de para onde ela manda o tráfego 0.0.0.0/0:
- Pública: rota
0.0.0.0/0→ Internet Gateway. Instâncias aqui podem ter IP público e alcançar a internet direto. - Privada: rota
0.0.0.0/0→ NAT Gateway. Saída para internet sim, entrada direta não. - Isolada: sem rota
0.0.0.0/0nenhuma. Nem entra, nem sai.
Duas subnets podem ter CIDRs vizinhos (
10.0.0.0/24e10.0.1.0/24) e terem comportamentos completamente diferentes na internet. O range de IP não carrega essa informação sozinho.
Desenhando uma VPC real: 3 AZs, público e privado
Um layout de referência, replicando o padrão que a própria AWS usa nos templates de VPC:
| Subnet | CIDR | AZ | Camada | IPs utilizáveis |
|---|---|---|---|---|
| public-a | 10.0.0.0/24 |
us-east-1a | Pública | 251 |
| private-a | 10.0.1.0/24 |
us-east-1a | Privada | 251 |
| public-b | 10.0.2.0/24 |
us-east-1b | Pública | 251 |
| private-b | 10.0.3.0/24 |
us-east-1b | Privada | 251 |
| public-c | 10.0.4.0/24 |
us-east-1c | Pública | 251 |
| private-c | 10.0.5.0/24 |
us-east-1c | Privada | 251 |
Isso usa só 6 dos 256 blocos /24 disponíveis no /16. O resto fica livre para uma camada de banco de dados isolada, uma quarta AZ, ou uma subnet dedicada a EKS. Um convenção comum é agrupar por faixa: 10.0.0.0 a 10.0.9.0 para público/privado, 10.0.10.0 em diante para dados isolados, deixando o layout legível sem precisar de documentação externa pra lembrar o que é o quê.
Cada AZ costuma ter seu próprio NAT Gateway, e não um único compartilhado entre todas. Isso evita ponto único de falha e evita tráfego cruzando AZ (que tem custo por GB) só para sair para a internet.
Como criar isso via CLI
aws ec2 create-vpc --cidr-block 10.0.0.0/16
aws ec2 create-subnet \
--vpc-id vpc-0123456789abcdef0 \
--cidr-block 10.0.0.0/24 \
--availability-zone us-east-1a
aws ec2 create-subnet \
--vpc-id vpc-0123456789abcdef0 \
--cidr-block 10.0.1.0/24 \
--availability-zone us-east-1aA tabela de rotas é o passo que transforma essas subnets em públicas ou privadas de fato:
aws ec2 create-route \
--route-table-id rtb-public0123456789 \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id igw-0123456789abcdef0
aws ec2 create-route \
--route-table-id rtb-private0123456789 \
--destination-cidr-block 0.0.0.0/0 \
--nat-gateway-id nat-0123456789abcdef0No console, o mesmo fluxo fica em VPC > Subnets para criar, e VPC > Route Tables > Edit routes para associar cada subnet ao seu comportamento público ou privado.
Quando ir além do /24
Algumas cargas consomem IP privado muito mais rápido do que parece:
- EKS com VPC CNI: cada pod recebe um IP da subnet, não só cada nó. Um cluster com autoscaling agressivo pode esgotar uma
/24em pouco tempo. - Lambda dentro da VPC: cada execução concorrente também consome ENI/IP da subnet configurada.
- Frotas grandes de Auto Scaling: picos de escala momentâneos podem passar de 251 instâncias numa subnet só.
Nesses casos, subir para /20 (4.091 utilizáveis) ou /22 (1.019 utilizáveis) na subnet específica resolve, sem precisar mexer no tamanho da VPC. Se mesmo assim o /16 original não for suficiente, a AWS permite associar um CIDR secundário à VPC depois de criada, desde que ele não sobreponha o bloco principal nem o de nenhuma rede já conectada por peering ou VPN.
Por que sobreposição de CIDR quebra tudo
Peering, Transit Gateway e VPN roteiam tráfego comparando blocos CIDR. Se duas VPCs usam o mesmo range, ou ranges que se sobrepõem parcialmente, não existe rota inequívoca possível, o pacote não tem como saber pra qual das duas redes ele deveria ir. Por isso vale planejar o espaço de IP privado antes de multiplicar VPCs pela conta: reservar faixas diferentes do 10.0.0.0/8 (ou 172.16.0.0/12, ou 192.168.0.0/16) para cada VPC, do mesmo jeito que se reserva faixas de subnet dentro de uma VPC só.
Como isso se conecta com o resto
O tipo de IP que cada instância recebe dentro dessas subnets, privado, público automático ou Elastic IP, é uma decisão separada da divisão de CIDR, coberta em IP privado, público e Elastic IP: quem é o dono do endereço. A VPC e suas subnets, por sua vez, vivem dentro de uma região e se espalham por zonas de disponibilidade, cuja estrutura está em Como funciona a estrutura da AWS.
Referências
- AWS. IP addressing for your VPCs and subnets. Como CIDR, subnets e IPs reservados funcionam na prática.
- AWS. VPCs and subnets. Criação de VPC, subnets e associação de CIDR secundário.
- AWS. Amazon VPC CNI plugin. Por que pods no EKS consomem IP da subnet.