Skip to content
Direcciones IP, CIDR y subnetting básico que no puedes saltarte

Redes

Direcciones IP, CIDR y subnetting básico que no puedes saltarte

Notación CIDR, rangos privados y matemática de subnetting sin la jerga de networking. Base que todo backend necesita para firewalls, VPCs y routing.

El subnetting es uno de esos temas donde la versión completa de certificación de networking es overkill para backends, pero la versión pragmática es esencial. Si configuras VPCs, security groups, firewalls, o rate-limiting por IP, la necesitas. Esta guía es la versión pragmática.

Direcciones IPv4 en bits

Una dirección IPv4 son 32 bits, normalmente escritos como cuatro números de 8 bits separados por puntos: 192.168.1.10. Cada número va de 0 a 255.

192.168.1.10 en binario:
11000000 . 10101000 . 00000001 . 00001010

Ese número de 32 bits es la historia entera. “Direcciones IP” y “redes IP” son ambos prefijos derivados de este número.

Qué significa la notación CIDR

CIDR (Classless Inter-Domain Routing) escribe una red IP como dirección/longitud_de_prefijo. La longitud de prefijo es el número de bits iniciales que son identificador de red; los bits restantes son identificadores de host dentro de esa red.

192.168.1.0/24 significa “la red donde los primeros 24 bits son 192.168.1 y los últimos 8 son identificadores de host”. Esa red contiene 256 direcciones: 192.168.1.0 a 192.168.1.255.

CIDRMáscaraIPs totalesIPs usablesUso típico
/32255.255.255.25511Host único, regla firewall para una IP
/30255.255.255.25242Enlaces punto a punto
/29255.255.255.24886Pequeño grupo de servidores
/28255.255.255.2401614Subredes diminutas
/27255.255.255.2243230Oficina pequeña
/26255.255.255.1926462Subred mediana
/24255.255.255.0256254”Clase C” clásica, la mayoría de LANs
/22255.255.252.01.0241.022Edificio o departamento
/20255.255.240.04.0964.094Oficina grande
/16255.255.0.065.53665.534”Clase B” clásica, org grande
/8255.0.0.016.777.21616.777.214”Clase A”, muy grande
/00.0.0.0Todas las IPsTodas las IPs”Internet”

Las IPs usables son el total menos 2: la primera (bits de host todo a cero) es la dirección de red, y la última (bits de host todo a uno) es la dirección de broadcast. En la mayoría de despliegues no las puedes asignar a hosts. En enlaces /31 punto a punto, RFC 3021 permite usar las dos; los routers modernos lo manejan.

La matemática: una red /N contiene 2^(32-N) direcciones. /24 es 2^8 = 256. /16 es 2^16 = 65536. Halveas la longitud del prefijo cada paso, doblas el tamaño de red.

Rangos de IP privada

RFC 1918 define tres rangos de IPv4 no routeables en internet pública. Cualquiera puede usarlos en su red interna sin coordinación:

RangoTamañoUso típico
10.0.0.0/816,7M direccionesRedes corporativas grandes, VPCs cloud
172.16.0.0/121M direcciones (172.16.0.0 - 172.31.255.255)Redes medianas, default de Docker
192.168.0.0/1665K direccionesRedes de casa, oficinas pequeñas

Otros dos a conocer:

  • 127.0.0.0/8 es loopback. 127.0.0.1 es “esta máquina”; ::1 es su equivalente IPv6.
  • 169.254.0.0/16 es link-local (APIPA en Windows, usado por servicios metadata de instancias cloud: 169.254.169.254 es metadata de AWS/GCP/Azure).

Si tu aplicación recibe un request desde una dirección 10.*, 172.16-31.*, o 192.168.*, el cliente está en red privada. El tráfico de internet no puede llegar directamente a esas direcciones sin NAT.

Aritmética CIDR que sí necesitas

Tres operaciones cubren el 95% del trabajo real con CIDR.

¿Está esta IP en esta red? Pon a cero los bits de host de la IP y compara con la dirección de red.

import ipaddress

# ¿Está 192.168.1.100 en 192.168.1.0/24?
network = ipaddress.ip_network("192.168.1.0/24")
ip = ipaddress.ip_address("192.168.1.100")
ip in network   # True

