Source: http://es.tldp.org/Manuales-LuCAS/GARL2/garl2/x-087-2-resolv.library.html
Timestamp: 2020-04-02 21:14:16+00:00

Document:
Cuando hablamos del sistema de resolución, no nos referiremos a una aplicación en particular, sino a la biblioteca de resolución: un conjunto de funciones que pueden encontrarse en las bibliotecas estándar del lenguaje C. Las rutinas principales son gethostbyname(2) y gethostbyaddr(2), que buscan la dirección IP de una máquina a partir del nombre y viceversa. Es posible configurarlas para que simplemente miren en el fichero hosts local (o remoto, si se usa NIS).
Las funciones del sistema de resolución leen ficheros de configuración cuando son llamadas. Desde estos ficheros, determinan qué bases de datos hay que interrogar, en qué orden y otros detalles relevantes. En la antigua biblioteca libc de GNU/Linux, se utilizaba el fichero /etc/host.conf como fichero maestro, pero en la versión 2 de las bibliotecas, la glibc, se utiliza el fichero /etc/nsswitch.conf. Vamos a describir ambas formas, puesto que son muy usuales.
6.1.1. El fichero host.conf
El fichero host.conf se encuentra en el directorio /etc e indica al sistema de resolución qué servicios debe usar y en qué orden.
Las opciones del fichero host.conf deben estar en líneas distintas. Los campos deben separarse por blancos (espacios o tabuladores). Un símbolo almohadillado (#) supone desde ese punto hasta el final de la línea un comentario del fichero. Las opciones disponibles son las siguientes:
Determina el orden en el que los servicios de resolución se usan. Opciones válidas son bind para usar el servidor de nombres, /etc/hosts para buscar en /etc/hosts y nis para buscar con NIS. Puede especificarse cualquiera de las anteriores, y el orden de aparición determina qué servicio se prueba en primer lugar para intentar resolver el nombre.
Va con las opciones on u off. Determina si una máquina del fichero /etc/hosts puede tener distintas direcciones IP o no. Esta opción no tiene efecto en peticiones via NIS o DNS.
Como se explicó en la sección Sección 6.2.4, ” DNS le permite encontrar un nombre de máquina perteneciente a una dirección IP utilizando el dominio in-addr.arpa. Los intentos de los servidores de nombres de proporcionar un nombre falso se conocen en inglés como spoofing[1]. Para evitar esto, el sistema puede configurarse para comprobar si las direcciones IP originales están de hecho asociadas con el nombre obtenido. Si no, el nombre será rechazado y se retornará un error. Esta opción se activa poniendo nospoof on.
Esta opción puede tomar el valor on u off como argumentos. Si se activa, cualquier intento de spoof será anotado con un mensaje enviado al sistema de registros syslog.
Esta opción lleva un nombre de dominio como argumento, que se quitará a los nombres antes de buscar su dirección. Es útil para las entradas del fichero hosts, que podrán así ir solos los nombres de máquinas, sin el dominio. Cuando se busque una máquina con el nombre de dominio local éste será eliminado, haciendo que la búsqueda en el fichero /etc/hosts tenga éxito. El dominio que añada debe terminar en un punto (.) (por ejemplo, linux.org.au.).
Las opciones de trim se van acumulando; podemos considerar nuestra máquina como local de diversos dominios.
Veamos un fichero de ejemplo para vlager en Ejemplo 6-1.
Ejemplo 6-1. Ejemplo de fichero host.conf
# Permitir direcciones múltiples
6.1.1.1. Variables de entorno
Existen algunas variables de entorno que establecen opciones que tienen más prioridad sobre las puestas en el fichero host.conf. Éstas son:
El valor on activa la opción ``multi'', y el valor off la desactiva.
6.1.2. El fichero nsswitch.conf
La versión 2 de la biblioteca estándar de funciones de GNU incluye un fichero más flexible para sustituir a host.conf. El concepto de servicio de nombres se ha extendido para incluir una variedad de diferentes tipos de información. Las opciones para seleccionar las bases de datos a las que interrogar se han introducido todas en un fichero, que se llama nsswitch.conf.
El fichero nsswitch.conf permite al administrador de sistemas configurar una amplia variedad de diferentes bases de datos. Limitaremos nuestra discusión a opciones que se refieran a la resolución de nombres de máquina y direcciones IP. Se puede encontrar fácilmente mucha más información para aprovechar el resto de las características de este fichero, sin más que leer la documentación de la biblioteca estándar GNU.
Las opciones del fichero nsswitch.conf deben estar en líneas diferentes. Los campos se separan por blancos (espacios o tabuladores). Un signo de almohadillado (#) introducirá un comentario para todo el resto de esa línea. Cada línea describe un servicio en particular; la resolución de nombres es uno de ellos. El primer campo de cada línea es el nombre de la base de datos, finalizado en el signo de dos puntos. La base de datos relacionada con la resolución es hosts. Una base de datos relacionada es networks, que se usa para convertir nombres en direcciones de redes. El resto de cada línea lleva opciones que determinan cómo se hacen las búsquedas de los elementos de la base de datos.
Indica que se usa el DNS para resolver la dirección. Esto solo sirve para resolución de nodos, no de redes. Para ello se mira primero el fichero /etc/resolv.conf, que veremos después.
Hace la búsqueda en un fichero local. Es decir, en /etc/hosts para los nodos, y en /etc/network para las redes.
nis o nisplus
Usará el sistema NIS (sistema de información en red) para resolver nodos o redes. NIS y NIS+ se discuten en detalle en Capítulo 13.
El orden en el que los servicios estén listados es el orden en el que serán interrogados para buscar un nombre. Es decir, los servicios son interrogados leyéndolos de izquierda a derecha, hasta encontrar la respuesta.
Un ejemplo de fichero nsswitch.conf lo tenemos en Ejemplo 6-2.
Ejemplo 6-2. Ejemplo de fichero nsswitch.conf
# Ejemplo de configuracion del nsswitch de GNU.
# En el paquete `libc6-doc' se documentan estos ficheros.
Este ejemplo hace que el sistema busque los nodos, primero en el DNS y después en /etc/hosts, si no se encuentra. En cambio las redes se buscan exclusivamente en /etc/networks.
Podemos controlar el comportamiento más precisamente, usando “items de acción” que describen qué hacer tras el último intento de búsquedas. Los items de acción aparecen entre los servicios, y se encierran entre corchetes, [. La sintaxis general es:
[ [!] estado = acción ... ]
Hay dos posibles acciones:
Hace que el control retorne al programa que hizo la petición de resolución. Si la búsqueda tuvo éxito, retornará los detalles. Si no, retornará un cero.
El sistema seguirá buscando a través del siguiente servicio de la lista.
El carácter opcional (!) especifica que el valor de estado debe considerarse invertido antes de comprobarlo, es decir, es un “not.”
Los valores de estado posible son:
La petición se encontró sin errores. La acción por defecto aquí es return.
No hubo error en la búsqueda, pero no se encontró el nodo o la red. La acción predeterminada aquí es continue.
El servicio solicitado no está disponible. Por ejemplo, que el fichero /etc/hosts no esté en su sitio, o que el servidor DNS o NIS requeridos no respondan. La acción predeterminada es continue.
Significa que el servicio estaba no disponible temporalmente. Por ejemplo, que el fichero hosts esté bloqueado por otro proceso, o que el DNS esté muy cargado. La acción predeterminada para este estado es continue.
Un ejemplo de uso de todo esto se muestra en Ejemplo 6-3.
Ejemplo 6-3. Ejemplo de nsswitch.conf con acciones
Este ejemplo intentará resolver los nodos usando el DNS. Si se devuelve un error que no sea UNAVAIL, el sistema devolverá lo que ha encontrado. En otro caso intentará buscarlo en /etc/hosts. Esto significa que este fichero solo se usará en caso de que el DNS no funcione bien.
6.1.3. Configuración del fichero resolv.conf
Cuando se configura la biblioteca de resolución para utilizar los servicios de BIND, tiene que indicarse también qué servidores utilizar. El fichero resolv.conf contiene una lista de servidores, que si está vacía hará considerar al sistema que el servidor está en su máquina.
Si ejecuta un servidor de nombres en su máquina local, tendrá que configurarlo por separado, como se explicará después. Si se encuentra en una red local y puede usar un servidor de nombres existente, mejor. Si estamos conectados a Internet por módem, lo habitual es especificar en resolv.conf el servidor de nombres que nos diga nuestro proveedor de servicios.
La opción más importante del fichero resolv.conf es nameserver, que tiene la dirección IP del servidor de nombres a usar. Si especifican varios servidores poniendo varias líneas nameserver, se intentarán usar en el orden dado; por lo que debería poner en primer lugar el servidor de nombres más rápido o cercano. Actualmente, puede ponerse un máximo de tres servidores distintos. Si no se pone ninguno, intentará buscar un servidor de nombres en la máquina local.
Otras dos opciones, domain y search, nos permiten usar nombres cortos (sin dominio) para máquinas que estén en nuestro dominio. Normalmente, para conectarnos a una máquina de la misma red, no queremos poner el dominio completo, sino su nombre. Por ejemplo, gauss en lugar de gauss.mathematics.groucho.edu.
Esto está bien, pensaremos, pero tan pronto como nos refiramos a una máquina que esté fuera del Departamento de Matemáticas, tendremos que volver a teclear el dominio completo. A lo mejor queremos teclear solo quark.physics para referirnos a una máquina del Departamento de Físicas.
Las opciones search y domain son mutuamente excluyentes y no pueden aparecer más de una vez. Si ninguna de las dos se pone, el sistema intentará asignar a los nombres cortos el dominio de la máquina local, que averiguará usando la llamada al sistema getdomainname(2). Si el nodo local no tiene dominio, se asumirá que el dominio predeterminado es el raíz.
Si decidimos poner una opción search en el fichero resolv.conf, habrá que ser cuidadosos con los dominios que añadimos a la lista. Las bibliotecas de resolución anteriores a BIND 4.9 solían construir una lista de búsqueda predeterminada para el dominio cuando no se proporciona otra lista. Esta lista predeterminada se hacía con el dominio del nodo, más todos los dominios padre hasta llegar a la raíz. Esto daba lugar a búsquedas innecesarias a los servidores de nombres externos.
6.1.4. Robustez del sistema de resolución
Si tiene en funcionamiento una red local dentro de otra más grande, deberá usar servidores de nombres principales siempre que sea posible. La ventaja de hacerlo así es que se consiguen generosas memorias caché, ya que todas las peticiones de nombres les llega a ellos. Este esquema, sin embargo, tiene un inconveniente: cuando un incendio inutilizó el cable de red dorsal de nuestro departamento en la Universidad, no pudimos trabajar, pues ninguno de los servidores de nombres estaban accesibles. No funcionaban ni los terminales X ni las impresoras...
Alternativamente, puede mantener una copia de la tabla de nombres para su dominio o red local en el fichero /etc/hosts. En el fichero /etc/host.conf deberá incluir la opción “order bind,hosts”, para obligar a usar el fichero local si el servidor principal de nombres falla. Si usamos /etc/nsswitch.conf, habrá que cambiar la línea que haga referencia a hosts, dejándola así: “hosts: dns files”.
N. del T.: literalmente, burla
El servicio de nombres y su configuración Subir Cómo funciona el DNS

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución