“DNSMASQ”, UN SENCILLO SERVIDOR DNS

dnsmasqNOTA: En la primera parte de este post se explica en líneas generales que es un servidor DNS y la configuración de DNSMASQ, al final del post he añadido capturas de cada uno de los pasos realizados en este “LAB”. El material necesario para realizar el entorno ha sido:

 

 

  • Máquina Host MacBook Pro con VirtualBOX instalado.

  • Máquina virtual con Opensuse y dos tarjetas de red en modo “bridge” y “red interna” (192.168.1.200 y 172.16.0.1) respectivamente, en la que he instalado DNSMASQ (haciendo de servidor DNS y servidor DHCP).

  • Máquina virtual con Fedora y tarjeta de red en modo “red interna” (cesión IP 172.16.0.78) haciendo de cliente DNS y cliente DHCP.

 

Definición de un servidor DNS

En las redes TCP/IP, cada PC dispone de una dirección IP para poder comunicarse con el resto de PC’s. Es el equivalente a las redes de telefonía en las que cada teléfono dispone de un número que le identifica y le permite comunicarse con el resto.

Trabajar con direcciones IP es incómodo para las personas, ya que requeriría conocer en todo momento las direcciones de los equipos a los que queremos conectarnos. En su lugar utilizamos nombres que son más fáciles de recordar y utilizar como por ejemplo:

http://www.google.es

Cada equipo y cada servidor conectado a Internet, dispone de una dirección IP y de un nombre perteneciente a un dominio. Internamente, la comunicación entre los PC’s se realiza utilizando direcciones IP por eso es necesario algún sistema que permita, a partir de los nombres de los PC’s, averiguar las direcciones IP’s de los mismos. Por ejemplo, cuando queremos acceder a la página web de google, en la barra de direcciones del navegador escribimos:

http://www.google.es

Nuestro PC tendrá que averiguar cual es la IP correspondiente a http://www.google.es y una vez que ha averiguado que su IP es 216.58.211.195, se conecta con el servidor para adquirir la página web principal y mostrarla al usuario. Si en el navegador escribimos:

http:// 216.58.211.195

Ahorraremos el paso de averiguar la IP y directamente nos mostrará la página web del google.

Un servidor DNS es una máquina que permite averiguar la IP de un PC a partir de su nombre. Para ello, el servidor DNS dispone de una base de datos en la cual se almacenan todas las direcciones IP y todos los nombres de los PC’s pertenecientes a su dominio.

No existe una base de datos única donde se almacenan todas las IP’s existentes en el mundo, sino que cada servidor almacena las IP’s correspondientes a su dominio. Los servidores DNS están dispuestos jerárquicamente de forma que cuando nuestro servidor más inmediato no puede atender nuestra petición, éste la traslada al DNS superior.

En el proceso de resolución de un nombre, hay que tener en cuenta que los servidores DNS funcionan frecuentemente como clientes DNS, consultando a otros servidores para resolver completamente un nombre concreto.

ESTRUCTURA-DNS

Al configurar un servidor DNS local, las entradas existentes en nuestro DNS no serán visibles en Internet solamente servirán a los equipos de nuestra red. De esta forma, cuando un usuario de nuestra red intente acceder a un recurso local, podrá utilizar nombres en lugar de direcciones IP. Si el usuario desea acceder fuera de nuestra red local a algún recurso en Internet, el DNS local nunca podrá llevar a cabo dicha resolución y se la trasladará al siguiente servidor DNS (que sí estará en Internet) en su jerarquía de servidores DNS, hasta que la petición sea satisfecha.

Con un servidor DNS en nuestra red local, si hacemos un ping a un PC cuyo nombre es «equipo10» y cuya IP es 192.168.1.40; podemos lanzar el comando «ping» indistintamente contra dicha IP o contra el nombre del equipo en el dominio:

# ping 192.168.1.40

# ping equipo10.midominio.com

en ambos casos obtendremos respuesta. Esto es muy útil cuando las estaciones de trabajo reciben su IP por DHCP ya que puede ocurrir que desconozcamos la IP que tiene cierto equipo pero sí conocer su nombre en el dominio.

