Cuando escribimos un nombre de dominio -por ejemplo el nombre de la web en la que estás ahora mismo- tu ordenador realiza una «traducción» de dicho nombre a una dirección IP asociada. Es decir, que bajo la apariencia de que nada ocurre, en realidad suceden cosas. Y por supuesto pueden darse situaciones que impidan que dicha resolución tenga lugar, motivo por el cual te interesará conocer esta lista de comandos para gestionar DNS en Windows.
Hay muchos motivos por los que podría interesarnos comprobar el estado del Sistema de Nombres de Dominio en el ámbito de la administración de sistemas. Por ejemplo, para verificar que se actualizan correctamente o diagnosticar problemas de carga de sitios web.
¿Qué son los DNS?
Me permito citar en parte uno de mis artículos (que encontraréis más adelante) para definirlo. Un servidor DNS es, según la Wikipedia (definición completa aquí):
[…]un sistema de nomenclatura jerárquico descentralizado para dispositivos conectados a redes IP como Internet o una red privada. Este sistema asocia información variada con nombre de dominio asignado a cada uno de los participantes.
Según el que escribe estas líneas, existe además otra definición de DNS más de andar por casa y comprensible para todos: un servidor de este tipo posibilita la conversión de direcciones IP en formato numérico a un formato textual más fácil de asimilar para las personas.
Administrar DNS con nslookup
Una de las primeras herramientas que hemos de considerar es nslookup, una utilidad incluida en cualquier sistema Windows actual que nos permite hacer comprobaciones desde la consola (CMD o bien powershell).
Uso básico de Nslookup
Empezaremos describiendo la forma en que podemos ver el servidor DNS que realiza la traducción de nombres en nuestra red. Es el primer paso en la cadena cuando lanzamos una solicitud a una web/servicio ubicado en internet, o quizá en nuestra red u otra red departamental.
nslookup
En mi caso aparece listado el nombre de un appliance que tengo en mi red local, situado tras el encaminador (router) y que hará un reenvío de las solicitudes al mismo.
Ahora, si queremos ver la resolución de nombre para una IP, escribiremos lo siguiente:
nslookup <dirección_ip>
Obtendremos algo como lo siguiente.
En el campo nombre, aparece listado el nombre (valor A de registro DNS) para el host remoto, en este caso el servidor DNS primario de Google, tan conocido por todos. En el ejemplo anterior podemos hacer lo contrario, es decir, colocar en lugar de la IP un nombre de dominio, con lo que recibiremos la transcripción de la IP.
¡Inciso para Spam! digo.. ¡Para un consejo! He creado un ranking super completo dónde no sólo muestro los mejores antivirus gratuitos Windows 10 y 11, sino que también he analizado sus versiones premium para una protección total. ¡Échales un vistazo!.
Comprobar resolución de nombres de un servidor
Veamos ahora otro ejemplo. Lo que haremos es efectuar una solicitud como la anterior (preguntaremos por la página web mejor-antivirus.com, aunque en las imágenes conste como protegermipc.net) a un servidor de nombres concreto. Esto puede servirnos para determinar si dicho servidor de nombres funciona correctamente.
nslookup <host_remoto> <servidor_remoto>
Podemos utilizar tanto el formato numérico (IP) como alfanumérico (nombre de dominio).
Pongamos el mismo ejemplo pero con otro servidor. Ahora preguntaremos por este sitio web a 1.1.1.1, el servidor de nombres primario de Cloudflare.
nslookup mejor-antivirus.com 1.1.1.1
Las primeras dos líneas se refieren al servidor al que hemos efectuado la consulta. La siguiente sección nos da el nombre del registro (A, por defecto) y su IP correspondiente. Nótese que la respuesta es «no autoritativa».
Igual que para el ejemplo previo, podríamos sustituir sin problemas el dominio mejor-antivirus.com por su correspondiente IP, o bien sustituir la IP del servidor de Cloudflare por su dirección numérica correspondiente.
Obtener respuesta autoritativa de un servidor DNS
Vamos ahora con algo un poco más curioso. En último ejemplo hablaba de que la respuesta recibida era no autoritativa. ¿A qué se refiere esto? Lo que nos dice es que hemos recibido una respuesta (que de hecho es perfectamente válida) pero que dicha respuesta no proviene del registro primario, de la raíz de los registros de nombres.
SOA es lo que se conoce como Start of Authority -comienzo de autoridad- y es que cada dominio tiene siempre un servidor DNS primario asociado. En la siguiente imagen se explica como solicitud recursiva o solicitud no recursiva.
Si, cuando nuestro navegador pregunta al servidor DNS más cercano a nosotros, este no conoce la respuesta, lo que hará es lanzar una consulta recursiva (elevará nuestra consulta) a los servidores DNS con los que tiene contacto por distribución geográfica. Si ningún servidor tuviera registros de la web deseada, es escalaría dicha solicitud al servidor de nombres autoritativo o primario, que es el SOA.
Por supuesto, nosotros podemos recurrir directamente al SOA si queremos, sin tomar en cuenta la cadena habitual de resolutores (eso sí, seguiremos necesitando a nuestro servidor DNS loca por motivos evidentes).
Obtener el SOA de un host
nslookup -type=soa <dominio_o_IP>
Preguntar al SOA por un host
Con el comando anterior hemos obtenido el valor SOA (ns1.wordpress.com) para el dominio, a través de nuestro resolutor local, que a su vez ha hecho sus preguntas o ya tenía en caché el resultado. De ahí que aún veamos una respuesta no autoritativa.
Ahora lo que haremos es preguntar por el dominio deseado al SOA específicamente.
nslookup -type=soa <dominio_o_IP>
<servidor_DNS_SOA>
Voilá! Ahí lo tenemos, ns1.wordpress.com se corresponde con la ip198.181.116.9. También veremos otros datos más técnicos, en relación a los TTL -TimeToLive o Tiempo de Vida- para los registros DNS. razonable.
Comprobar registros DNS MX
Como ejemplo adicional de uso de comandos para averiguar servidores de nombres, podemos ver cómo hacerlo con servidores de email. Esto nos puede interesar, por ejemplo, para obtener el FQDN o dirección IP de un servidor de correo.
Para obtener información sobre registros Domain Name System de una pasarela de correo (de tipo MX) haremos lo siguiente.
nslookup
set type=mx
dominio.tld
Donde dominio.tld es nuestro servidor remoto. Así, para ver los posibles registros MX asociados a Gmail.com, escribiremos:
nslookup
set type=mx
gmail.com

