¿Cómo puedo enumerar TODOS los registros DNS?

189

¿Hay alguna forma de enumerar TODOS los registros DNS de un dominio?

Sé de cosas como dig y nslookup, pero solo van tan lejos. Por ejemplo, si tengo un registro de subdominio A como

test A somedomain.co.uk

entonces, a menos que lo pida específicamente, por ejemplo.

dig any test.somedomain.co.uk

No puedo verlo

¿Hay alguna manera (aparte de mirar los registros yendo al administrador de DNS) para ver exactamente cuáles son todos los registros de DNS?

Conocido
fuente

Respuestas:

202

Cuando consulta CUALQUIERA, obtendrá una lista de todos los registros en ese nivel, pero no a continuación.

# try this
dig google.com any

Esto puede devolver registros A, registros TXT, registros NS, registros MX, etc. si el nombre de dominio es exactamente "google.com". Sin embargo, no devolverá registros secundarios (por ejemplo, www.google.com). Más precisamente, PUEDE obtener estos registros si existen. El servidor de nombres no tiene que devolver estos registros si decide no hacerlo (por ejemplo, para reducir el tamaño de la respuesta).

Un AXFR es una transferencia de zona y es probable que sea lo que desea. Sin embargo, estos suelen estar restringidos y no están disponibles a menos que controle la zona. Por lo general, realizará una transferencia de zona directamente desde el servidor autorizado (el @ ns1.google.com a continuación) y, a menudo, desde un servidor de nombres que puede no publicarse (un servidor de nombres oculto).

# This will return "Transfer failed"
dig @ns1.google.com google.com axfr

Si tiene control de la zona, puede configurarla para obtener transferencias protegidas con una clave TSIG. Este es un secreto compartido que el cliente puede enviar al servidor para autorizar la transferencia.

Denis Phillips
fuente
44
Gracias por eso (también a deltab). Explicación muy clara, confirmando lo que sospechaba: está disponible pero no para mí (a menos que empiece a configurar mis propios servidores de nombres). Como cuido de muchos dominios, hubiera sido muy bueno ejecutar un script para obtener TODAS las entradas de DNS.
Ken
13
Los servidores de nombres Route53 de Amazon no incluían TXT, MX y SOA cuando probé esto. Después de consultar específicamente estos registros, se incluyeron en CUALQUIER respuesta. Así que tómalo con un grano de sal.
Peter
Acabo de recibir una "conexión rechazada"
niico
1
La resolución nunca ha sido interpretada consistentemente por los resolutores en cuanto al significado de CUALQUIERA. Definitivamente no significa TODOS (hay una solicitud para eso), aunque algunos (no muchos) lo trataron de esa manera. Otros simplemente volcaron su caché, y otros lo restringieron a ciertos tipos de registros. En los tiempos modernos (2016+), la mayoría de los proveedores han desactivado CUALQUIERA (o le dan una respuesta inútil) o tienen planes de hacerlo, ya que es el controlador común para muchos ataques de amplificación.
Nick Bastin
1
@NickBastin este borrador ( tools.ietf.org/html/draft-ietf-dnsop-refuse-any-06 ) actualmente en el trabajo intenta ajustar el patrón de respuestas para este tipo de consulta. También discute por qué es / no debe usarse.
Patrick Mevzek
29

He mejorado la respuesta de Josh . Me di cuenta de que digsolo muestra las entradas que ya están presentes en la memoria caché del servidor de nombres consultado, por lo que es mejor extraer un servidor de nombres autorizado del SOA (en lugar de confiar en el servidor de nombres predeterminado). También he deshabilitado el filtrado de direcciones IP comodín porque generalmente estoy más interesado en la corrección de la configuración.

El nuevo script toma un -xargumento para una salida expandida y un -s NSargumento para elegir un servidor de nombres específico:dig -x example.com

#!/bin/bash
set -e; set -u
COMMON_SUBDOMAINS="www mail mx a.mx smtp pop imap blog en ftp ssh login"
EXTENDED=""

while :; do case "$1" in
  --) shift; break ;;
  -x) EXTENDED=y; shift ;;
  -s) NS="$2"; shift 2 ;;
  *) break ;;
esac; done
DOM="$1"; shift
TYPE="${1:-any}"

test "${NS:-}" || NS=$(dig +short  SOA "$DOM" | awk '{print $1}')
test "$NS" && NS="@$NS"

