Skip to content

Instantly share code, notes, and snippets.

@nullx5
Last active January 5, 2026 09:03
Show Gist options
  • Select an option

  • Save nullx5/07c9e021fbb26be4da135e2f32855aa2 to your computer and use it in GitHub Desktop.

Select an option

Save nullx5/07c9e021fbb26be4da135e2f32855aa2 to your computer and use it in GitHub Desktop.

SISTEMA DNS domain name system - dns

Documentacion:

image image

Configurar DNSSEC en mi Servidor DNS autoritativo, firmar mi dominio, en BIND9

sudo apt install bind9 dnsutils

sudo nvim /etc/bind/named.conf.options
dnssec-validation auto;

#Firmar la zona
dnssec-keygen -a ECDSAP256SHA256 -n ZONE midominio.com
dnssec-signzone midominio.com.db


#Publicar el DS en el registrador, (Sin esto DNSSEC NO funciona)
dnssec-dsfromkey -2 Kmidominio.com.+013+12345.key
midominio.com. IN DS 12345 13 2 A1B2C3D4E5F6...
- 12345 → Key ID
- 13 → Algoritmo (ECDSA)
- 2 → Digest SHA-256
- A1B2… → Hash (lo importante)
crea un registro DS con esos datos tal cual

Mas facil, Si el panel del proveedor VPS soporta DNSSEC, úsalo. por ejemplo OVHCloud

Botón DNSSEC → Enable / Activate

Comprobar si un dominio usa DNSSEC:

dig +dnssec cloudflare.com      #  devuelve registro RRSIG
dig +dnssec bancolombia.com     # NO devuelve registro RRSIG
drill -D cloudflare.com         #  devuelve registro RRSIG

delv cloudflare.com             # fully validated, devuelve registro RRSIG
delv bancolombia.com            # unsigned answer, NO devuelve registro RRSIG


dig cloudflare.com DNSKEY +dnssec +multiline # devuelve registro DNSKEY
dig cloudflare.com DS +dnssec +multiline     # devuelve registro DS


drill DNSKEY cloudflare.com                  # devuelve registro DNSKEY                  
drill DS cloudflare.com                      # devuelve registro DS
image

1 https://cloudflare-ech.com/cdn-cgi/trace 2 https://test.defo.ie/ 3 https://defo.ie/ech-check.php 4 https://tls-ech.dev

image

TOOLS

  • host google.com # resuelve dns y dns inverso
  • nslookup google.com # resuelve dns y dns inverso
  • resolvectl query google.com # resuelve dns y dns inverso
  • dig -x 142.251.132.174 # resuelve dns y dns inverso
  • drill -x 142.251.132.174 # resuelve dns y dns inverso
  • dig +short google.com AAAA # consulta registros dns
  • drill mx cloudflare.com # consulta registros dns
  • nslookup -type=AAAA cloudflare.com # consulta registros dns
  • doggo cloudflare.com A AAAA MX NS SOA TXT --time # consulta registros dns
  • https://www.cual-es-mi-ip.net/dns-lookup # consulta registros dns online

Forzar recursion completa desde la zona raiz: . → root → gTLD → autoritativo

  • dig +trace cloudflare.com
  • drill -T cloudflare.com

  • resolvectl status # consultar mi servidor dns

  • resolvectl status wlp2s0 # consultar mi servidor dns por interfaz

  • sudo resolvectl dns wlp2s0 1.1.1.3 1.0.0.3 # cambiar mi servidor dns

  • sudo resolvectl flush-caches # elimina el cache dns local

👀 resolvectl dns es temporal recomendado para pruebas:
- Se pierde al reiniciar
- Se pierde al reconectar Wi-Fi
  • sudo resolvectl dnsovertls wlp2s0 yes # habilitar DNS over TLS (DoT) port 853

  • sudo resolvectl dnssec wlp2s0 yes # habilitar DNSSec

  • drill -s dnskey cloudflare.com # DNSKEY y DS

  • drill -D cloudflare.com # RRSIG

  • drill -TD cloudflare.com # Realiza rastreo DNSSEC desde los servidores root hasta un nombre de dominio

configuracion permanente cambiar servidor DNS a cloudflare y habilitar DNS over TLS (DoT):

  • sudo nvim /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.3#family.cloudflare-dns.com 1.0.0.3#family.cloudflare-dns.com
DNSOverTLS=yes
DNSSEC=yes
  • sudo systemctl restart systemd-resolved # reiniciar para aplicar los cambios

👉 En Ubuntu 22.04+ systemd-resolved actúa como stub resolver.

Navegador
  ↓
127.0.0.53 (systemd-resolved)
  ↓
TLS cifrado (TCP/853)
  ↓
1.1.1.3

image

👀 OJO habilitar puerto 853 saliente en el firewall, se puede deshabilitar el puerto 53:

To                         Action      From
--                         ------      ----
853                        ALLOW OUT   Anywhere
443                        ALLOW OUT   Anywhere

👀 OJO asegurarse que ls -l /etc/resolv.conf Debe apuntar a /run/systemd/resolve/stub-resolv.conf

cambiar servidor dns permanente usando sudo nmtui y luego reiniciar NetworkManager:

- restart NetworkManager

cloudflare Malware and Adult Content 1.1.1.3 1.0.0.3

https://blog.cloudflare.com/introducing-1-1-1-1-for-families/

software dns server

  • bind9
  • dnsmasq (dns y DHCP)
  • powerdns
  • unbound

en ubuntu 22.04 desktop quien maneja la resolucion dns systemd:

status systemd-resolved.service

Script para listar todos los 13 ROOT-SERVERS

#!/bin/bash
for r in $(dig . NS +short | sort); do
  printf "%-22s IPv4: %-15s IPv6: %s\n" \
    "$r" \
    "$(dig +short A $r | tr '\n' ' ')" \
    "$(dig +short AAAA $r | tr '\n' ' ')"
done

./root-servers-DNS.sh

a.root-servers.net.    IPv4: 198.41.0.4      IPv6: 2001:503:ba3e::2:30 
b.root-servers.net.    IPv4: 170.247.170.2   IPv6: 2801:1b8:10::b 
c.root-servers.net.    IPv4: 192.33.4.12     IPv6: 2001:500:2::c 
d.root-servers.net.    IPv4: 199.7.91.13     IPv6: 2001:500:2d::d 
e.root-servers.net.    IPv4: 192.203.230.10  IPv6: 2001:500:a8::e 
f.root-servers.net.    IPv4: 192.5.5.241     IPv6: 2001:500:2f::f 
g.root-servers.net.    IPv4: 192.112.36.4    IPv6: 2001:500:12::d0d 
h.root-servers.net.    IPv4: 198.97.190.53   IPv6: 2001:500:1::53 
i.root-servers.net.    IPv4: 192.36.148.17   IPv6: 2001:7fe::53 
j.root-servers.net.    IPv4: 192.58.128.30   IPv6: 2001:503:c27::2:30 
k.root-servers.net.    IPv4: 193.0.14.129    IPv6: 2001:7fd::1 
l.root-servers.net.    IPv4: 199.7.83.42     IPv6: 2001:500:9f::42 
m.root-servers.net.    IPv4: 202.12.27.33    IPv6: 2001:dc3::35 

https://root-servers.org/

@nullx5
Copy link
Author

nullx5 commented Dec 20, 2025

image

Tipos de servidores DNS

1. Servidor DNS Root

  • Nivel más alto del DNS.
  • Conoce dónde están los servidores de los TLD.
  • Ejemplo: a.root-servers.net

2. Servidor DNS TLD (Top-Level Domain)

  • Gestiona dominios como .com, .org, .co.
  • Indica qué servidor es autoritativo para un dominio.

3. Servidor DNS Autoritativo

  • Tiene la respuesta final para un dominio.
  • Contiene registros A, AAAA, MX, NS, TXT, etc.
  • Ejemplo: DNS de un proveedor de hosting.

4. Servidor DNS Recursivo

  • Resuelve consultas en nombre del cliente.
  • Consulta Root → TLD → Autoritativo.
  • Hace caché de respuestas.
  • Ejemplo: ISP, 8.8.8.8, 1.1.1.1.

