Una página que abría solo para uno
Una consulta DNS es el camino que sigue una máquina para convertir un nombre en una dirección. Saber leerla ayuda a encontrar por qué un nombre funciona en un equipo y en otro no.
Un técnico de soporte recibe una llamada. La web de la tienda se abre en un portátil y en otro no, aunque están en la misma red. La causa es una línea vieja en un fichero pequeño del segundo portátil. Ese fichero responde por el nombre antes de que nadie pregunte a la red.
Al final de esta lección
Nota
Puedo buscar un nombre con dig y decir qué registro respondió.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Resolutor | la parte de una máquina que busca los nombres | |
| Fichero hosts | una lista corta de nombres y direcciones en la propia máquina | /etc/hosts |
| CNAME | un registro que dice que este nombre es otro nombre | |
| TTL | los segundos que se puede guardar una respuesta | 300 |
| NXDOMAIN | la respuesta de que este nombre no existe | |
| Zona | los nombres de los que se encarga un servidor DNS | tienda.test |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una máquina busca en dos sitios
Antes de preguntar a la red, una máquina lee su fichero hosts. Si el nombre está ahí, esa respuesta gana. Solo después el resolutor pregunta a un servidor DNS.
Un fichero /etc/nsswitch.conf fija el orden. La palabra files es el fichero hosts, y dns es el servidor.
Lee el orden que sigue la máquina
grep '^hosts' /etc/nsswitch.confSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Busca un nombre como lo hacen los programas
getent hosts localhostSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un servidor DNS responde con registros
Un servidor DNS guarda una zona, los nombres de los que se encarga. Cada nombre tiene registros, y cada respuesta lleva un TTL: un resolutor puede guardarla ese tiempo.
Aquí arrancas un servidor pequeño tuyo para una tienda inventada. Escucha en el puerto 5300, solo en esta máquina, y guarda una zona, tienda.test.
Arranca un servidor de prueba para la tienda
sudo dnsmasq --conf-file= --no-hosts --no-resolv --port=5300 --listen-address=127.0.0.1 --bind-interfaces --local-ttl=300 --local=/tienda.test/ --host-record=tienda.test,10.20.30.40 --host-record=correo.tienda.test,10.20.30.50 --cname=www.tienda.test,tienda.test --mx-host=tienda.test,correo.tienda.test,10 --txt-record=tienda.test,v=demoSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejemplo resuelto: preguntar con dig
| Escribes | Pregunta | Imprime |
|---|---|---|
| dig +short @127.0.0.1 -p 5300 tienda.test | El registro A | 10.20.30.40 |
| dig +noall +answer ... www.tienda.test | El nombre y sus registros | Una línea CNAME y luego la línea A |
| dig +short ... tienda.test MX | Quién recibe el correo | 10 correo.tienda.test. |
| dig +short ... -x 10.20.30.40 | Qué nombre tiene esta dirección | tienda.test. |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pide la dirección de la tienda
dig +short @127.0.0.1 -p 5300 tienda.testSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Sigue la cadena desde el nombre www
dig +noall +answer @127.0.0.1 -p 5300 www.tienda.testSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pregunta quién recibe el correo
dig +short @127.0.0.1 -p 5300 tienda.test MXSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pregunta qué nombre tiene una dirección
dig +short @127.0.0.1 -p 5300 -x 10.20.30.40Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El estado dice qué falló
Cada respuesta tiene un estado. NOERROR significa que el servidor respondió. NXDOMAIN significa que el nombre no existe en una zona que el servidor guarda.
REFUSED significa que el servidor no responderá por ese nombre. Tu servidor de prueba solo guarda tienda.test y no tiene a quién más preguntar.
Pide un nombre que falta en la zona
dig @127.0.0.1 -p 5300 nada.tienda.test | grep statusSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide un nombre de otra zona
dig @127.0.0.1 -p 5300 tienda.invalid | grep statusSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que dig y ping buscan un nombre de la misma manera. No es así. dig pregunta a un servidor DNS y a nadie más. La mayoría de los programas, ping incluido, leen antes el fichero hosts. Un nombre puede funcionar en un navegador y no mostrar nada con dig.
Mira cómo discrepan los dos caminos
dig +short @127.0.0.1 -p 5300 localhostSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una búsqueda real baja etiqueta a etiqueta
En internet ningún servidor conoce todos los nombres. Un resolutor pregunta a la raíz, luego al servidor de la terminación y luego al de la empresa.
El laboratorio no tiene internet: esta tabla se lee y no se ejecuta. Muestra las preguntas para www.tienda.ejemplo.
Ejemplo resuelto: buscar www.tienda.ejemplo
| Paso | El resolutor pregunta | La respuesta |
|---|---|---|
| 1 | A un servidor raíz | Pregunta a los servidores de la terminación .ejemplo |
| 2 | A un servidor de .ejemplo | Pregunta a los servidores de tienda.ejemplo |
| 3 | A un servidor de tienda.ejemplo | www es 203.0.113.20, guardado 300 segundos |
| 4 | A nadie, durante 300 segundos | El resolutor responde desde su memoria |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Para el servidor de prueba
sudo pkill -f '[-]-port=5300'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para ir más lejos: la cabecera de dig
Ejecuta otra vez dig @127.0.0.1 -p 5300 tienda.test, con el servidor de prueba arrancado, y lee toda la cabecera.
Busca la línea de las banderas y los números de preguntas y respuestas. Luego pide nada.tienda.test y compara los números. ¿Cuál cambió?