# ¿Está 10.0.5.5 en algún rango privado?
privates = [
    ipaddress.ip_network("10.0.0.0/8"),
    ipaddress.ip_network("172.16.0.0/12"),
    ipaddress.ip_network("192.168.0.0/16"),
]
any(ipaddress.ip_address("10.0.5.5") in n for n in privates)
# True

¿Cuántos hosts caben en esta subred? 2^(32-prefijo) - 2. Memoriza /24 (254), /16 (65534), /8 (16,7M), e interpola.

Dividir una subred en piezas más pequeñas. Una /24 contiene dos /25s, cuatro /26s, ocho /27s, dieciséis /28s, etc. — cada subred a nivel /N se divide en 2^(M-N) subredes de prefijo M. Los wizards VPC cloud y herramientas de subnetting lo manejan por ti.

Patrones VPC y security group

En AWS, GCP, Azure o cualquier VPC cloud, el layout canónico es:

  • Un CIDR VPC tipo 10.0.0.0/16 (65K direcciones totales).
  • Subredes dentro tipo 10.0.1.0/24 (254 usables) por zona de disponibilidad.
  • Reglas de security group escritas en CIDR: “permitir puerto 443 desde 0.0.0.0/0” significa desde todo internet; “permitir puerto 5432 desde 10.0.0.0/16” significa solo desde dentro del VPC.

Tres reglas para evitar errores comunes:

  1. No superpongas CIDRs. Si tu VPC es 10.0.0.0/16 y quieres peerear con otro VPC en 10.0.0.0/16, no se van a hablar — los rangos chocan. Elige rangos no superpuestos desde el principio.
  2. No uses /0 en una regla de security group a no ser que quieras decir “todo internet”. Error común: “permitir puerto 22 desde 0.0.0.0/0” en SSH. Eso es SSH público al mundo. Probablemente solo quieres 0.0.0.0/0 en puerto 443 para un load balancer público.
  3. Reserva suficiente espacio para crecer. Un VPC /16 parece mucho hasta que levantas EKS con miles de pods necesitando cada uno una IP. La mayoría de cloud providers recomiendan empezar con /16 o /18 para VPCs productivas.

Firewalls, rate limiting y matching por prefijo

Una regla de firewall, un rate limit o un match de geolocalización contra una IP es una pregunta CIDR. Tres patrones:

  • IP individual: CIDR /32. Útil para permitir una IP admin concreta.
  • Rango pequeño: /24 o /29 para una oficina o edge de un cloud provider.
  • Nivel país o provider: /16, /12, o incluso más grande, desde una BD GeoIP o los rangos publicados de un proveedor.

Matchear una IP entrante contra una lista de CIDRs es operación estándar. Las librerías la implementan con árbol (trie) para lookup O(log n) por request. No lo hagas con scan lineal contra millones de rangos.

IPv6 en un párrafo

IPv6 son 128 bits en vez de 32. CIDR funciona igual: 2001:db8::/32 es un /32 en IPv6, conteniendo 2^96 direcciones. Las privadas viven en fc00::/7 (unique local). ::1 es loopback. Casi todo el modelo mental se traslada; los números solo se vuelven más grandes. Los VPCs cloud modernos defaultean cada vez más a dual-stack (IPv4 + IPv6).

Tres comandos que se ganan su sitio

# Listar interfaces con sus IPs y CIDRs
ip addr show
# O en macOS:
ifconfig

# Ver la tabla de rutas (qué CIDR va por dónde)
ip route show
# O:
netstat -rn

# DNS inverso para una IP
dig -x 8.8.8.8 +short
# → dns.google.

Para la referencia shell que va con estos, mira el linux cheatsheet y el bash cheatsheet.

Conclusiones

CIDR es dirección/prefijo — los primeros N bits son red, el resto host. /24 son 256 direcciones, /16 son 65K, /8 son 16,7M; halvea el prefijo, dobla la red. Los rangos privados son 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. Usa CIDR en firewalls y security groups con intención; nunca escribas 0.0.0.0/0 en un puerto interno.

Por ·