Otro ejemplo donde el servidor DNS tomará protagonismo será cuando deseemos acceder a un servidor web; si hemos denominado al sitio web como «www», podremos introducir en el DNS una entrada que identifique «www» como 192.168.1.220 (dirección IP de nuestro servidor web), de modo que cuando introduzcamos la URL «www.midominio.com» accederemos a nuestro servidor web. Lo mismo sería aplicable al servidor ftp o cualquier otro servicio.

Antes de comenzar con los procesos de instalación y configuración de nuestro DNS, vamos a definir algunos términos que utilizaremos a lo largo de dicho proceso.

 

Terminología

 

Zona de Búsqueda Directa:

Las resoluciones de esta zona devuelven la dirección IP correspondiente al recurso solicitado.

Zona de Búsqueda Inversa:

Las resoluciones de esta zona buscan un nombre de equipo en función de su dirección IP; una búsqueda inversa tiene forma de pregunta, del estilo «¿Cuál es el nombre DNS del equipo que utiliza la dirección IP 192.168.1.20?».

Reenviador DNS:

Servidor DNS designado por otros servidores DNS internos para su uso en consultas para resolver nombres de dominio DNS externos o fuera del dominio local.

GNU/Linux dispone de varios paquetes que software que permiten poner en marcha un servidor DNS. En este post hablaremos de “DNSMASQ”, que es un sencillo servidor DNS ideal para redes pequeñas.

 

DNSMASQ

El paquete “dnsmasq” permite poner en marcha un servidor DNS de una forma muy sencilla. Simplemente instalando y arrancando el servicio “dnsmasq”, sin realizar ningún tipo de configuración adicional, nuestro PC se convertirá en un servidor caché DNS y además, resolverá los nombres que tengamos configurados en el archivo “/etc/hosts” de nuestro servidor. La resolución funcionará tanto en sentido directo como en sentido inverso, es decir, resolverá la IP dado un nombre de PC y el nombre del PC dada la IP. Adicionalmente, “dnsmasq” dispone de servidor DHCP y permite resolver los nombres de los PC’s a los que les ha asignado dirección IP dinámica. A lo largo de esta sección veremos todas estas posibilidades que nos ofrece “dnsmasq”.

 

Instalación del servidor

Para instalar la última versión de “dnsmasq”:

# apt-get install dnsmasq

Como ya sabemos, esto depende de tu distribución y tu gestor de paquetes.

De esta forma instalaríamos los programas necesarios para disponer de un sencillo servidor DNS. Tan solo será necesario configurarlo y ponerlo en marcha.

 

Arranque y parada del servidor

El servicio “dnsmasq”, al igual que todos los servicios, dispone de “scripts” de arranque y parada en la carpeta “/etc/init.d”.

# /etc/init.d/dnsmasq restart

ó

# service dnsmasq stop

Para un arranque automático al iniciar el servidor, debemos crear los enlaces simbólicos correspondientes tal y como hemos explicado en posts anteriores

NOTA: Hay varias herramientas que nos facilitan la tarea desde una TUI, algunas de ellas son “sysv-rc-conf” ó “ntsysv”

 

Configuración básica

Para que “dnsmasq” pueda ser un servidor caché DNS, es necesario que nuestra máquina tenga en el archivo “/etc/resolv.conf” configurado al menos un servidor DNS externo. Normalmente los servidores DNS externos nos los proporciona el operador de telecomunicaciones que nos da servicio de Internet. Por ejemplo, Telefónica tiene unos DNS’s, ONO tiene otros, etc. Aunque podemos utilizar los de cualquier operador, lo mejor es configurar los del nuestro, porque responderá más rápido.

Servidores DNS de Telefónica:

– DNS primario 80.58.0.33

– DNS alternativo 80.58.32.97

Tenemos que añadir en el fichero “/etc/resolv.conf” de nuestro servidor:

nameserver 80.58.0.33

nameserver 80.58.32.97

Una vez introducidos los DNS externos en “/etc/resolv.conf”, debemos comprobar si dichos DNS externos funcionan correctamente y responden a las peticiones. Para ello haremos una consulta al DNS mediante el comando “nslookup”. También podríamos utilizar el comando “host” o el comando “dig”:

# nslookup http://www.google.es

Si el DNS funciona, nos dirá cual es la IP de http://www.google.es

