Cómo usar el comando dig en Linux

Una ventana de terminal estilizada en un sistema Linux.
Fatmawati Achmad Zaenuri / Shutterstock

El digcomando de Linux le permite consultar servidores DNS y realizar búsquedas de DNS. También puede encontrar el dominio al que conduce una dirección IP. ¡Te mostraremos cómo!

Cómo funciona el comando de excavación

La gente usa el digcomando de Linux  para consultar los servidores del Sistema de nombres de dominio (DNS) . diges un acrónimo de Domain Information Groper . Con dig, puede consultar los servidores DNS para obtener información sobre varios registros DNS, incluidas direcciones de host, intercambios de correo, servidores de nombres e información relacionada. Estaba destinado a ser una herramienta para diagnosticar problemas de DNS. Sin embargo, puede usarlo para hurgar y aprender más sobre DNS, que es uno de los sistemas centrales que mantiene el tráfico de enrutamiento de Internet.

Internet usa direcciones de protocolo de Internet (IP) para identificar «ubicaciones» en la web, pero la gente usa nombres de dominio. Cuando escribe un nombre de dominio en una aplicación, como un navegador web o un  cliente SSH , algo debe traducirse del nombre de dominio a la dirección IP real. Aquí es donde entra en juego el sistema de nombres de dominio.

Cuando usa un nombre de dominio con cualquier programa conectado a Internet, su enrutador local no puede resolverlo (a menos que esté almacenado en caché de una solicitud anterior). Por lo tanto, su enrutador consulta el servidor DNS de su proveedor de servicios de Internet (ISP) o cualquier otro que haya configurado su sistema para usar. Estos se denominan servidores precursores de DNS.

Si el servidor DNS recibió recientemente la misma solicitud de otra persona en la misma computadora, la respuesta podría estar en su caché. Si ese es el caso, simplemente envía esa misma información a su programa.

Si el servidor precursor de DNS no puede localizar el dominio en su caché, se pone en contacto con un servidor de nombres raíz de DNS . Un servidor raíz no contendrá la información requerida para resolver nombres de dominio en direcciones IP, pero contendrá listas de servidores que pueden ayudar con su solicitud.

El servidor raíz busca en el dominio de nivel superior al que pertenece su nombre de dominio, como .COM, .ORG, .CO.UK, etc. Luego envía una lista de los servidores de dominio de nivel superior que manejan esos tipos de dominios al servidor precursor de DNS. El servidor precursor de DNS puede entonces realizar su solicitud una vez más, a un servidor de dominio de nivel superior.

El servidor de dominio de nivel superior envía los detalles del  servidor de nombres autorizado  (donde se almacenan los detalles del dominio) al servidor precursor de DNS. Luego, el servidor DNS consulta al servidor de nombres autorizado que aloja la zona del dominio que ingresó originalmente en su programa. El servidor de nombres autorizado envía la dirección IP de vuelta al servidor DNS, que, a su vez, se la envía a usted.

Instalación de excavación

digya estaba instalado en nuestras computadoras Ubuntu 18.04 y Fedora 30. Sin embargo, tuvimos que instalarlo en la computadora Manjaro 18.04 con el siguiente comando:

sudo pacman -Sy bind-tools

El comando "sudo pacman -Sy bind-tools" en una ventana de terminal.

Introducción a excavar

En nuestro primer ejemplo, devolveremos las direcciones IP asociadas con un nombre de dominio. A menudo, varias direcciones IP están asociadas con un solo nombre de dominio. Esto sucede a menudo si se utiliza el equilibrio de carga, por ejemplo.

Usamos la +shortopción de consulta, como se muestra a continuación, que nos da una respuesta concisa:

excavar howtogeek.com + corto

El comando "dig howtogeek.com + short" en una ventana de terminal.

Todas las direcciones IP asociadas con el dominio howtogeek.com se enumeran para nosotros. En el otro extremo del espectro, si no usamos la +shortopción de consulta, la salida es bastante detallada.