if test "$EXTENDED"; then
  dig +nocmd $NS "$DOM" +noall +answer "$TYPE"
  wild_ips=$(dig +short "$NS" "*.$DOM" "$TYPE" | tr '\n' '|')
  wild_ips="${wild_ips%|}"
  for sub in $COMMON_SUBDOMAINS; do
    dig +nocmd $NS "$sub.$DOM" +noall +answer "$TYPE"
  done | cat  #grep -vE "${wild_ips}"
  dig +nocmd $NS "*.$DOM" +noall +answer "$TYPE"
else
  dig +nocmd $NS "$DOM" +noall +answer "$TYPE"
fi
dan3
fuente
agregue líneas dig -t txt +nocmd $NS "$DOM" +noall +answer(y modifique $DOM) para inspeccionar los registros TXT de un dominio.
Max
19

En ausencia de la capacidad de hacer transferencias de zona, escribí este pequeño script bash dg:

#!/bin/bash
COMMON_SUBDOMAINS=(www mail smtp pop imap blog en ftp ssh login)
if [[ "$2" == "x" ]]; then
    dig +nocmd "$1" +noall +answer "${3:-any}"
    wild_ips="$(dig +short "*.$1" "${3:-any}" | tr '\n' '|')"
    wild_ips="${wild_ips%|}"
    for sub in "${COMMON_SUBDOMAINS[@]}"; do
        dig +nocmd "$sub.$1" +noall +answer "${3:-any}"
    done | grep -vE "${wild_ips}"
    dig +nocmd "*.$1" +noall +answer "${3:-any}"
else
    dig +nocmd "$1" +noall +answer "${2:-any}"
fi

Ahora uso dg example.compara obtener una lista agradable y limpia de registros DNS, o dg example.com xpara incluir un montón de otros subdominios populares.

grep -vE "${wild_ips}"filtra los registros que podrían ser el resultado de una entrada DNS comodín como * 10800 IN A 1.38.216.82. De lo contrario, una entrada comodín lo haría aparecer como si hubiera registros para cada uno $COMMON_SUBDOMAN.

Nota: Esto se basa en ANYconsultas, que están bloqueadas por algunos proveedores de DNS como CloudFlare .

Zaz
fuente
3
Sé que esta solución está lejos de ser ideal, pero me ha ahorrado mucho tiempo, así que espero que sea útil para otra persona.
Zaz
agregar dig -t txt +nocmd "$1" +noall +answer(y modificar a "*.$1"etc.) para inspeccionar los registros TXT de un dominio.
Max
15

host -afunciona bien, similar a dig any.

P.EJ:

$ host -a google.com
Trying "google.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10403
;; flags: qr rd ra; QUERY: 1, ANSWER: 18, AUTHORITY: 0, ADDITIONAL: 0


;; QUESTION SECTION:
;google.com.            IN  ANY

;; ANSWER SECTION:
google.com.     1165    IN  TXT "v=spf1 include:_spf.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all"
google.com.     53965   IN  SOA ns1.google.com. dns-admin.google.com. 2014112500 7200 1800 1209600 300
google.com.     231 IN  A   173.194.115.73
google.com.     231 IN  A   173.194.115.78
google.com.     231 IN  A   173.194.115.64
google.com.     231 IN  A   173.194.115.65
google.com.     231 IN  A   173.194.115.66
google.com.     231 IN  A   173.194.115.67
google.com.     231 IN  A   173.194.115.68
google.com.     231 IN  A   173.194.115.69
google.com.     231 IN  A   173.194.115.70
google.com.     231 IN  A   173.194.115.71
google.com.     231 IN  A   173.194.115.72
google.com.     128 IN  AAAA    2607:f8b0:4000:809::1001
google.com.     40766   IN  NS  ns3.google.com.
google.com.     40766   IN  NS  ns4.google.com.
google.com.     40766   IN  NS  ns1.google.com.
google.com.     40766   IN  NS  ns2.google.com.
Datavar
fuente
11
Esto no responde la pregunta, que es cómo encontrar otros registros en la zona DNS de un dominio, es decir, adicionalmente todos los registros para subdominios. Eso no quiere decir host -aque no sea un comando útil, simplemente no hace lo que el OP está buscando.
spikyjt
13
  1. Una transferencia de zona es la única forma de asegurarse de que tiene todos los registros de subdominio. Si el DNS está configurado correctamente, normalmente no debería poder realizar una transferencia de zona externa.

  2. El proyecto scans.io tiene una base de datos de registros DNS que se pueden descargar y buscar subdominios. Esto requiere la descarga de 87 GB de datos DNS, alternativamente, puede intentar la búsqueda en línea de los datos en https://hackertarget.com/find-dns-host-records/