5. Servidor DNS Caching-only

  • No es autoritativo.
  • Solo almacena respuestas en caché.
  • Mejora rendimiento y reduce tráfico.

6. Servidor DNS Forwarder

  • Reenvía consultas a otro DNS.
  • No hace resolución completa.
  • Usado en redes internas.

7. Servidor DNS Primario (Master)

  • DNS autoritativo principal.
  • Donde se editan los registros.

8. Servidor DNS Secundario (Slave)

  • Copia del primario.
  • Se sincroniza por transferencias de zona (AXFR/IXFR).
  • Aumenta redundancia.

9. Servidor DNS Público

  • Accesible desde Internet.
  • Ejemplo: Google, Cloudflare, Quad9.

10. Servidor DNS Privado / Interno

  • Usado en LAN o redes corporativas.
  • Resuelve dominios locales y correo
  • Contiene registros A, AAAA, MX, NS, TXT, etc.
  • Funciona como Autoritativo Interno
  • Recursivo con caché (para clientes)

@nullx5
Copy link
Author

nullx5 commented Dec 21, 2025

filtro wireshark

dns.qry.name == unad.edu.co

Captura dns estandar udp port 53 .pcap

image image image image

Captura dns over tls y dnssec cloudflare tcp port 853 .pcap

filtro wireshark

tcp.dstport == 853

image

DNSOverTLS con resolvectl

DNSOverHTTPS con firefox ajustes o con dnscrypt-proxy

@nullx5
Copy link
Author

nullx5 commented Dec 22, 2025

drill -TD cloudflare.com # sale por udp 53, no por tcp 853

Realiza rastreo DNSSEC desde los servidores root hasta un nombre de dominio, En lugar de preguntar a tu router o ISP, drill va directamente a los servidores raíz, luego a los de .com y finalmente a los de cloudflare.com. Le pide a los servidores DNS que envíen firmas digitales (RRSIG) y claves públicas (DNSKEY) para demostrar que nadie ha manipulado la respuesta en el camino.

Flujo de la salida bajando por la "escalera" de confianza del DNS:

  • Nivel Raíz (.): Obtiene las claves de la raíz del internet.
  • Nivel TLD (.com): La raíz le da el registro DS (Delegation Signer) que es como una huella digital que garantiza que las claves de .com son auténticas.
  • Nivel Dominio (cloudflare.com): El servidor de .com le da el registro DS de Cloudflare.
  • Resultado final: Te muestra las IPs de Cloudflare (104.16.132.229) marcadas con un [S], lo que significa que la Firma es válida (Signature OK).

Significado de las etiquetas finales:

  • [S] (Self Sig OK): La firma es matemáticamente válida. Todo parece estar bien configurado en el servidor.
  • [B] (Bogus): ¡Peligro! La firma no coincide. Alguien podría estar intentando un ataque de "DNS Spoofing".
  • [U] (Unsecure): El dominio no usa DNSSEC. La respuesta es DNS tradicional sin protección.
  • [T] (Trusted): La firma es válida Y ADEMÁS se pudo rastrear hasta una clave en la que tú confías (el ancla de confianza).
image

Warning: No trusted keys were given. Will not be able to verify authenticity!

Este es el punto clave. Aunque drill verificó que las firmas son matemáticas correctas (por eso pone [S]), no tiene un punto de partida en el que confiar.

Imagina que alguien te da un pasaporte perfectamente impreso y firmado. drill confirma que la firma coincide con el sello, pero te dice: "No conozco al Gobierno que emitió este sello, así que no puedo asegurar que sea real".

Para que el aviso desaparezca, necesitas indicarle a drill cuál es la "Ancla de Confianza" (Trust Anchor) del mundo real, que suele ser la clave pública de los servidores Raíz.

Podemos obtener estas claves de 2 maneras, en sistemas GNU/Linux:

  • En la ruta /usr/share/dns/root.key
  • Con el comando dig . DNSKEY | grep -E "^\.[[:space:]]" > ~/root.key

drill -TD -k ~/root.key cloudflare.com # sale por udp 53, no por tcp 853

image