Relacionado:  Cómo mostrar la fecha y la hora en la terminal de Linux (y usarla en scripts Bash)

Entonces, escribimos lo siguiente para canalizarlo less:

dig howtogeek.com | Menos

El comando "dig howtogeek.com | less" en una ventana de terminal.

La salida se muestra en less, como se muestra a continuación.

La salida del comando "dig howtogeek.com | less" en una ventana de terminal.

Aquí está la lista completa:

; << >> DiG 9.11.3-1ubuntu1.11-Ubuntu << >> howtogeek.com
;; opciones globales: + cmd
;; Tengo respuesta:
;; - >> HEADER << - código de operación: QUERY, estado: NOERROR, id: 12017
;; banderas: qr rd ra; CONSULTA: 1, RESPUESTA: 4, AUTORIDAD: 0, ADICIONAL: 1

;; OPT PSEUDOSECCIÓN:
; EDNS: versión: 0, banderas :; udp: 65494
;; SECCIÓN DE PREGUNTAS:
; howtogeek.com. EN UN

;; RESPUESTA SECCIÓN:
howtogeek.com. 3551 EN UN 151.101.194.217
howtogeek.com. 3551 EN UN 151.101.130.217
howtogeek.com. 3551 PULGADAS 151.101.66.217
howtogeek.com. 3551 EN UN 151.101.2.217

;; Tiempo de consulta: 0 mseg
;; SERVIDOR: 127.0.0.53 # 53 (127.0.0.53)
;; CUÁNDO: Dom 22 de marzo a las 07:44:37 EDT de 2020
;; TAMAÑO MSG rcvd: 106

Analicemos esa pieza por pieza.

Encabezamiento

Primero, echemos un vistazo a lo que tenemos en el encabezado:

; << >> DiG 9.11.3-1ubuntu1.11-Ubuntu << >> howtogeek.com
;; opciones globales: + cmd
;; Tengo respuesta:
;; - >> HEADER << - código de operación: QUERY, estado: NOERROR, id: 12017
;; banderas: qr rd ra; CONSULTA: 1, RESPUESTA: 4, AUTORIDAD: 0, ADICIONAL: 1

Ahora, esto es lo que significa todo eso:

  • Primera línea: la versión digy el dominio que se consultó.
  • Opciones globales:  como veremos, puede utilizar digpara consultar varios dominios simultáneamente. Esta línea muestra las opciones que se han aplicado a todas las consultas de dominio. En nuestro ejemplo simple, era solo la +cmd opción predeterminada (comando).
  • Opcode: Query: Este es el tipo de operación que se solicitó que, en este caso, fue un query. Este valor también puede ser iquerypara una consulta inversa o status si solo está probando el estado del sistema DNS.
  • Estado: Noerror: No hubo errores y la solicitud se resolvió correctamente.
  • ID: 12017 : este ID aleatorio une la solicitud y la respuesta.
  • Banderas: qr er ra: Estos soporte para query, recursion desiredy recursion available. La recursividad es una forma de búsqueda de DNS (la otra es iterativa). También puede ver AA, que significa Respuesta autorizada, lo que significa que un Servidor de nombres autorizado proporcionó la respuesta.
  • Consulta: 1: la cantidad de consultas en esta sesión, que fue una.
  • Respuesta: 4: el número de respuestas en esta respuesta, que es cuatro.
  • Autoridad: 0: el número de respuestas que provienen de un servidor de nombres autorizado, que fue cero en este caso. La respuesta fue devuelta desde la caché de un servidor precursor de DNS. No habrá una sección autorizada en la respuesta.
  • Adicional: 1:  Hay una pieza de información adicional. (Curiosamente, no se incluye nada a menos que este valor sea dos o más).

Optar pseudosección

A continuación, vemos lo siguiente en la pseudosección Opt:

;; OPT PSEUDOSECCIÓN:
; EDNS: versión: 0, banderas :; udp: 65494