squizzy99
fuente
12

Para ventanas:

Puede encontrar la necesidad de verificar el estado de los registros DNS de sus dominios, o verificar los Servidores de nombres para ver qué registros están extrayendo los servidores.

  1. Inicie el símbolo del sistema de Windows navegando a Inicio> Símbolo del sistema o mediante Ejecutar> CMD.

  2. Escribe NSLOOKUP y presiona Enter. El servidor predeterminado está configurado en su DNS local, la dirección será su IP local.

  3. Establezca el tipo de registro DNS que desea buscar escribiendo set type=##donde ## es el tipo de registro, luego presione Entrar. Puede usar CUALQUIERA, A, AAAA, A + AAAA, CNAME, MX, NS, PTR, SOA o SRV como tipo de registro.

  4. Ahora ingrese el nombre de dominio que desea consultar y luego presione Intro. En este ejemplo, utilizaremos Managed.com.

  5. NSLOOKUP ahora devolverá las entradas de registro para el dominio que ingresó.

  6. También puede cambiar los servidores de nombres que está consultando. Esto es útil si está verificando los registros antes de que el DNS se haya propagado completamente. Para cambiar el servidor de nombres, escriba servidor [servidor de nombres]. Reemplace [servidor de nombres] con los servidores de nombres que desea utilizar. En este ejemplo, los configuraremos como NSA.managed.com.

  7. Una vez modificado, cambie el tipo de consulta (Paso 3) si es necesario, luego ingrese un nuevo dominio nuevo (Paso 4)

Para Linux:

1) Verifique los registros DNS usando Dig Command Dig significa dominio de información groper es una herramienta flexible para interrogar servidores de nombres DNS. Realiza búsquedas de DNS y muestra las respuestas que se devuelven de los servidores de nombres que se consultaron. La mayoría de los administradores de DNS usan cavar para solucionar problemas de DNS debido a su flexibilidad, facilidad de uso y claridad de salida. Otras herramientas de búsqueda tienden a tener menos funcionalidad que excavar.

2) Verifique los registros DNS utilizando el comando NSlookup Nslookup es un programa para consultar servidores de nombres de dominio de Internet. Nslookup tiene dos modos interactivo y no interactivo.

El modo interactivo permite al usuario consultar a los servidores de nombres para obtener información sobre varios hosts y dominios o imprimir una lista de hosts en un dominio.

El modo no interactivo se utiliza para imprimir solo el nombre y la información solicitada para un host o dominio. Es una herramienta de administración de red que los ayudará a verificar y solucionar problemas relacionados con DNS.

3) Verifique los registros DNS utilizando Host Command host es una sencilla utilidad para realizar búsquedas DNS. Normalmente se usa para convertir nombres a direcciones IP y viceversa. Cuando no se dan argumentos u opciones, el host imprime un breve resumen de sus argumentos y opciones de la línea de comandos.

Kervin L
fuente
Esto funcionó perfectamente para mí en Windows 7, pero parece tener errores en Windows 10, esto es lo que solía depurar un registro TXT en Windows 10: nslookup -querytype = txt yourdomainnamehere.com
The Coder
11

Lo que quieres se llama transferencia de zona . Puede solicitar una transferencia de zona usando dig -t axfr.

Una zona es un dominio y todos los dominios debajo de él que no están delegados a otro servidor.

Tenga en cuenta que las transferencias de zona no siempre son compatibles. No se usan en la búsqueda normal, solo en la replicación de datos DNS entre servidores; pero hay otros protocolos que pueden usarse para eso (como rsync sobre ssh), puede haber un riesgo de seguridad al exponer nombres, y las respuestas de transferencia de zona cuestan más para generar y enviar que las búsquedas DNS habituales.

deltab
fuente
1

No hay una manera fácil de obtener todos los registros DNS para un dominio en una instancia. Solo puede ver ciertos registros, por ejemplo, si desea ver un registro A para un determinado dominio, puede usar el comando: dig a (tipo de registro) domain.com. Esto es lo mismo para todos los otros tipos de registros que desea ver para ese dominio.

Si no está familiarizado con la interfaz de línea de comandos, también puede usar un sitio como mxtoolbox.com. Es una herramienta muy útil para obtener registros de un dominio.

Espero que esto responda tu pregunta.

Mike Fraanje
fuente