resolucion - registros dns de un dominio
¿Cómo puedo listar TODOS los registros DNS? (7)
¿Hay alguna manera de que pueda listar TODOS los registros DNS para un dominio?
Sé cosas como dig and 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 específicamente lo pida, ej.
dig any test.somedomain.co.uk
No puedo verlo
¿Hay alguna forma (aparte de mirar los registros yendo al administrador de DNS) para ver exactamente qué son todos los registros DNS?
Una transferencia de zona es la única forma de asegurarse de tener todos los registros de subdominio. Si el DNS está configurado correctamente, normalmente no debería poder realizar una transferencia de zona externa.
El proyecto scans.io tiene una base de datos de registros DNS que se pueden descargar y buscar subdominios. Esto requiere descargar los 87 GB de datos DNS, o puede intentar la búsqueda en línea de los datos en https://hackertarget.com/find-dns-host-records/
Cuando consultas por CUALQUIER obtendrás una lista de todos los registros en el nivel pero no debajo.
# try this
dig google.com any
Esto devolverá registros A, registros TXT, registros NS, registros MX, etc., si el nombre de dominio es exactamente "google.com". Pero no devolverá registros secundarios (por ejemplo, www.google.com). Más exactamente, PUEDE obtener estos registros si existen. El servidor de nombres no tiene que devolver estos registros si elige no hacerlo (por ejemplo, para reducir el tamaño de la respuesta).
Un AXFR es una transferencia de zona y es probable que lo desee. Sin embargo, estos suelen ser restringidos y no están disponibles a menos que controle la zona. Por lo general, realizará una transferencia de zona directamente desde el servidor acreditado (el @ ns1.google.com a continuación) y, a menudo, desde un servidor de nombres que puede no estar publicado (un servidor de nombres sigiloso).
# This will return "Transfer failed"
dig @ns1.google.com google.com axfr
Si tiene el control de la zona, puede configurarla para obtener transferencias que estén protegidas con una clave TSIG. Este es un secreto compartido que el cliente puede enviar al servidor para autorizar la transferencia.
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.com
para obtener una buena y limpia lista de registros DNS, o dg example.com x
para incluir un montón de otros populares subdominios.
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 de comodín haría aparecer como si hubiera registros por cada $COMMON_SUBDOMAN
.
Nota: Esto depende de ANY
consulta, que están bloqueadas por algunos proveedores de DNS como CloudFlare .
He mejorado la respuesta de Josh . Me he dado cuenta de que dig
solo muestra las entradas ya presentes en el caché del servidor de nombres consultado, por lo que es mejor sacar un servidor de nombres autoritativo de la SOA (en lugar de confiar en el servidor de nombres predeterminado). También he inhabilitado 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 argumento -x
para la salida expandida y un argumento -s NS
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
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 en otro servidor.
Tenga en cuenta que las transferencias de zona no siempre son compatibles. No se utilizan en la búsqueda normal, solo en la replicación de datos DNS entre servidores; pero hay otros protocolos que se pueden usar para eso (como rsync en 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 de DNS habituales.
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 quiere ver un registro A para cierto dominio, puede usar el comando: dig a (type of record) 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 comando, también puede usar un sitio como mxtoolbox.com. Que es una herramienta muy útil para obtener registros de un dominio.
Espero que esto responda tu pregunta.
host -a
funciona 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.