Analicemos eso:

  • EDNS: versión 0: la versión de Extension System para DNS  que se está utilizando. EDNS transmite datos extendidos y banderas al extender el tamaño de los paquetes del Protocolo de datagramas de usuario (UDP). Esto se indica mediante una bandera de tamaño variable.
  • banderas: No hay banderas en uso.
  • udp : 4096: el tamaño del paquete UDP.

Sección de preguntas

En la sección Pregunta, vemos lo siguiente:

;; SECCIÓN DE PREGUNTAS:
; howtogeek.com. EN UN

Esto es lo que esto significa:

  • howtogeek.com: el nombre de dominio que estamos consultando.
  • IN: Estamos haciendo una consulta de clase de Internet.
  • R: A menos que especifiquemos lo contrario,  digsolicitaremos un registro A (dirección) del servidor DNS.

Sección de respuesta

La sección Respuesta contiene las siguientes cuatro respuestas que recibimos del servidor DNS:

howtogeek.com. 3551 EN UN 151.101.194.217
howtogeek.com. 3551 EN UN 151.101.130.217
howtogeek.com. 3551 PULGADAS 151.101.66.217
howtogeek.com. 3551 EN UN 151.101.2.217

Esto es lo que significan estas respuestas:

  • 3551: Este es el tiempo de vida (TTL), un entero de 32 bits con signo que contiene el intervalo de tiempo durante el cual se puede almacenar en caché un registro. Cuando caduca, los datos deben usarse en una respuesta a una solicitud hasta que el servidor DNS los actualice.
  • IN: Hicimos una consulta de clase de Internet.
  • R: Solicitamos un registro A del servidor DNS.
Relacionado:  Cómo eliminar un usuario en Linux (y eliminar todos los rastros)

Sección de estadísticas

Estadísticas es la sección final y contiene la siguiente información:

;; Tiempo de consulta: 0 mseg
;; SERVIDOR: 127.0.0.53 # 53 (127.0.0.53)
;; CUÁNDO: Dom 22 de marzo a las 07:44:37 EDT de 2020
;; TAMAÑO MSG rcvd: 106

Esto es lo que tenemos:

  • Tiempo de consulta: 0 mseg: el tiempo que se tardó en obtener la respuesta.
  • SERVIDOR: 127.0.0.53 # 53 (127.0.0.53): La dirección IP y el número de puerto del servidor DNS que respondió. En este caso, apunta al solucionador de stub de almacenamiento en caché local. Esto reenvía las solicitudes de DNS a los servidores DNS ascendentes que estén configurados. En la computadora de prueba de Manajro, la dirección que aparece aquí era 8.8.8.8 # 53, que es el servicio público de DNS de Google .
  • CUÁNDO: Dom 22 de marzo 07:44:37 EDT 2020: Cuándo se realizó la solicitud.
  • MSG SIZE rcvd: 106: El tamaño del mensaje recibido del servidor DNS.

Ser selectivo

No tienes que conformarte con los dos extremos de los labios apretados y los locuaces. El digcomando le permite incluir o excluir selectivamente secciones de los resultados.

Las siguientes opciones de consulta eliminarán esa sección de los resultados:

  • + nocomments: no mostrar líneas de comentarios.
  • + noauthority: No muestre la sección de autoridad.
  • + noadditional: no muestra la sección adicional.
  • + nostats: no mostrar la sección de estadísticas.
  • + noanswer: No muestra la sección de respuestas.
  • + noall: ¡No muestres nada!

La +noallopción de consulta se suele combinar con una de las anteriores para incluir una sección en los resultados. Por lo tanto, en lugar de escribir una larga cadena de opciones de consulta para desactivar varias secciones, puede utilizar +noallpara desactivarlas todas.

Luego, puede usar las siguientes opciones de consulta inclusiva para volver a activar aquellas que desea ver:

  • + comentarios: muestra líneas de comentarios.
  • + autoridad: Muestra la sección de autoridad.
  • + adicional: muestra la sección adicional.
  • + estadísticas: muestra la sección de estadísticas.
  • + respuesta: muestra la sección de respuestas.
  • + todo: muestra todo.

