
Conjunto de herramientas de medición DNS, solución de problemas y auditoría de seguridad
¿Alguna vez te has preguntado si tu ISP está interceptando tu tráfico DNS? ¿Has notado algún comportamiento inusual en tus respuestas DNS, o has sido redirigido a la dirección incorrecta y sospechas que algo podría estar mal con tu DNS? Ofrecemos un conjunto de herramientas para realizar auditorías básicas de tus solicitudes y respuestas DNS, ayudándote a asegurar que tu DNS funcione como se espera.
Con dnsping, puedes medir el tiempo de respuesta de cualquier servidor DNS para consultas
arbitrarias. Similar a la utilidad ping normal, dnsping ofrece una funcionalidad
comparable para solicitudes DNS, ayudándote a monitorear la capacidad de respuesta del servidor.
También puedes rastrear la ruta de tu solicitud DNS hasta su destino usando
dnstraceroute, verificando que no esté siendo redirigida o interceptada. Al
comparar consultas DNS enviadas al mismo servidor, dnstraceroute te permite
observar cualquier diferencia en las rutas tomadas, alertándote sobre posibles problemas.
dnseval evalúa múltiples resolutores DNS para ayudarte a elegir el mejor resolutor DNS
para tu red. Aunque se recomienda usar tu propio resolutor DNS para evitar
depender de resolutores DNS de terceros, dnseval puede ayudar a seleccionar el
resolutor DNS óptimo cuando sea necesario. Te permite comparar servidores DNS según
rendimiento (latencia) y confiabilidad (pérdida de paquetes), dándote una visión
integral para la toma de decisiones informadas.
Hay varias formas de usar este conjunto de herramientas, aunque recomendamos ejecutarlo directamente desde el código fuente para una flexibilidad y control óptimos. Ejecutar desde el código fuente o instalar con pip requiere Python 3.11 o superior.
git clone https://github.com/farrokhi/dnsdiag.git
cd dnsdiag
pip3 install -r requirements.txt
pip3 install dnsdiag
uv es un gestor de paquetes de Python rápido que puede ejecutar herramientas directamente sin instalación:
# Run dnsping directly without installation
uvx --from dnsdiag dnsping google.com
# Run with specific options
uvx --from dnsdiag dnsping -c 5 --tls -s 8.8.8.8 example.com
# Run dnstraceroute
uvx --from dnsdiag dnstraceroute cloudflare.com
# Run dnseval
uvx --from dnsdiag dnseval -f public-servers.txt github.com
Para instalar dnsdiag de forma persistente:
# Install dnsdiag tools
uv tool install dnsdiag
# Upgrade to the latest version
uv tool upgrade dnsdiag
De vez en cuando, se publicarán paquetes binarios para Windows, Mac OS X y Linux. Puedes obtener la última versión desde la página de releases.
Hay binarios precompilados disponibles para:
Windows ARM64 no es compatible actualmente debido a dependencias de compilación que requieren cadenas de herramientas de compilación nativas que no están fácilmente disponibles. Si usas Windows en ARM, puedes ejecutar dnsdiag usando el Subsistema de Windows para Linux (WSL2) o instalar directamente desde el código fuente.
Si prefieres no instalar dnsdiag en tu máquina local, puedes usar la
imagen Docker para ejecutar las herramientas en un entorno contenedorizado. Por ejemplo:
docker run --network host -it --rm farrokhi/dnsdiag dnsping.py
dnsping te permite hacer "ping" a un resolutor DNS enviando una consulta DNS arbitraria varias veces. Para obtener una lista completa de las opciones de línea de comandos compatibles, usa --help. Aquí hay algunas opciones clave:
--tcp, --tls, --doh, --quic o --http3 para seleccionar el protocolo de transporte (el predeterminado es UDP). Estas opciones son mutuamente excluyentes; solo se puede especificar un protocolo por comando.--flags para mostrar los flags de respuesta, incluidos los flags EDNS, para cada respuesta.--dnssec para solicitar validación DNSSEC, si está disponible.--nsid para mostrar el Identificador del Servidor de Nombres (NSID) si está disponible (RFC 5001).--ecs para incluir información de Subred de Cliente EDNS para la optimización del enrutamiento geográfico.--cookie para mostrar las cookies DNS (RFC 7873) cuando estén presentes en las respuestas../dnsping.py -c 5 --dnssec --flags --tls -t AAAA -s 8.8.8.8 brokendnssec.net
dnsping.py DNS: 8.8.8.8:853, hostname: brokendnssec.net, proto: TLS, class: IN, type: AAAA, flags: [RD]
75 bytes from 8.8.8.8: seq=1 time=73.703 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=2 time=69.523 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=3 time=58.058 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=4 time=54.235 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=5 time=57.806 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
--- 8.8.8.8 dnsping statistics ---
5 requests transmitted, 5 responses received, 0% lost
min=54.235 ms, avg=22.665 ms, max=69.523 ms, stddev=38.202 ms
dnsping también proporciona estadísticas como tiempos de respuesta mínimos, máximos y
promedio, junto con jitter (desviación estándar) y pérdida de paquetes.
Aquí hay algunos casos de uso interesantes para dnsping:
--dnssec../dnsping.py -c 3 --ecs 203.0.113.0/24 -s 94.140.14.14 google.com
dnsping.py DNS: 94.140.14.14:53, hostname: google.com, proto: UDP, class: IN, type: A, flags: [RD]
66 bytes from 94.140.14.14: seq=1 time=31.407 ms NOERROR [ECS:203.0.113.0/24/24]
66 bytes from 94.140.14.14: seq=2 time=29.156 ms NOERROR [ECS:203.0.113.0/24/24]
66 bytes from 94.140.14.14: seq=3 time=30.892 ms NOERROR [ECS:203.0.113.0/24/24]
--- 94.140.14.14 dnsping statistics ---
3 requests transmitted, 3 responses received, 0% lost
min=29.156 ms, avg=30.485 ms, max=31.407 ms, stddev=1.176 ms