Captura drill dnssec desde roots hasta cloudflare - DS DNSKEY RRSIG.pcap

@nullx5
Copy link
Author

nullx5 commented Dec 22, 2025

Detectar DNS Spoofing

image image

Comprobar si un dominio puede ser falso:

  • Si todas los sevidores DNS devuelven la misma IP → normal
  • Si alguna difiere → ⚠️ sospechoso
dig @1.1.1.1 cloudflare.com  A +short
dig @8.8.8.8 cloudflare.com  A +short
dig @9.9.9.9 cloudflare.com  A +short
dig @208.67.222.222 cloudflare.com  A +short
for dns in 1.1.1.1 8.8.8.8 9.9.9.9 208.67.222.222; do
  echo "DNS $dns:"
  drill @$dns cloudflare.com A | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'
done

@nullx5
Copy link
Author

nullx5 commented Dec 22, 2025

Nueva TOOL doggo investigar mas:

https://doggo.mrkaran.dev/

doggo

@nullx5
Copy link
Author

nullx5 commented Dec 25, 2025

DNSSEC

resolvectl flush-caches

drill -TD -k ~/root.key cloudflare.com

Traza dns completa desde la zona raiz .pcap

image image image image image image image image

@nullx5
Copy link
Author

nullx5 commented Jan 3, 2026

👀 DNSOverTLS SNI del TLS handshake Client Hello. ECH Encrypted Client Hello | ISP no pueder ver las consultas de los dominios, todo va encriptado desde tu maquina hasta cloudflare, solo puede ver el "outer SNI". de cloudflare, el "inner SNI" va protegido.

image image

El DNSOver HTTPS de firefox, deja pasar en texto claro, el SNI del TLS handshake Client Hello, cualquiera en el medio puede ver los dominios consultados 👀

image image

@nullx5
Copy link
Author

nullx5 commented Jan 4, 2026

  • DNSSEC evita suplantacion dns, autenticacion del dominio, se configura en el servidor autoritativo, registros DNSKEY, RRSIG Y DS.(cloudflare por defcto lo trae), para que funcione bien y tú estés protegido, tanto el cliente y servidor deben usar DNSSEC. en el cliente con resolvectl(DNSSEC=yes) o dnscrypt-proxy(require_dnssec = true)

✅ DNSSEC completo Servidor + cliente (ideal)

 - Dominio firmado con DNSSEC
 -  Cliente valida con DNSSEC
 - Transporte cifrado(DNSCrypt, DoT, DoH)
 - 👉 Máxima seguridad
  • DNSOverTlS #cifra dns consultas desde el cliente hasta cloudflare, resolvectl cliente local, usa Cetificados CA
  • DNSOverHTTPS #cifra dns consultas desde el cliente hasta cloudflare, firefox o a nivel de sistema, con dnscrypt-proxy, usa Cetificados CA
  • dnscrypt-proxy → software que implementa: DNSCrypt, DNS over HTTPS, DNS over TLS:
  • DNSCrypt V2 # Es un protocolo que autentica las comunicaciones entre un cliente DNS y un resolvedor DNS. no usa certificados, DNS cifrado + identidad del resolver verificada.
sudo apt update
sudo apt install dnscrypt-proxy

sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml
## Escucha local
listen_addresses = ['127.0.0.1:53']

## Usar DNSCrypt v2
server_names = ['cloudflare', 'quad9-dnscrypt']

## Forzar seguridad
require_dnssec = true
require_nolog = true
require_nofilter = true

sudo systemctl enable --now dnscrypt-proxy
systemctl status dnscrypt-proxy

sudo resolvectl dns lo 127.0.0.1
sudo resolvectl domain lo "~."

resolvectl status

sudo ss -tunp | grep dnscrypt

sudo dnscrypt-proxy -resolve google.com

DNS Suplantacion escenarios:

  • DNS autoritativo del banco comprometido - Bancolombia sin DNSSEC
  • Ataque en tu máquina, Malware modifica /etc/hosts, Proxy malicioso,CA raíz instalada
  • El atacante necesitaría: Certificado TLS válido para bancolombia.com, Emitido por una CA confiable

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment