miércoles, 11 de febrero de 2009

Servidor DNS

Después de saber como se convierte www.google.es en 66.102.9.99, vamos a crearnos un servidor DNS en nuestra propia máquina. Para ello necesitaremos hacemos:

1. Instalar dnsmasq:
sudo apt-get update
sudo apt-get install dnsmasq


2. Hacemos una copia de seguridad de /etc/resolv.conf como
sudo cp /etc/resolv.conf /etc/resolv.dnsmasq.conf


3. Añadir con algun editor de texto en /etc/resolv.conf añadiendo como primera línea:
Primero editamos
sudo nano /etc/resolv.conf

Y añadimos en la primera linea
nameserver 127.0.0.1


Y con esto ya debería funcionar, utilizaremos dig para comprobarlo.
$ dig www.google.es | grep Query
;; Query time: 89 msec

$ dig www.google.es | grep Query
;; Query time: 0 msec

Dig hace una consulta DNS y posibilita usar “Query time” para saber el tiempo que tarda en consultar la IP. En el primer intento tarda un poco puesto que tiene que buscarla, pero la segunda es instantaneo.

Haciendo esto, conseguimos acelerar la conección, puesto que hay un tiempo de latencia antes de lanzar la petición a la pagina web en cuestión, que solo haremos la primera vez.

que son DNS's??

Entre todas esas cosas que configuramos en las conecciones de internet, hay un punto bastante desconocido. Digo desconocido, porque para mi lo era hasta hace poco:
el(los) servidor DNS
Basicamente, es un mecanismo para convertir url's, como pueden ser:
YOUTUBE IP: http://208.65.153.253
google.es IP: http://66.102.9.104/
Es fácil ver la IP de alguna web, basta con hacerle ping y ver lo que devuelve:
$ ping www.meneame.net
PING meneame.net (89.17.194.74) 56(84) bytes of data.
64 bytes from s1.meneame.net (89.17.194.74): icmp_seq=1 ttl=58 time=18.4 ms

Ahi teneis, la ip de la web meneame.net es http://89.17.194.74
Bueno, la finalidad principal es montar un Servidor DNS en nuestra máquina. Pero, ¿qué es un servidor DNS?
Basicamente, cuando ponemos en el navegador web www.google.es, este:

1. Se consultan los ficheros /etc/nsswitch.conf y /etc/host.conf. Si la librería del sistema utilizada es muy antigua (libc4 o anterior) entonces solamente se consulta el segundo fichero. Para libc5 y librería GNU C 2.x se lee el primero. Si existen ambos ficheros entonces deben de ser coherentes. En esencia, indican el orden que hay que seguir;en la búsqueda. En el fichero /etc/nsswitch.conf debemos tener una línea:
hosts: files dns

De existir /etc/host.conf deberíamos tener, por ejemplo, la línea
order hosts, bind


2.Suponiendo el orden descrito en el punto anterior, mira si en el fichero /etc/hosts existe una linea con la forma:
dirección_ip servidor_buscado

Si esto es así la búsqueda ha terminado, pero no es lo habitual. De esta forma se recurre a la consulta DNS.

3.La consulta DNS comienza con la inspección del fichero /etc/resolv.conf. En este fichero tenemos una serie de lineas con el formato
nameserver dirección_ip

Es la lista de servidores DNS que tuvimos que implementar en su día para poder acceder a la red, y que nos facilitó nuestro Proveedor de Servicios de Internet. Primero envía una consulta al primero de ellos (DNS primario), en caso de fallo al secundario y así normalmente tenemos hasta 3 servidores.

4. Cada uno de los servidores DNS consultados, busca si en su memoria caché por casualidad existe esa información y todavía es válida, en cuyo caso la sirve rápidamente. En caso negativo, la tiene que buscar en la red. El proceso es más o menos como sigue, supongamos se desea saber la dirección IP de gcc.gnu.org:
a) El servidor elige al azar uno de los servidores raiz de entre los que figuran en el fichero root.hint y entonces pregunta al servidor raíz remoto acerca de gcc.gnu.org.
b) El servidor raiz, dada su jerarquía, no se molesta demasiado en responder totalmente, y solo lo hace forma parcial :-) . De entre todos los registros donde figuran los IP de los servidores primarios de .org (que pueden ser muchos) elige uno al azar y nos lo envía como respuesta
c) Bien, con la IP de esa primera búsqueda se pregunta de nuevo a este nuevo servidor acerca de gcc.gnu.org. Tampoco se molesta en responder totalmente, de todos sus registros donde figuran DNS de .gnu.org elige como respuesta uno al azar.
d) Con este nuevo IP se pregunta por tercera vez acerca de gcc.gnu.org. Este nuevo servidor ya nos devuelve la respuesta completa: la IP de gcc.gnu.org.
En el caso de que la respuesta en alguno de los pasos anteriores fuera negativa, el servidor DNS supondría que no existe IP válida para el dominio solicitado. Otra posible incidencia puede ser que la respuesta no llegue a tiempo, en cuyo caso se recurre al siguiente servidor de la lista en /etc/resolv.conf.

En el caso de que la respuesta en alguno de los pasos anteriores fuera negativa, el servidor DNS supondría que no existe IP válida para el dominio solicitado. Otra posible incidencia puede ser que la respuesta no llegue a tiempo, en cuyo caso se recurre al siguiente servidor de la lista en /etc/resolv.conf.

Los pasos a seguir en el proceso inverso, es decir, en la busqueda de un nombre a partir de una IP, son muy parecidos. Por ejemplo, si se busca el nombre del host con IP 62.72.78.213 el servidor pregunta por 213.78.72.62.in-addr.arpa (obsérvese cómo se invierte en la petición el orden de los cuatro números que conforman la IP). La primera llamada al servidor raíz nos daría información acerca de algún DNS que sabe de *.62.in-addr.arpa, llamando a este servidor obtendriamos otro que contiene información de *.72.62-in-addr.arpa y así sucesivamente hasta que en algún paso uno de los servidores encuentra la respuesta completa y nos la devuelve como gcc.gnu.org

Hello world

La idea de crear un diario-manual surge para servir como diario que es, donde publicar esas cositas que se van haciendo sobre la distribución montada. Pero tambien tiene caracter divulgativo; a modo de "ayuda". Espero que a alguien le sirva esto de algo.