Cuando un usuario desde su máquina quiere resolver un nombre de dominio mediante un petición DNS, éste pregunta al servidor DNS que tiene configurado. Si este tiene activada la caché, la busca y devuelve la la consulta a la máquina del usuario, si el servidor no la tiene disponible en sus caché DNS, que por defecto la almacena con un TTL (Time to live o Tiempo de vida) de unos 3.600 segundos (1 hora) aunque este tiempo es configurable en la administración del servidor DNS.
Si no la tiene en su caché la solicita por medio de un sistemas de consultas recursivas, que es la capacidad que tiene un sistema de nombre de dominios de reenviar la petición a otro servidor DNS si no disponen de la dirección solicitada en su caché DNS o en un pasado la tuvo pero ya caducó dicho dirección. Una vez resuelta la petición el servidor la almacena en su caché DNS y devuelve el resultado a la máquina que solicitó la petición.
Conociendo este funcionamiento, si alguien quiere saber si se ha resuelto un determinado dominio, simplemente tendremos que realizar las consultas anulando la resolución recursiva en el servidor DNS. De este modo, conseguiremos realizar las consultas solo a la caché del DNS. Si se ha pedido en un tiempo reciente, al indicado anteriormente por defecto en el TTL, se obtendrá la resolución, por lo contrario obtendremos una respuesta negativa de resolución.
Para hacer esta prueba, basta con que te conectes al servidor NS de una organización, selecciones el tipo de consulta como norecurse y empieces a probar nombres de dominio. En la siguiente imagen se puede ver como los clientes del DNS de Renfe se conectan a facebook pero no a mi blog.
[1] - Abrimos una shell y entramos en el modo del comando: nslookup
[2] - Ahora, establecemos un tipo de consulta para un name server (NS) escribiendo: set type=ns
[3] - A continuación ya podremos poner la website a solicitar la petición. Por ejemplo:
[4] - Seleccionamos el name server 1 (por ejemplo: ns1.correos.es), para realizar las consultas sobre este lo establecemos como servidor actual: server ns1.correos.es
[5] - Una vez seleccionado indicamos una consulta para que se nos muestre información de un host conectado a la red mediante: set type=a
[6] - Ahora lo más importante, indicamos que sobre la consulta obtengamos información NO recursiva con los argumentos: set norecurse
[7] - Y finalmente, realizamos los nombres de dominio a consultar, en mi caso escogí: www.facebook.com y mi blog (www.zonasystem.com). Si el nombre domino está en la caché DNS del servidor ns1 que seleccionamos, entonces veremos que nos responde obteniendo información de esa caché y que no realiza más preguntas a otros server DNS para resolver el nombre, por lo contrario, si pregunta a otros servidores DNS es que dicho nombre no estaba disponible en su caché actual.
En la siguiente screenshot se puede ver que www.marca.com a sido visitado recientemente (dependiendo el TTL de la caché DNS configurado para este servidor), sin embargo, www.zonasystem.com no a sido visitado recientemente, ya que como podemos observar pregunta a servidores g.gtld... para resolver el nombre de dominio.
Podremos obtener más información si consultamos la ayuda del comando nslookup y a su vez los argumentos tipo: set type=[opción].
ANY (Cualquiera): Toda la información que exista.
CNAME (Canonical Name): Devuelve una lista de alias, si existen para el nombre verdadero (canonical).
NS (Name Server): Especifica el nombre para un dominio.
MX (Mail Exchange): Especifica el servidor encargado de recibir el correo electrónico para el dominio.
PTR (Pointer): Lo inverso del registro A, realiza la traducción de direcciones IP a nombres de host.
TXT (Text): Permite extraer información adicional a un dominio.
Saludos!
Conociendo este funcionamiento, si alguien quiere saber si se ha resuelto un determinado dominio, simplemente tendremos que realizar las consultas anulando la resolución recursiva en el servidor DNS. De este modo, conseguiremos realizar las consultas solo a la caché del DNS. Si se ha pedido en un tiempo reciente, al indicado anteriormente por defecto en el TTL, se obtendrá la resolución, por lo contrario obtendremos una respuesta negativa de resolución.
Para hacer esta prueba, basta con que te conectes al servidor NS de una organización, selecciones el tipo de consulta como norecurse y empieces a probar nombres de dominio. En la siguiente imagen se puede ver como los clientes del DNS de Renfe se conectan a facebook pero no a mi blog.
[1] - Abrimos una shell y entramos en el modo del comando: nslookup
[2] - Ahora, establecemos un tipo de consulta para un name server (NS) escribiendo: set type=ns
[3] - A continuación ya podremos poner la website a solicitar la petición. Por ejemplo:
[4] - Seleccionamos el name server 1 (por ejemplo: ns1.correos.es), para realizar las consultas sobre este lo establecemos como servidor actual: server ns1.correos.es
[5] - Una vez seleccionado indicamos una consulta para que se nos muestre información de un host conectado a la red mediante: set type=a
[6] - Ahora lo más importante, indicamos que sobre la consulta obtengamos información NO recursiva con los argumentos: set norecurse
[7] - Y finalmente, realizamos los nombres de dominio a consultar, en mi caso escogí: www.facebook.com y mi blog (www.zonasystem.com). Si el nombre domino está en la caché DNS del servidor ns1 que seleccionamos, entonces veremos que nos responde obteniendo información de esa caché y que no realiza más preguntas a otros server DNS para resolver el nombre, por lo contrario, si pregunta a otros servidores DNS es que dicho nombre no estaba disponible en su caché actual.
En la siguiente screenshot se puede ver que www.marca.com a sido visitado recientemente (dependiendo el TTL de la caché DNS configurado para este servidor), sin embargo, www.zonasystem.com no a sido visitado recientemente, ya que como podemos observar pregunta a servidores g.gtld... para resolver el nombre de dominio.
Figura 1: Ejemplo de comprobación de la caché de los servidores ns de correos.es |
Tipos de consultas de registros para los servidores DNS
A (Address): Se utiliza para traducir nombres de hosts del dominio a direcciones IP, es el valor predeterminado.ANY (Cualquiera): Toda la información que exista.
CNAME (Canonical Name): Devuelve una lista de alias, si existen para el nombre verdadero (canonical).
NS (Name Server): Especifica el nombre para un dominio.
MX (Mail Exchange): Especifica el servidor encargado de recibir el correo electrónico para el dominio.
PTR (Pointer): Lo inverso del registro A, realiza la traducción de direcciones IP a nombres de host.
TXT (Text): Permite extraer información adicional a un dominio.
Saludos!