Escribimos lo siguiente para realizar una solicitud y excluir las líneas de comentarios:

cavar howtogeek.com + sin comentarios

El comando "dig howtogeek.com + nocomments" en una ventana de terminal.

Si usamos la +noallopción de consulta por sí sola, como se muestra a continuación, no obtendremos ningún resultado útil:

cavar howtogeek.com + noall

El comando "dig howtogeek.com + noall" en una ventana de terminal.

Podemos agregar selectivamente las secciones que queremos ver. Para agregar la sección de respuesta, escribimos lo siguiente:

dig howtogeek.com + noall + respuesta

El comando "dig howtogeek.com + noall + answer" en una ventana de terminal.

Si escribimos lo siguiente para activar +stats, también veremos la sección de estadísticas:

dig howtogeek.com + noall + answer + stats

El comando "dig howtogeek.com + noall + answer + stats" en una ventana de terminal.

La +noall +answercombinación se usa a menudo. Puede agregar otras secciones a la línea de comando según sea necesario. Si desea evitar escribir  +noall +answeren la línea de comandos cada vez que los usa dig, puede ponerlos en un archivo de configuración llamado «.digrc». Está ubicado en su directorio personal.

Escribimos lo siguiente para crear uno con echo :

echo "+ notodos + respuesta"> $ HOME / .digrc

Luego podemos escribir lo siguiente para verificar su contenido:

gato .digrc

Los comandos "echo" + noall + answer "> $ HOME / .digrc" y "cat .digrc" en una ventana de terminal.

Esas dos opciones ahora se aplicarán a todos los usos futuros de dig, como se muestra a continuación:

cavar ubuntu.org
dig linux.org
dig github.com

"dig ubuntu.org", "dig linux.org" y "dig github.com" en una ventana de terminal.

Este  digarchivo de configuración se utilizará para los ejemplos restantes de este artículo.

Registros DNS

La información devuelta a sus digsolicitudes se extrae de diferentes tipos de registros almacenados en el servidor DNS. A menos que solicitemos algo diferente, digconsulta el registro A (dirección). Los siguientes son los tipos de registros que se usan comúnmente con dig:

  • Un registro:  vincula el dominio a una dirección IP versión 4.
  • Registro MX: el  intercambio de correo registra los correos electrónicos directos enviados a los dominios al servidor de correo correcto.
  • Registro NS: los registros del servidor de nombres delegan un dominio (o subdominio) a un conjunto de servidores DNS.
  • Registro TXT: los registros de texto almacenan información basada en texto sobre el dominio. Por lo general, se pueden utilizar para suprimir el correo electrónico falsificado.
  • Registro SOA: los registros de inicio de autoridad pueden contener mucha información sobre el dominio. Aquí, puede encontrar el servidor de nombres principal, la parte responsable, una marca de tiempo para los cambios, la frecuencia de las actualizaciones de la zona y una serie de límites de tiempo para reintentos y abandonos.
  • TTL: El tiempo de vida es una configuración para cada registro DNS que especifica cuánto tiempo un servidor precursor de DNS puede almacenar en caché cada consulta de DNS. Cuando ese tiempo expira, los datos deben actualizarse para solicitudes posteriores.
  • CUALQUIERA: Esto le dice digque devuelva todo tipo de registro DNS que pueda.
Relacionado:  Cómo monitorear el progreso de los comandos de Linux (con pv y progreso)

La especificación del tipo de registro A no cambia la acción predeterminada, que es consultar el registro de dirección y obtener la dirección IP, como se muestra a continuación:

dig redhat.com A

El comando "dig redhat.com A" en una ventana de terminal.

Para consultar los registros de intercambio de correo, usamos la siguiente bandera MX:

dig yahoo.com MX

El comando "dig yahoo.com MX" en una ventana de terminal.