En este punto, ya tendremos en nuestro servidor un servidor DNS caché funcionando. Para probar su funcionamiento, configuraremos el archivo “/etc/resolv.conf” del resto de los PC’s de nuestra red pero en lugar de indicar los DNS de Telefónica, indicaremos el nuestro. Si nuestro servidor tiene la IP 192.168.1.239, la añadiremos en el archivo “/etc/resolv.conf” de cada PC, tal que así:

nameserver 192.168.1.239

Al igual que hemos hecho anteriormente, podemos comprobar si nuestro servidor DNS funciona correctamente, haciendo una consulta mediante el comando “nslookup” en un PC cualquiera de nuestra red, donde hallamos modificado el fichero “/etc/resolv.conf” con nuestro servidor DNS:

# nslookup http://www.google.es

Si nuestro servidor DNS funciona, nos responderá con la IP del servidor google.

Ahora que ya tenemos el servidor DNS caché funcionando, iremos más allá. El siguiente paso será editar el archivo “/etc/hosts” de nuestro servidor, para que nuestro DNS resuelva también los nombres y las IP’s de nuestra red. Si los PC’s de nuestra red disponen de IP fija y queremos que “dnsmasq” resuelva sus nombres e IP’s, tan solo tenemos que añadir los nombres y las IP’s en el archivo “hosts” del servidor y sería como disponer de un DNS maestro para nuestra red:

Modificamos el fichero “/etc/hosts” del servidor con las IP’s y los nombres de nuestros PC’s, podemos añadir varios nombres en la misma línea separados con un tabulador:

192.168.1.239         www

192.168.1.238         impresora

192.168.1.1              router

192.168.1.101          pc1     almacenpc1

192.168.1.102          pc2     almacenpc2

192.168.1.103          pc3     compraspc3

 

Si desde un PC de nuestra red hacemos una consulta al DNS preguntando por otro PC de nuestra red, “dnsmasq” resolverá en el servidor y devolverá la IP configurada en el archivo hosts del servidor:

# nslookup almacenpc1

Cada vez que modifiquemos el archivo “/etc/hosts” del servidor, deberemos ejecutar «/etc/init.d/dnsmasq restart» para reiniciar el servicio “dnsmasq” y que recargue la información contenida en dicho archivo.

De esta manera, tan solo editando el archivo “/etc/hosts” del servidor, dispondremos de un sencillo servidor DNS para nuestra red lo que nos permitirá referirnos a nuestros PC’s utilizando sus nombres que son mucho más fáciles de recordar que las direcciones IP.

 

Servidor DNS y servidor DHCP

Cuando las IP’s de los PC’s de nuestra red son dinámicas, se nos presenta un problema para utilizar un servidor DNS ya que el mismo PC, hoy puede tener una IP y mañana puede tener otra IP diferente. Dicho problema se puede resolver de tres formas:

 

Utilizando un servidor DNS dinámico:

Los PC’s, al recibir la IP del servidor DHCP, informarán al servidor DNS dinámico de la IP que les ha sido asignada de forma dinámica y así poder asociar de forma correcta el nombre con la IP que tiene en un momento dado. El inconveniente de este método es que nos obliga a instalar en los PC’s un servicio que informe al servidor DNS dinámico de los cambios de IP de cada PC. Es similar al sistema utilizado por los servidores DNS dinámicos de Internet como “www.no-ip.org” o “www.dyndns.com”. Aquí no hablaremos de servidores DNS dinámicos porque las dos soluciones siguientes son más sencillas.

Utilizando reservas de DHCP:

En el servidor DHCP existe la posibilidad de establecer una configuración concreta a un cliente concreto identificándolo por la dirección MAC de su tarjeta de red (como ya vimos en un post anterior). Si configuramos tantas reservas de IP’s como PC’s hay en nuestra red, podríamos configurar a cada PC la IP que deseemos. Esto sería como tener IP’s fijas en nuestra red, pero asignadas por DHCP. Esta idea no es para nada descabellada y nos permitiría controlar en todo momento la IP de cada PC.

Utilizando el servidor DHCP de dnsmasq:

