🔍 Lab 09: Resolución de Nombres (DNS)¶
Las computadoras hablan con IPs, pero los humanos usamos nombres (google.com, servidor-interno). El DNS (Domain Name System) es el servicio que traduce unos en otros.
En este lab vas a entender cómo el sistema operativo resuelve un nombre paso a paso — no solo que "funciona", sino por qué.
🏗️ Topología del Laboratorio¶
Copia y pega este YAML en Topología → Importar:
name: "lab-10-dns"
nodes:
- name: MI-PC
type: HOST
x: 100
y: 200
- name: ROUTER-DNS
type: ROUTER
x: 350
y: 200
- name: CLOUD-ISP
type: CLOUD
x: 600
y: 200
links:
- source: MI-PC
target: ROUTER-DNS
- source: ROUTER-DNS
target: CLOUD-ISP
🛠️ Paso 1: Conectividad básica a Internet¶
En MI-PC:
En ROUTER-DNS:
ip addr add 192.168.1.1/24 dev eth1
ip addr add 10.0.0.1/30 dev eth2
ip link set eth1 up
ip link set eth2 up
ip route add default via 10.0.0.2
En CLOUD-ISP:
Verificá que tenés "tubería" a Internet:
❌ Paso 2: Tenés tubería, pero no nombres¶
Ahora intentá con un nombre:
Resultado:
Ese error significa: "sé hacer ping, pero no sé qué IP tiene google.com porque nadie me dijo a quién preguntarle". La "tubería" existe (el ping a 8.8.8.8 funcionó), pero falta el servicio que traduce nombres.
📜 Paso 3: La agenda local — /etc/hosts¶
Antes de consultar un servidor externo, el sistema operativo mira un archivo local: /etc/hosts. Es como una agenda de contactos manual — si el nombre está ahí, usa esa IP directamente sin preguntar a nadie.
Funciona. Pero /etc/hosts tiene dos limitaciones:
- Hay que editarlo manualmente en cada máquina
- No escala para millones de dominios
Por eso existe DNS.
📡 Paso 4: El servidor DNS — /etc/resolv.conf¶
Para consultar un servidor DNS externo, el sistema necesita saber su dirección. Ese archivo es /etc/resolv.conf:
# Ver el estado actual (probablemente vacío)
cat /etc/resolv.conf
# Configurar el DNS de Google como servidor
echo "nameserver 8.8.8.8" > /etc/resolv.conf
# Probar de nuevo
ping -c 2 google.com
Ahora funciona. Lo que hizo el sistema:
1. Buscó google.com en /etc/hosts → no está
2. Consultó al servidor 8.8.8.8: "¿qué IP tiene google.com?"
3. 8.8.8.8 respondió con una IP
4. El ping se hizo a esa IP
Orden de prioridad:
/etc/hostssiempre va primero. Si el nombre está ahí, nunca se consulta el servidor DNS. Útil para testing — podés "mentirle" al sistema sobre qué IP tiene un dominio.
🔬 Paso 5: Ver la conversación DNS con dig¶
ping solo te dice si hay respuesta. dig te muestra toda la conversación DNS:
Leé la respuesta sección por sección:
;; QUESTION SECTION:
;google.com. IN A ← pregunta: "¿qué IPv4 tiene google.com?"
;; ANSWER SECTION:
google.com. 300 IN A 142.250.x.x ← respuesta: la IP
;; Query time: 12 msec ← cuánto tardó
;; SERVER: 8.8.8.8#53 ← quién respondió
Ahora probá consultar a un servidor DNS diferente:
Deberías obtener la misma IP pero desde el servidor de Cloudflare. Eso muestra que DNS es un sistema distribuido — múltiples servidores tienen las mismas respuestas.
🏠 Paso 6: DNS local sin Internet (bonus)¶
Si no tenés conexión o querés practicar sin depender de Internet, podés levantar un servidor DNS local con dnsmasq (el mismo del lab de DHCP):
# En ROUTER-DNS — actúa como servidor DNS para la red interna
dnsmasq --no-daemon \
--address=/servidor-interno/192.168.1.50 \
--address=/base-datos/192.168.1.51 \
--interface=eth1
# En MI-PC — apuntar al router como servidor DNS
echo "nameserver 192.168.1.1" > /etc/resolv.conf
ping -c 2 servidor-interno # resuelve a 192.168.1.50
ping -c 2 base-datos # resuelve a 192.168.1.51
Así es como funciona el DNS interno en empresas: un servidor local que resuelve nombres propios (servidor-interno, impresora-piso2) sin salir a Internet.
📝 Ejercicio: La prioridad de /etc/hosts¶
En el Paso 4 configuraste nameserver 8.8.8.8 en /etc/resolv.conf. Ahora probá esto:
# En MI-PC
# "Mentile" al sistema sobre la IP de google.com
echo "1.1.1.1 google.com" >> /etc/hosts
# Consultá con dig
dig google.com
Fijate en la ANSWER SECTION: la IP que devuelve es 1.1.1.1, no la real de Google. Aunque tu servidor DNS es 8.8.8.8, /etc/hosts siempre gana.
¿Por qué importa? En desarrollo y testing,
/etc/hostste permite redirigir un dominio a un servidor local sin tocar DNS. Pero también puede ser fuente de errores difíciles de diagnosticar si alguien "olvidó" una entrada ahí.
Quitá la entrada antes de seguir:
💡 Conceptos Clave¶
/etc/hosts: agenda local, prioridad máxima, no escala/etc/resolv.conf: apunta al servidor DNS a consultar- Registro A: traduce un nombre a una IPv4
dig: herramienta de diagnóstico DNS — más información queping- Puerto 53 UDP: el puerto estándar de DNS