La bandera del servidor de nombres devuelve el siguiente nombre de los servidores de nombres raíz asociados con el dominio de nivel superior:

cavar fedora.com NS

El comando "dig fedora.com NS" en una ventana de terminal.

Para consultar el inicio del registro de autoridad, escribimos la siguiente bandera SOA:

dig manjaro.com SOA

El comando "dig manjaro.com SOA" en una ventana de terminal.

La bandera TTL nos mostrará el tiempo de vida de los datos en la caché del servidor DNS. Si hacemos una serie de solicitudes, vemos que el tiempo de vida se reduce a cero y luego volvemos a su valor inicial.

Escribimos lo siguiente:

dig usa.gov TTL

El comando "dig usa.gov TTL" en una ventana de terminal.

Para ver los registros de texto, escribimos la bandera TX:

dig usa.gov TXT

El comando "dig usa.gov TXT" en una ventana de terminal.

Especificar el servidor DNS

Si desea usar un servidor DNS en particular para su solicitud, puede usar el signo arroba ( @) para pasarlo digcomo un parámetro de línea de comandos.

Con el servidor DNS predeterminado (ver más abajo), hace digreferencia al solucionador de stub de almacenamiento en caché local en 127.0.0.53.

dig usa.gov + stats

Ahora, escribimos lo siguiente para usar el servidor DNS público de Google en 8.8.8.8:

dig @ 8.8.8.8 usa.gov + estadísticas

Los comandos "dig usa.gov + stats" y "dig @ 8.8.8.8 usa.gov + stats" en una ventana de terminal.

Usando excavar con múltiples dominios

Podemos pasar varios dominios digen la línea de comando, como se muestra a continuación:

dig ubuntu.org fedora.org manjaro.com

El comando "dig ubuntu.org fedora.org manjaro.com" en una ventana de terminal.

Si verifica regularmente un conjunto de dominios, puede almacenarlos en un archivo de texto y pasarlo a dig. Todos los dominios del archivo se comprobarán sucesivamente.

Nuestro archivo se llama «domains.txt». Usaremos catpara mostrar su contenido, y luego lo pasaremos digcon la -fopción (archivo). Escribimos lo siguiente:

cat domains.txt
dig -f dominios.txt

Los comandos "cat domains.txt" y "dig -f domains.txt" en una ventana de terminal.

Búsquedas inversas de DNS

Si tiene una dirección IP y desea saber a dónde va, puede intentar una búsqueda DNS inversa. Si se resuelve en un servidor registrado con un servidor DNS, es posible que pueda averiguar su dominio.

Si puede, depende de la presencia de un PTR (registro de puntero). Los PTR resuelven una dirección IP en un nombre de dominio completamente calificado . Sin embargo, dado que no son obligatorios, no siempre están presentes en un dominio.

Veamos si podemos averiguar a dónde nos lleva la dirección IP 209.51.188.148. Escribimos lo siguiente, usando la -xopción (búsqueda inversa):

dig -x 209.51.188.148

El comando "dig -x 209.51.188.148" en una ventana de terminal.

¡Presto! La dirección IP se resuelve en gnu.org.

Debido a que un PTR es un registro DNS, y sabemos que digpodemos solicitar registros DNS específicos, ¿no podríamos simplemente pedir digrecuperar el PTR por nosotros? Sí, podemos, pero requiere un poco más de trabajo.

Tenemos que proporcionar la dirección IP en orden inverso y tacharla .in-addr.arpaal final, como se muestra a continuación:

dig ptr 148.188.51.209.in-addr.arpa

El comando "dig ptr 148.188.51.209.in-addr.arpa" en una ventana de terminal.

Obtenemos el mismo resultado; solo tomó un poco más de esfuerzo.

¿Puedes cavarlo?

Todos usamos Internet a diario, y las mentes inquisitivas a menudo se han preguntado cómo sucede la magia cuando escribimos el nombre de un sitio web en un navegador. Con  dig, puede explorar los procesos de conjuración de redes.