Ejemplo de lo anterior.
Comprobar caducidad de un registro DNS en caché con Nslookup debug
Los TTL o tiempos de vida se refieren a resultados que quedan en caché en los servidores primario, intermedios e incluso en nuestro mismo host local. El uso de la cache es muy importante para aliviar de carga a los servidores de nombres autoritativos, de lo contrario saturaríamos la red con «tanta pregunta» a los servidores.
El uso de la cache tiene un efecto negativo, sin embargo, y es que podríamos acabar recibiendo respuestas DNS desfasadas. Si vemos que la respuesta autoritativa (la que envía ns1.wordpress.com, en mi caso) y la no autoritativa (la que envía box.local, en mi caso) difieren, significaría que estamos utilizando un registro DNS cacheado en el resolutor de nombres de dominio al que hemos preguntado.
Para ver durante cuanto tiempo se cachea un registro usaremos la opción debug, como verás a continuación.
C:\WINDOWS\system32>nslookup -debug mejor-antivirus.com
------------
Got answer:
HEADER:
opcode = QUERY, id = 1, rcode = NOERROR
header flags: response, auth. answer, want recursion, recursion avail.
questions = 1, answers = 1, authority records = 0, additional = 0
QUESTIONS:
136.1.168.192.in-addr.arpa, type = PTR, class = IN
ANSWERS:
-> 136.1.168.192.in-addr.arpa
name = box.local
ttl = 0 (0 secs)
------------
Servidor: box.local
Address: 192.168.1.136
------------
Got answer:
HEADER:
opcode = QUERY, id = 2, rcode = NXDOMAIN
header flags: response, want recursion, recursion avail.
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
mejor-antivirus.com.lan, type = A, class = IN
------------
------------
Got answer:
HEADER:
opcode = QUERY, id = 3, rcode = NXDOMAIN
header flags: response, want recursion, recursion avail.
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
mejor-antivirus.com.lan, type = AAAA, class = IN
------------
------------
Got answer:
HEADER:
opcode = QUERY, id = 4, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 2, authority records = 0, additional = 0
QUESTIONS:
mejor-antivirus.com, type = A, class = IN
ANSWERS:
-> mejor-antivirus.com
internet address = 192.0.78.25
ttl = 150 (2 mins 30 secs)
-> mejor-antivirus.com
internet address = 192.0.78.24
ttl = 150 (2 mins 30 secs)
------------
Respuesta no autoritativa:
DNS request timed out.
timeout was 2 seconds.
timeout (2 secs)
Nombre: mejor-antivirus.com
Addresses: 192.0.78.25
192.0.78.24
La parte seleccionada en cursiva y color ojo representaría el bloque donde se muestra el TTL (tiempo de refresco) para el nombre de dominio de esta web. Pero cuidado, en el ejemplo hemos usado la siguiente sintaxis:
nslookup -debug <host>
Por tanto, hemos obtenido resultados del servidor de nombres más cercano (box.local). Si quisiéramos saber cómo trata la caché el SOA (servidor DNS primario para el recurso) lo añadiríamos al final, obteniendo algo así:
[...]
Got answer:
HEADER:
opcode = QUERY, id = 4, rcode = NOERROR
header flags: response, auth. answer, want recursion
questions = 1, answers = 2, authority records = 0, additional = 0
QUESTIONS:
mejor-antivirus.com, type = A, class = IN
ANSWERS:
-> mejor-antivirus.com
internet address = 192.0.78.25
ttl = 300 (5 mins)
-> mejor-antivirus.com
internet address = 192.0.78.24
ttl = 300 (5 mins)
[...]
Gestionar DNS en Windows con ipconfig
La herramienta ipconfig es otra utilidad de linea de comandos de Windows que encontraremos en cualquier edición. Es el primer lugar al que acudir cuando necesitamos conocer la dirección IP que tiene asignado un aparato (ifconfig o ip addr en Linux).
Sin embargo también nos da otros datos valiosos y uno de ellos el servidor DNS primario/secundario suponiendo que hayamos asignado dos. Ojo, no me refiero al servidor SOA a pesar de haber usado el término primario, pero es el servidor DNS primario para nosotros. Esto es así porque de los posibles, será el primero en traducir la respuesta.
Si hubiera más de uno, aparecería más de un registro, pero no es mi caso.
Ver y vaciar la caché DNS en Windows
Windows (y cualquier sistema operativo, por defecto) emplea una memoria cache local para resolución de nombres. Las entradas almacenadas en caché podemos verlas así:
ipconfig /displaydns
Si, por ejemplo, decidimos cambiar de servidores DNS, podríamos ver que los efectos no se notan de manera inmediata. Lanzaremos este comando para solucionarlo:
ipconfig /flushdns
La caché habrá quedado vacía y cualquier solicitud futura tendrá que pasar por el servidor DNS que hayamos escogido.
Registrar DNS
Por último hablaremos de la opción para registrar dns en Windows. ¿Qué es lo que hace? Bien, si nuestro equipo reside en una red sin dominio (como un grupo de trabajo) realmente no hará nada útil. Tampoco ayuda en base a la comunicación con los servidores DNS públicos.
Por contra, si estamos en una red de dominio lo que hace el comando es bien crear o bien actualizar el registro A/AAAA de nuestro host (equipo) en el sistema de resolución de nombres integrado de Active Directory.
Hasta aquí por hoy. Nos ha dado tiempo a repasar algunas cosas interesantes acerca de los nombres de dominio, su funcionamiento y cómo administrar DNS en Windows. Cualquier errata, sugerencia o mejora será bienvenida en los comentarios, y por supuesto recuerda el dicho: compartir es vivir 😉