DNS: Domain Name System El Domain Name System (DNS) es una base de datos distribuida que las aplicaciones de Internet utilizan para mapear nombres de máquinas y las direcciones IP correspondientes. Los registros se reparten entre muchas máquinas, los servidores de nombres. Las aplicaciones acceden al DNS a través del resolver. En UNIX, las funciones de librería: gethostbyname(): dado un nombre devuelve su @IP gethostbyaddr(): dada una @IP devuelve el nombre del host. DNS: Domain Name System RFC 1034: conceptos y prestaciones del DNS. RFC 1035: especificación e implementación. El DNS basa su funcionamiento en un espacio de nombres que responde a una arquitectura jerárquica: Espacio de nombres en DNS arpa com gov int mil net edu org es fr in-addr 147 raíz -sin nombre- upc 83 aaa ac Estructura jerárquica. Jerarquía parte de un nodo raíz que no tiene nombre 7 dominios genéricos Dominios geográficos Dominio arpa: para facilitar la resolución inversa (dada una @IP, encontrar el nombre del host). Nombres completamente cualificados: comienzan en las hojas y se remontan por el árbol hasta llegar al nodo raíz: sert.ac.upc.es. (el último punto es el del nodo raíz, que no tiene nombre) Juan Carlos Cruellas Ibarz. Curso 2000/2001. Q1 1
Delegación en DNS No hay una organización que gestione todo el espacio de nombres. En su lugar, una autoridad central delega en diversas organizaciones la gestión de un sub-árbol del árbol anterior. Estas, a su vez pueden ir delegando en otras y así sucesivamente. Cada autoridad es responsable de un subárbol (zona) y de la gestión del correspondiente servidor de nombres. Protocolo El DNS entra en acción cuando se llevan a cabo invocaciones del tipo ftp ftp.upc.es, en las que un cliente solicita conexión con un servidor determinado sin conocer la @IP del host en el que éste está escuchando. En estas condiciones, la aplicación (cliente) lanza una pregunta al DNS y pasado un tiempo le llega una respuesta con la correspondiente @IP. La RFC especifica, entre otras cosas: Cómo son las preguntas y las respuestas. Cómo interaccionan los diferentes servidores de nombres Nombres 8 1 Host A 4 Pregunta (Query) recursiva 2 3 5 Nombres root Nombres.es Internet 7 6 Host B 1. A pide a su sn la @IP de hostb.ac.upc.es 2. SN de A pregunta a root por sn de zona.es 3. El root contesta con la @IP del sn de zona.es 4. El sn de A pregunta al sn de la zona.es por la @IP del sn de la zona upc.es 5. El sn de zona.es le Nombres upc.es da la @IP del sn de zona upc.es 6. El sn de A pregunta a sn de zona upc.es la @IP de hostb.upc.es 7. sn de zona upc.es le contesta 8. sn de A le da la @IP Juan Carlos Cruellas Ibarz. Curso 2000/2001. Q1 2
Nombres 4 1 Host A Pregunta (Query) iterativa 2 3 5 8 Nombres root Nombres.es Internet 7 6 Host B Protocolo 1. A pide a su sn la @IP de hostb.ac.upc.es 2. SN de A pregunta a root por sn de zona.es 3. El root contesta con la @IP del sn de zona.es 4. El sn de A le da la el puntero del sn de.es a A 5. A pregunta a sn de zona.es por @IP del sn de zona upc.es Nombres upc.es 6. El sn de zona.es le da @IP de sn de zona upc.es 7. A pregunta a sn de zona upc.es por @IP de hostb.upc.es 8. sn de upc.es le da la @IP En máquinas UNIX, existe el fichero /etc/resolv.conf que contiene información con la dirección del servidor de nombre al que el resolver debe preguntar (pueden darse varios por si uno falla) y el nombre del dominio por defecto. Cuando se escribe telnet sert, dentro de una máquina del departamento de ac, se le añade el dominio por defecto al nombre de la máquina (sert.ac.upc.es.) y obtener así un nombre completamente cualificado. Hay una serie de programas que lanzan preguntas al DNS (host, nslookup, doc, dig, ). Protocolo Las informaciones (Resource Records) contenidas en las respuestas alimentan la BD distribuída. Juan Carlos Cruellas Ibarz. Curso 2000/2001. Q1 3
Formato de los mensajes 32 bits identificación flags número de preguntas número de respuestas número de RRs de aut. número de RRs adicionales preguntas respuestas Resource Records (RRs)de autoridades (núm. variable) RRs de información adicional (num. Variable) Header básico. 4 bytes para id. asocia preguntas y respuestas. 4 bytes para flags. 4 bytes para codificar el número de preguntas. 4 bytes para codificar el número de respuestas. 8 bytes restantes, se verán después Mensaje con preguntas: cabecera básica y preguntas Mensaje respuesta: cabecera básica, respuestas, y a veces lista de servidores con autoridad en el dominio más sus direcciones IP Formato de los mensajes Flags (16 bits)g: QR. Si QR=1, es una pregunta. Si es 0, una respuesta. AA. Si AA=1, la respuesta lo es de un servidor de nombres con autoridad en el dominio por el que se pregunta. TC. Si TC=1, la respuesta está truncada (demasiado larga). RD. Si RD=1, significa Recursión deseada : se pregunta una dirección IP a un servidor de nombres, y éste debe arreglárselas como quiera para devolver al final dicha dirección (normalmente, tendrá que contactar otros servidores: pregunta recursiva). Si RD=0 y el servidor Formato de los mensajes de nombres no tiene la información, contesta con una lista de servidores con los que contactar, y será quien lanza la pregunta quien deberá preguntarles (pregunta iterativa). RA. Si RA=1 en una respuesta, indica que el servidor de nombres puede gestionar preguntas recursivas. Rcode (3 bits): código de retorno (0: no error) y 3 (error en nombre) los más frecuentes. Opcode (4 bits). Valor normal, 0 (pregunta estándar). Juan Carlos Cruellas Ibarz. Curso 2000/2001. Q1 4
Formato de los mensajes pregunta Header básico con una secuencia de preguntas. Formato de cada pregunta Nombre del que se pregunta la @ IP (longitud variable) Tipo de pregunta Clase de pregunta Valor 1: Internet 4sert2ac3upc2es0 A (1): @IP MX(15): Mail exchange record CN (5): Canonical Name PTR (12): Pointer Record Numero de caracteres que configuran la etiqueta que les sigue Un tipo especial de de preguntas: Pointer Queries En no pocas ocasiones, una aplicación pregunta al servidor de nombres, no la @IP de un nombre, sino el nombre de una @IP!. A los servidores solo les llega la @IP. Algunos (ciertos servidores de ftp para clientes anonymous) exigen a sus clientes que tengan un nombre válido, así que preguntan al DNS cúal es el nombre de la @IP que les ha llegado. Para llevar a cabo este mapeo inverso, cada servidor de nombres gestiona también un subárbol del que nace en el nodo con la etiqueta in-addr de la jerarquía. Un tipo especial de de preguntas: Pointer Queries En este subárbol cada nodo tiene como etiqueta el valor numérico correspondiente a un byte en orden descendente. En el subárbol in-addr, el nombre que el DNS tendría almacenado para una máquina con @IP 146.79.10.15 sería 15.10.79.146. La función gethostbyaddr() se encarga de invertir el orden de los bytes. Juan Carlos Cruellas Ibarz. Curso 2000/2001. Q1 5
Formato de respuestas En DNS, a los campos answer, authority y additional information, se les denomina resource records (RR). El formato de un RR es como sigue: Nombre al que corresponden los datos Tipo de RR Clase (1 para Internet) Longitud de datos Time To Live Datos Tiempo durante el cual la información puede guardarse en la cache (2 días generalmente Dependen del tipo Tipos de Resource Records Tipo A: contiene una @IP. Tipo PTR: Pointer Record utilizado en las pointer queries. En ellos la @IP es representada como un nombre de dominio del dominio in-addr. CNAME canonical name, conocido como alias, es representado como un nombre de dominio. En ciertos ftp para recordar facilmente cómo acceder (programa host, que lanza preguntas al DNS permite preguntar por el nombre correspondiente a un alias con la opción -t cname). Tipos de Resource Records Tipo MX (Mail exchange), utilizado por ejemplo para Que una máquina conectada a Internet envíe y reciba mensajes de correo electrónico por y para otra máquina que NO está conectada. De nuevo, el programa host con la opoción -t mx pregunta al DNS qué máquina actuaría como intercambiador de mensajes para otra. Cuando cuando se quiere dar un destino alternativo cuando el host destinatario no es accesible. En los mensajes respuesta aparecen también las preguntas. Juan Carlos Cruellas Ibarz. Curso 2000/2001. Q1 6
Caches Los servidores de DNS almacenan la información que van consiguiendo de otros servidores en una cache. De esa forma, todas aquellas aplicaciones que lanzan preguntas a un servidor de nombres tienen acceso directo a la información almacenada en dicha cache. Mensajes DNS y tcpdump El programa tcpdump también presenta el contenido de los mensajes DNS siguiendo un formato específico. 140.248.2.32.1447 > 140.248.2.3.53: 1+ A? e0.e1.e2.es. La aplicación que se comunica a través de la primera dirección de protocolo, lanza una pregunta a su servidor de nombres (que escucha SIEMPRE por el puerto 53). El id de la pregunta es 1. El mensaje es una pregunta (?) de tipo A, y pregunta la @IP correspondiente a e0.e1.e2.es. Mensajes DNS y tcpdump La respuesta del servidor de nombres puede ser algo como: 140.248.2.3.53 > 140.248.2.32.1147: 1* 1/0/0 A 140.248.2.27 El servidor de nombres le contesta con un mensaje correspondiente al que tenía el id=1, le indica que tiene autoridad en el dominio correspondiente al nombre (*), que el mensaje contiene una respuesta, 0 indicaciones de autoridades y 0 informaciones adicionales; que la respuesta es de tipo A y que la @IP es 140.248.2.27 Juan Carlos Cruellas Ibarz. Curso 2000/2001. Q1 7
Interacciones Una aplicación puede indicarle a un servidor de nombres que su pregunta es recursiva, es decir, que si el servidor no tiene autoridad en el dominio del nombre por cuya @IP se pregunta y no tiene la información en su cache, que pregunte a otros servidores hasta obtener la respuesta. Puede también indicar que la pregunta es iterativa, esto es, que si se da la circunstancia anterior, le de una lista de servidores de nombres que puedan informarle de forma autorizada acerca de la @IP que busca. En tal caso, en el campo de autoridad aparecerán los nombres de los servidores y en el de Interacciones información adicional, sus @IP correspondientes. Hostname spoofing check. Las pointer queries son utilizadas por determinados servidores cuando un cliente les solicita conexión. En el servicio rlogin por ejemplo, se solicita al DNS el nombre correspondiente a la @IP que aparece en la solicitud de conexión. Cuando el servidor de nombres lo da, se le pide la @IP correspondiente al nombre, y si la comparación de ambas @IPs falla, se rechaza la conexión. UDP o TCP Los mensajes DNS pueden transportarse en segmentos TCP o en datagramas UDP. En general, los mensajes pregunta viajan en UDP. Si la respuesta llega en UDP con el flag que indica truncación, puesto a 1, el resolver establece una conexión TCP y vuelve a lanzar la pregunta, para que la respuesta pueda viajar en uno o varios segmentos TCP. También viajan en segmentos los mensajes DNS con la información de zona cuando se trasvasa del servidor primario al secundario. Juan Carlos Cruellas Ibarz. Curso 2000/2001. Q1 8
UDP o TCP Cuando se usa UDP, el resolver debe gestionar por sí mismo el time-out y las retransmisiones de los mensajes DNS. Juan Carlos Cruellas Ibarz. Curso 2000/2001. Q1 9