dig: opciones interesantes para consultas DNS

Publicado por Diego Córdoba en

Hoy hablaremos sobre el comando dig. dig viene del inglés «Domain Information Groper», y es una herramienta flexible para consultar información a los servidores DNS. dig ejecuta un lookup a los servicios de DNS y nos devuelve la salida que necesitemos.dns dig

Yo, y muchos administradores de servicios DNS solemos utilizar esta herramienta para encontrar errores y hacer troubleshooting a los servicios de nombres, ya que es una herramienta muy útil, fácil de utilizar, y con una salida limpia.

Por supuesto, no es la única herramienta… también podemos utilizar host o nslookup… pero dig es realmente muy cómodo.

Instalación de dig

En la mayor parte de las distros es necesario instalarlo previamente. dnsutils suele ser el paquete de software que lo incluye, por ejemplo, en Debian o Ubuntu.

sudo aptitude install dnsutils

O en arch podemos hacerlo así:

sudo pacman -S bind-tools

En distros RPM como centos o fedora podríamos hacerlo así:

yum install bind-utils

Sintaxis básica

La sintaxis del comando es la siguiente:

dig [@server] name [type]

Donde:

  • @server es un servidor específico al que vamos a preguntarle.
  • name es el nombre de host/dominio sobre el que necesitamos información
  • type es el tipo de registro, y puede omitirse, en cuyo caso obtendremos la información para el registro A (address).

Un ejemplo

diego@cryptos:~$ dig juncotic.com

; <<>> DiG 9.10.4-P2 <<>> juncotic.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46638
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;juncotic.com. IN A

;; ANSWER SECTION:
juncotic.com. 32 IN A 52.33.197.160

;; Query time: 28 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Mon Aug 29 14:09:47 ART 2016
;; MSG SIZE rcvd: 57

Para entender la salida:

  • Todas las líneas que inician con «;» son comentarios
  • La primer línea nos devuelve la versión del comando dig que estamos utilizando, DiG 9.10.4-P2 en mi caso.
  • Luego muestra la sección de consulta con nuestra consulta (question section). Podemos ocultar esta sección con «+noquestion».
  • A continuación, la sección de la respuesta (answer section). Podemos ocultar esta sección con «+noanswer» (si es que tiene algún sentido :P).
  • Y por último, muestra estadísticas de la consulta. Con la opción «+nostats» podemos ocultar esta sección de estadísticas.

Otros registros

Por defecto la respuesta está asociada a los registros A del dominio, es decir, por defecto nos devuelve la dirección o direcciones IP (Address) del dominio, pero no es la única opción. Podemos consultar cualquier otro registro del DNS, entre ellos:dig dns

  • SOA – start of authority: información de zona autoritativa y administración de la zona en el servidor DNS.
  • MX – mail exchanger: información de los intercambiadores de correo del dominio.
  • TTL – time to live: nos permite ver el tiempo de caducidad de las entradas en la zona DNS del dominio.
  • TXT – text: nos permite ver el contenido de registros TXT almacenados por el administrador, por ejemplo, como comentarios, o para usos específicos como el SPF.
  • NS – name server: nos permite ver los servidores DNS que resuelven la zona de dominio particular.
  • CNAME – cannonical name: nos permite ver los alias de ciertos nombres de dominio.
  • AAAA – ipv6 address: permite ver el direccionamiento IPv6 de un equipo

Estos son los más representativos y útiles, pero existen otros registros adicionales y sus valores dependen de quien administra el servidor dns de la zona de dominio en cuestión.

Para analizar las salidas particulares sobre un dominio los invito a que, en línea de comandos, ejecuten, para un dominio particular de vuestro interés:

dig dominio a      # address record
dig dominio ns     # nameserver record
dig dominio mx     # mx record
dig dominio txt    # txt record
dig dominio any    # todos los registros

Modificando las consultas

dig permite, mediante el caracter «+», agregar o quitar información de la salida. Veamos algunas opciones interesantes:

  • +[no]additional: muestra u oculta la sección de datos adicionales.
  • +[no]all: muestra u oculta todos los datos. Ocultar todos los datos sirve para luego mostrar algún dato específico que necesitemos. Por ejemplo, «+noall +answer» ocultará todos los datos, y solo mostrará la respuesta.
  • +[no]answer: muestra u oculta la sección de respuesta
  • +[no]authority: muestra u oculta la sección de autoridad SOA
  • +[no]question: muestra u oculta la sección de la consulta que hicimos.
  • +[no]comments: muestra u oculta los comentarios (líneas que inician con «;».
  • +[no]crypto: muestra u oculta los datos del registro criptográfico DNSSEC utilizado para firmar las zonas en algunos servidores.
  • +[no]dnssec: muestra u oculta los datos del registro DNSSEC en la sección adicional.
  • +[no]keepopen: mantiene el socket tcp utilizado para una consulta abierto, de modo que subsiguientes consultas utilizarán el mismo socket contra el servidor DNS que estemos utilizando. Esto es válido cuando las consultas se realizan sobre TCP en vez de UDP.
  • +[no]recurse: habilita o deshabilita la búsqueda recursiva. Por defecto siempre está activada, salvo que la desactivemos directamente con esta opción, o utilicemos alguna opción que la desactive, como +nssearch.
  • +[no]short: permite o no imprimir una salida corta específica, por defecto está desactivada y vemos la salida completa.
  • +[no]stats: muestra u oculta la sección de estadísticas. Por defecto siempre está activada.
  • +[no]tcp: fuerza o no la utilización de TCP en vez de UDP para realizar las consultas. Por defecto es UDP, salvo que el tipo de registro sea AXFR (transferencia de zona).
  • +[no]trace: habilita o no la trazabilidad de la consulta, lo que permite ver la lista completa de nodos y pasos de resolución de un nombre, muy útil para entender cómo funciona un sistema de nombres de dominio.
  • +[no]ttlid: muestra o no la información del TTL cuando imprime cada registro.

Veamos una salida específica aplicando algunos de estos modificadores:

diego@cryptos:~$ dig juncotic.com +noquestion +noauth +nostats +trace +tcp +nocmd +noadditional +nocomments +nodnssec

; <<>> DiG 9.10.4-P2 <<>> juncotic.com +noquestion +noauth +nostats +trace +tcp +nocmd +noadditional +nocomments +nodnssec
;; global options: +cmd
. 21213 IN NS a.root-servers.net.
. 21213 IN NS b.root-servers.net.
. 21213 IN NS c.root-servers.net.
. 21213 IN NS d.root-servers.net.
. 21213 IN NS e.root-servers.net.
. 21213 IN NS f.root-servers.net.
. 21213 IN NS g.root-servers.net.
. 21213 IN NS h.root-servers.net.
. 21213 IN NS i.root-servers.net.
. 21213 IN NS j.root-servers.net.
. 21213 IN NS k.root-servers.net.
. 21213 IN NS l.root-servers.net.
. 21213 IN NS m.root-servers.net.
;; Received 239 bytes from 8.8.4.4#53(8.8.4.4) in 31 ms

;; Connection to 2001:500:84::b#53(2001:500:84::b) for juncotic.com failed: network unreachable.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
;; Received 529 bytes from 193.0.14.129#53(k.root-servers.net) in 280 ms

juncotic.com. 172800 IN NS ns1.afraid.org.
juncotic.com. 172800 IN NS ns2.afraid.org.
juncotic.com. 172800 IN NS ns3.afraid.org.
juncotic.com. 172800 IN NS ns4.afraid.org.
;; Received 123 bytes from 192.42.93.30#53(g.gtld-servers.net) in 230 ms

juncotic.com. 60 IN A 52.33.197.160
juncotic.com. 3600 IN NS ns4.afraid.org.
juncotic.com. 3600 IN NS ns1.afraid.org.
juncotic.com. 3600 IN NS ns2.afraid.org.
juncotic.com. 3600 IN NS ns3.afraid.org.
;; Received 287 bytes from 208.43.71.243#53(ns2.afraid.org) in 211 ms

Los invito a que realicen la misma consulta agregando o quitando modificadores 🙂

Cansado de especificar tantas opciones?

Si asiduamente realizamos consultas de cierto tipo y no queremos typear siempre los mismos modificadores, podemos escribirlos en el archivo ~/.digrc del home de nuestro usuario, de modo que al ejecutar el comando dig estas opciones ya serán tenidas en cuenta, y no necesitaremos escribirlas cada vez.

Otras opciones

El comando dig permite además varias opciones, como cualquier comando en Linux. Algunas de las más útiles son las siguientes:

  • -6 o -4: para realizar consultas únicamente sobre una red IPv6 o IPv4 respectivamente.
  • -b address[#port]: permite especificar una dirección válida desde la que consultar, y opcionalmente un puerto de origen.
  • -x: permite hacer una resolución inversa sobre IPv4 (en IPv6 muestra el formato nibble bajo el dominio IP6.ARPA.
  • -i: permite una resolución inversa sobre IPv6.

Para más opciones y documentación, nada mejor que leer el man:

man dig

Espero que esta breve guía de dig les resulte de utilidad!

Si tienen algún modificador que no mencioné y les resultó interesante de ver, pueden comentar el artículo para sumar la info.

Gracias!


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador

2 comentarios

sGoico · 29 agosto, 2016 a las 22:48

Muy bien explicado. Solo un detalle para comentar: en la explicación de los registros TXT se te fue un TTL sin querer.

    Diego Córdoba · 29 agosto, 2016 a las 22:50

    Gracias @sGoico! Actualizado

Los comentarios están cerrados.