“Dnsmasq”, además de ofrecernos un servidor DNS, nos ofrece también un servidor DHCP fácilmente configurable que además resolverá los nombres de los PC’s de nuestra red aún cuando sus IP’s hayan sido configuradas por DHCP. Para configurar el servidor DHCP de “dnsmasq” debemos editar el archivo de configuración “/etc/dnsmasq.conf” y añadir una línea como esta:

“ dhcp-range=ip-inicial,ip-final, tiempo de cesión”

Por ejemplo, si queremos que el DHCP utilice el rango desde 192.168.1.10 hasta 192.168.1.100 y que la cesión dure 24 horas, editaremos el fichero “/etc/dnsmasq.conf” y añadiremos la siguiente línea:

dhcp-range=192.168.1.10,192.168.1.100,24h

Cuando los PC’s clientes pidan una IP al servidor DHCP, normalmente el cliente suministrará su nombre de PC. Dicho nombre será utilizado por “dnsmasq” para asociarlo a la IP que le ha sido asignada al PC y así resolver correctamente cualquier consulta DNS.

A medida que el servidor DHCP va concediendo IP’s a todos los PC’s que se la solicitan, éste va almacenándolas en el archivo de concesiones “/var/lib/misc/dnsmasq.leases” donde guarda la fecha y la hora de la cesión en formato “%s” (ver la pagina MAN del comando date para más información sobre dicho formato) la MAC del cliente, la IP concedida al cliente y el nombre del PC cliente siempre y cuando el cliente haya enviado su nombre de PC.

Para que “dnsmasq” pueda conocer el nombre del cliente, éste deberá enviar su nombre cuando realiza la petición DHCP. En los equipos GNU/Linux, el nombre que envía el PC cliente, suele almacenarse en el parámetro “send host-name” del archivo de configuración del cliente dhcp: “/etc/dhcp3/dhclient.conf”.

Por ejemplo, si nuestro PC se llama almacenpc1, deberemos configurarlo en el fichero “/etc/dhcp3/dhclient.conf”, tal que así:

send host-name almacenpc1

Lo normal es que dicho nombre coincida con el nombre del PC almacenado en el archivo “/etc/hostname”.

Por lo tanto, al disponer «dnsmasq» de servidor DHCP, no es necesario instalar otro servidor.

 

CAPTURAS DEL «LAB»

Instalación del servidor DNSMASQ desde «yast», en OpenSuSE disponemos de esta «TUI», del comando «zypper» (al estilo dnf ó apt-get) y de «yast2» en entorno gráfico.

instalando-dnsmasq

Activando el servicio DNSMASQ, primero comprobamos si el servicio está activo «systemctl list-unit-files | grep dnsmasq», si no lo estuviese, deberemos ejecutar «systemctl enable dnsmasq.service».

servicio-dnsmasq-enable

Añadiendo servidores DNS de google a «/etc/resolv.conf» en OpenSuSE (IP’s 8.8.8.8 y 8.8.4.4)

añadir-server-dns-google

Añadiendo el servidor DNSMASQ al fichero «/etc/resolv.conf» en el cliente Fedora, escribimos la IP de la tarjeta de red en modo «red interna» (172.16.0.1), ya que es la que dará el servicio DNS y DHCP. En este caso el adaptador en modo «bridge» (192.168.1.200) tiene salida a internet, por lo que la máquina OpenSuSE hace también de enrutador (deberemos activar el «ip_forward» ya sea temporalmente con «echo 1 > /proc/sys/net/ipv4/ip_forward» ó de forma fija editando el fichero «sysctl.conf» y modificando la linea «net.ipv4.ip_forward = 0», cambiando el «0» por «1».

añadir-ip-dnsmasq-resolv-fedora

Resolviendo nombres desde Fedora con «nslookup http://www.google.es», como se puede apreciar el comando funciona correctamente y nos devuelve la IP de google.

nslookup-fedora

Configurando el servidor DHCP de DNSMASQ, descomentamos y modificamos la linea «dhcp-range=172.16.0.10,172.16.0.100,12h».

añadiendo-dhcp-range

Fichero de concesiones en el servidor DNSMASQ, como se puede apreciar, la IP 172.16.0.78 es asignada a la máquina Fedora.

fichero-concesiones-ip

 

Espero que el post os haya resultado útil e interesante.

 

Saludos cordiales.

 

 

 

Deja un comentario