109.4 Lección 1
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
109 Fundamentos de redes |
Objetivo: |
109.4 Configuración DNS en el lado del cliente |
Lección: |
1 de 1 |
Introducción
Esta lección cubre la configuración de la resolución de nombres del lado del cliente y cómo utilizar algunas herramientas de resolución de nombres de la CLI.
Recordar y mantener direcciones IP, UID, GID y otros números para todo no es factible. Los servicios de resolución de nombres traducen nombres fáciles de recordar a números y viceversa. Esta lección se centra en la resolución de nombres de host, pero un proceso similar ocurre para los nombres de usuario, los nombres de grupo, los números de puerto y varios otros.
Proceso de resolución de nombres
Los programas que resuelven nombres a números casi siempre utilizan funciones proporcionadas por la biblioteca estándar de C, que en los sistemas Linux es el glibc del proyecto GNU. Lo primero que hacen estas funciones es leer el archivo /etc/nsswitch.conf
para obtener instrucciones sobre cómo resolver ese tipo de nombre. Esta lección se centra en la resolución de nombres de host, pero el mismo proceso se aplica también a otros tipos de resolución de nombres. Una vez que el proceso lee /etc/nsswitch.conf
, busca el nombre de la manera especificada. Dado que /etc/nsswitch.conf
soporta plugins, lo que viene a continuación puede ser cualquier cosa. Una vez que la función ha terminado de buscar el nombre o el número, devuelve el resultado al proceso que lo ha llamado.
Clases de DNS
El DNS tiene tres clases de registros, IN, HS y CH. En esta lección, todas las consultas DNS serán del tipo IN. La clase IN es para las direcciones de Internet que utilizan la pila TCP/IP. CH es para ChaosNet, que es una tecnología de red que tuvo una corta vida y ya no está en uso. La clase HS es para Hesiod. Hesiod es una forma de almacenar cosas como passwd y entradas de grupo en DNS. Hesiod está más allá del alcance de esta lección.
Comprendiendo el archivo /etc/nsswitch.conf
La mejor manera de aprender sobre este archivo es leer la página man que forma parte del proyecto Linux man-pages. Está disponible en la mayoría de los sistemas. Se puede acceder a ella con el comando man nsswitch.conf
. También se puede encontrar en https://man7.org/linux/man-pages/dir_section_5.html
A continuación se muestra un ejemplo sencillo de /etc/nsswitch.conf
de su página man:
passwd: compat group: compat shadow: compat hosts: dns [!UNAVAIL=return] files networks: nis [NOTFOUND=return] files ethers: nis [NOTFOUND=return] files protocols: nis [NOTFOUND=return] files rpc: nis [NOTFOUND=return] files services: nis [NOTFOUND=return] files # This is a comment. It is ignored by the resolution functions.
El archivo está organizado en columnas. La columna del extremo izquierdo es el tipo de base de datos de nombres. El resto de las columnas son los métodos que las funciones de resolución deben utilizar para buscar un nombre. Los métodos van seguidos de las funciones de izquierda a derecha. Las columnas con []
se utilizan para proporcionar alguna lógica condicional limitada a la columna inmediatamente a la izquierda de la misma.
Supongamos que un proceso intenta resolver el nombre de host learning.lpi.org
. Haría una llamada a la biblioteca C apropiada (probablemente gethostbyname
). Esta función leerá entonces /etc/nsswitch.conf
. Como el proceso está buscando un nombre de host, encontrará la línea que comienza con hosts
. Entonces intentará usar el DNS para resolver el nombre. La siguiente columna, [!UNAVAIL=return]
significa que si el servicio no está disponible, entonces no intente la siguiente fuente, es decir, si DNS está disponible, deje de intentar resolver el nombre del host aunque los servidores de nombres no puedan. Si el DNS no está disponible, entonces continúe con la siguiente fuente. En este caso, la siguiente fuente es files
.
Cuando veas una columna con el formato [resultado=action]
, significa que la búsqueda del resolver de la columna a la izquierda es resultado
, entonces se realiza acción
. Si resultado
es similar a un !
, significa que el resultado no es igual a este, entonces se realiza acción
. Para las descripciones de los posibles resultados y acciones, consulte la página de man.
Ahora supongamos que un proceso está tratando de resolver un número de puerto a un nombre de servicio. Para ello, leerá la línea servicios
. La primera fuente listada es NIS. Estas siglas significa Network Information Service (a veces se le llama yellow pages). Es un antiguo servicio que permitía la gestión centralizada de objetos como los usuarios. Ya no se usa mucho debido a su escasa seguridad. La siguiente columna [NOTFOUND=return]
significa que si la búsqueda tiene éxito pero no encontra el servicio, debe dejar de buscar. Si la condición mencionada no se aplica, utilice los archivos locales.
Cualquier cosa a la derecha de #
es un comentario y se ignora.
El archivo /etc/resolv.conf
.
El fichero /etc/resolv.conf
se utiliza para configurar la resolución de hosts mediante DNS. Algunas distribuciones tienen scripts de inicio, demonios y otras herramientas que escriben en este archivo. Tenga esto en cuenta cuando edite manualmente este archivo. Compruebe su distribución y la documentación de cualquier herramienta de configuración de red si este es el caso. Algunas herramientas, como Network Manager, dejarán un comentario en el archivo para informarle que los cambios manuales se sobrescribirán.
Al igual que con /etc/nsswitch.conf
, hay una página man asociada al fichero. Se puede acceder a ella con el comando man resolv.conf
o en https://man7.org/linux/man-pages/man5/resolv.conf.5.html.
El formato del archivo es bastante sencillo. En la columna de la izquierda se encuentra la opción name
. El resto de las columnas en la misma línea son el valor de la opción.
La opción más común es la del nameserver
. Se utiliza para especificar la dirección IPv4 o IPv6 de un servidor DNS. A partir de la fecha de este escrito, puede especificar hasta tres servidores de nombres. Si su /etc/resolv.conf
no tiene la opción nameserver
, su sistema utilizará por defecto el servidor de nombres de la máquina local.
A continuación se muestra un archivo de ejemplo simple que es representativo de las configuraciones más comunes:
search lpi.org nameserver 10.0.0.53 nameserver fd00:ffff::2:53
La opción search
se utiliza para permitir las búsquedas de forma corta. En el ejemplo, se ha configurado un único dominio de búsqueda de lpi.org
. Esto significa que cualquier intento de resolver un nombre de host sin una porción de dominio tendrá .lpi.org
añadido antes de la búsqueda. Por ejemplo, si intentara buscar un host llamado aprendizaje
, el resolvedor buscaría aprendizaje.lpi.org
. Puede tener configurados hasta seis dominios de búsqueda.
Otra opción común es la opción domain
. Se utiliza para establecer el nombre de dominio local. Si esta opción no está presente, se utiliza por defecto todo lo que sigue al primer .
en el nombre de host de la máquina. Si el nombre de host no contiene un .
, se asume que la máquina es parte del dominio raíz. Al igual que search
, domain
puede utilizarse para búsquedas de nombres cortos.
Tenga en cuenta que domain
y search
son mutuamente excluyentes. Si ambos están presentes, se utiliza la última instancia del archivo.
Hay varias opciones que se pueden establecer para afectar el comportamiento del resolver. Para establecerlas, utilice la palabra clave options
, seguida del nombre de la opción a establecer, y si es aplicable, un :
seguido del valor. A continuación se muestra un ejemplo de configuración de la opción de tiempo de espera, que es el tiempo en segundos que el resolvedor esperará a un servidor de nombres antes de rendirse:
option timeout:3
Hay otras opciones en resolv.conf
, pero estas son las más comunes.
El archivo /etc/hosts
El archivo /etc/hosts
se utiliza para resolver nombres a direcciones IP y viceversa. Tanto IPv4 como IPv6 son compatibles. La columna de la izquierda es la dirección IP, el resto son nombres asociados a esa dirección. El uso más común de /etc/hosts
es para hosts y direcciones donde el DNS no es posible, como las direcciones de loopback. En el ejemplo siguiente, se definen las direcciones IP de los componentes críticos de la infraestructura.
Este es un ejemplo realista de un archivo /etc/hosts
:
127.0.0.1 localhost 127.0.1.1 proxy ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 10.0.0.1 gateway.lpi.org gateway gw fd00:ffff::1 gateway.lpi.org gateway gw 10.0.1.53 dns1.lpi.org fd00:ffff::1:53 dns1.lpi.org 10.0.2.53 dns2.lpi.org fd00:ffff::2:53 dns2.lpi.org
systemd-resolved
Systemd proporciona un servicio llamado systemd-resolved
. Proporciona mDNS, DNS y LLMNR. Cuando se ejecuta, escucha las peticiones DNS en 127.0.0.53
. No proporciona un servidor DNS completo. Las peticiones DNS que recibe se buscan consultando los servidores configurados en /etc/systemd/resolv.conf
o /etc/resolv.conf
. Si desea utilizar esto, use resolve
para hosts
en /etc/nsswitch.conf
. Tenga en cuenta que el paquete del sistema operativo que tiene la biblioteca systemd-resolved
puede no estar instalado por defecto.
Herramientas de resolución de nombres
Hay muchas herramientas disponibles para los usuarios de Linux para la resolución de nombres. Esta lección cubre tres. Una, getent
, es útil para ver cómo se resuelven las peticiones del mundo real. Otro comando es host
, que es útil para consultas DNS simples. Un programa llamado dig
es útil para operaciones DNS complejas que pueden ayudar a solucionar problemas del servidor DNS.
El comando getent
La utilidad getent
se utiliza para mostrar las entradas de las bases de datos del servicio de nombres. Puede recuperar registros de cualquier fuente configurable por /etc/nsswitch.conf
.
Para utilizar getent
, siga el comando con el tipo de nombre que desea resolver y, opcionalmente, una entrada específica para buscar. Si sólo especifica el tipo de nombre, getent
intentará mostrar todas las entradas de ese tipo de datos:
$ getent hosts 127.0.0.1 localhost 127.0.1.1 proxy 10.0.1.53 dns1.lpi.org 10.0.2.53 dns2.lpi.org 127.0.0.1 localhost ip6-localhost ip6-loopback $ getent hosts dns1.lpi.org fd00:ffff::1:53 dns1.lpi.org
A partir de la versión 2.2.5 de glibc, puede forzar a getent
a utilizar una fuente de datos específica con la opción -s
. El siguiente ejemplo lo demuestra:
$ getent -s files hosts learning.lpi.org ::1 learning.lpi.org $ getent -s dns hosts learning.lpi.org 208.94.166.198 learning.lpi.org
El comando host
host
es un programa sencillo para buscar entradas DNS. Sin opciones, si a host
se le da un nombre, devuelve los conjuntos de registros A, AAAA y MX. Si se le da una dirección IPv4 o IPv6, devuelve el registro PTR si hay uno disponible:
$ host wikipedia.org wikipedia.org has address 208.80.154.224 wikipedia.org has IPv6 address 2620:0:861:ed1a::1 wikipedia.org mail is handled by 10 mx1001.wikimedia.org. wikipedia.org mail is handled by 50 mx2001.wikimedia.org. $ host 208.80.154.224 224.154.80.208.in-addr.arpa domain name pointer text-lb.eqiad.wikimedia.org.
Si busca un tipo de registro específico, puede utilizar host -t
:
$ host -t NS lpi.org lpi.org name server dns1.easydns.com. lpi.org name server dns3.easydns.ca. lpi.org name server dns2.easydns.net. $ host -t SOA lpi.org lpi.org has SOA record dns1.easydns.com. zone.easydns.com. 1593109612 3600 600 1209600 300
host
también puede utilizarse para consultar un servidor de nombres específico si no desea utilizar los que se encuentran en /etc/resolv.conf
. Simplemente añada la dirección IP o el nombre del servidor que desea utilizar como último argumento:
$ host -t MX lpi.org dns1.easydns.com Using domain server: Name: dns1.easydns.com Address: 64.68.192.10#53 Aliases: lpi.org mail is handled by 10 aspmx4.googlemail.com. lpi.org mail is handled by 10 aspmx2.googlemail.com. lpi.org mail is handled by 5 alt1.aspmx.l.google.com. lpi.org mail is handled by 0 aspmx.l.google.com. lpi.org mail is handled by 10 aspmx5.googlemail.com. lpi.org mail is handled by 10 aspmx3.googlemail.com. lpi.org mail is handled by 5 alt2.aspmx.l.google.com.
El comando dig
Otra herramienta para consultar servidores DNS es dig
. Este comando es mucho más detallado que host
. Por defecto, dig
consulta los registros A. Probablemente es demasiado tedioso buscar una dirección IP o un nombre de host. dig
funcionará para búsquedas sencillas, pero es más adecuado para solucionar problemas de configuración del servidor DNS:
$ dig learning.lpi.org ; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> learning.lpi.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63004 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: ca7a415be1cec45592b082665ef87f3483b81ddd61063c30 (good) ;; QUESTION SECTION: ;learning.lpi.org. IN A ;; ANSWER SECTION: learning.lpi.org. 600 IN A 208.94.166.198 ;; AUTHORITY SECTION: lpi.org. 86400 IN NS dns2.easydns.net. lpi.org. 86400 IN NS dns1.easydns.com. lpi.org. 86400 IN NS dns3.easydns.ca. ;; ADDITIONAL SECTION: dns1.easydns.com. 172682 IN A 64.68.192.10 dns2.easydns.net. 170226 IN A 198.41.222.254 dns1.easydns.com. 172682 IN AAAA 2400:cb00:2049:1::a29f:1835 dns2.easydns.net. 170226 IN AAAA 2400:cb00:2049:1::c629:defe ;; Query time: 135 msec ;; SERVER: 192.168.1.20#53(192.168.1.20) ;; WHEN: Sun Jun 28 07:29:56 EDT 2020 ;; MSG SIZE rcvd: 266
Como puede ver, dig
proporciona mucha información. La salida está dividida en secciones. La primera sección muestra información sobre la versión de dig
instalada y la consulta enviada, junto con las opciones utilizadas para el comando. A continuación muestra información sobre la consulta y la respuesta.
La siguiente sección muestra información sobre las extensiones EDNS utilizadas y la consulta. En el ejemplo, se utiliza la extensión cookie. dig
está buscando un registro A para learning.lpi.org
.
La siguiente sección muestra el resultado de la consulta. El número de la segunda columna es el TTL del recurso en segundos.
El resto de la salida proporciona información sobre los servidores de nombres del dominio, incluyendo los registros NS del servidor junto con los registros A y AAAA de los servidores en el registro NS del dominio.
Al igual que host
, puede especificar un tipo de registro con la opción -t
:
$ dig -t SOA lpi.org ; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> -t SOA lpi.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16695 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 6 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: 185c67140a63baf46c4493215ef8906f7bfbe15bdca3b01a (good) ;; QUESTION SECTION: ;lpi.org. IN SOA ;; ANSWER SECTION: lpi.org. 600 IN SOA dns1.easydns.com. zone.easydns.com. 1593109612 3600 600 1209600 300 ;; AUTHORITY SECTION: lpi.org. 81989 IN NS dns1.easydns.com. lpi.org. 81989 IN NS dns2.easydns.net. lpi.org. 81989 IN NS dns3.easydns.ca. ;; ADDITIONAL SECTION: dns1.easydns.com. 168271 IN A 64.68.192.10 dns2.easydns.net. 165815 IN A 198.41.222.254 dns3.easydns.ca. 107 IN A 64.68.196.10 dns1.easydns.com. 168271 IN AAAA 2400:cb00:2049:1::a29f:1835 dns2.easydns.net. 165815 IN AAAA 2400:cb00:2049:1::c629:defe ;; Query time: 94 msec ;; SERVER: 192.168.1.20#53(192.168.1.20) ;; WHEN: Sun Jun 28 08:43:27 EDT 2020 ;; MSG SIZE rcvd: 298
El comando dig tiene muchas opciones para afinar tanto la salida como la consulta enviada al servidor. Estas opciones comienzan con +
. Una de ellas es la opción short
, que suprime toda la salida excepto el resultado:
$ dig +short lpi.org 65.39.134.165 $ dig +short -t SOA lpi.org dns1.easydns.com. zone.easydns.com. 1593109612 3600 600 1209600 300
Este es un ejemplo de cómo desactivar la extensión de la cookie EDNS:
$ dig +nocookie -t MX lpi.org ; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> +nocookie -t MX lpi.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47774 ;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 3, ADDITIONAL: 5 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;lpi.org. IN MX ;; ANSWER SECTION: lpi.org. 468 IN MX 0 aspmx.l.google.com. lpi.org. 468 IN MX 10 aspmx4.googlemail.com. lpi.org. 468 IN MX 10 aspmx5.googlemail.com. lpi.org. 468 IN MX 10 aspmx2.googlemail.com. lpi.org. 468 IN MX 10 aspmx3.googlemail.com. lpi.org. 468 IN MX 5 alt2.aspmx.l.google.com. lpi.org. 468 IN MX 5 alt1.aspmx.l.google.com. ;; AUTHORITY SECTION: lpi.org. 77130 IN NS dns2.easydns.net. lpi.org. 77130 IN NS dns3.easydns.ca. lpi.org. 77130 IN NS dns1.easydns.com. ;; ADDITIONAL SECTION: dns1.easydns.com. 76140 IN A 64.68.192.10 dns2.easydns.net. 73684 IN A 198.41.222.254 dns1.easydns.com. 76140 IN AAAA 2400:cb00:2049:1::a29f:1835 dns2.easydns.net. 73684 IN AAAA 2400:cb00:2049:1::c629:defe ;; Query time: 2 msec ;; SERVER: 192.168.1.20#53(192.168.1.20) ;; WHEN: Mon Jun 29 10:18:58 EDT 2020 ;; MSG SIZE rcvd: 389
Ejercicios guiados
-
¿Qué hará el siguiente comando?
getent group openldap
-
¿Cuál es la mayor diferencia entre
getent
y las otras herramientas cubiertas,host
ydig
? -
¿Qué opción de
dig
yhost
se utiliza para especificar el tipo de registro que se desea recuperar? -
¿Cuál de las siguientes es una entrada correcta de
/etc/hosts
?::1 localhost
localhost 127.0.0.1
-
¿Qué opción de
getent
se utiliza para especificar qué fuente de datos debe utilizarse para realizar una búsqueda?
Ejercicios de exploración
-
Si usted editara el
/etc/resolv.conf
que aparece a continuación con un editor de texto, ¿qué es probable que ocurra?# Generated by NetworkManager nameserver 192.168.1.20
Los cambios serán sobrescritos por NetworkManager.
NetworkManager actualizará su configuración con sus cambios.
Sus cambios no afectarán al sistema.
NetworkManager se desactivará.
-
¿Qué significa la siguiente línea en
/etc/nsswitch.conf
?hosts: files [SUCCESS=continue] dns
-
Teniendo en cuenta el siguiente
/etc/resolv.conf
¿por qué el sistema no está resolviendo los nombres a través de DNS?search lpi.org #nameserver fd00:ffff::1:53 #nameserver 10.0.1.53
-
¿Qué hace el comando
dig +noall +answer +question lpi.org
? -
¿Cómo puede anular los valores predeterminados de
dig
sin especificarlos en la línea de comandos?
Resumen
El comando getent
es una gran herramienta para ver los resultados de las llamadas a resolver para consultas DNS simples, host
es fácil de usar y produce una salida directa. Si necesitas información detallada o necesitas afinar una consulta DNS, dig
es probablemente tu mejor opción.
Gracias a la posibilidad de añadir plugins de bibliotecas compartidas y configurar el comportamiento de resolver, Linux tiene un excelente soporte para la resolución de nombres y números de varios tipos. El programa getent
puede utilizarse para resolver nombres utilizando las bibliotecas de resolución. Los programas host
y dig
se pueden utilizar para consultar servidores DNS.
El archivo /etc/nsswitch.conf
se utiliza para configurar el comportamiento de resolver. Puede cambiar las fuentes de datos y añadir alguna lógica condicional simple para los tipos de nombre con múltiples fuentes.
El DNS se configura editando /etc/resolv.conf
. Muchas distribuciones tienen herramientas que gestionan este archivo por usted, así que asegúrese de revisar la documentación de su sistema si los cambios manuales no persisten.
El archivo /etc/hosts
se utiliza para resolver nombres de host a IPs y viceversa. Normalmente se utiliza para definir nombres, como localhost
que no están disponibles a través de DNS.
Es posible dejar comentarios en los archivos de configuración tratados en esta lección. Cualquier texto a la derecha de #
es ignorado por el sistema.
Respuesta a los ejercicios guiados
-
¿Qué hará el siguiente comando?
getent group openldap
Leerá
/etc/nsswitch.conf
, buscará el grupoopenldap
de las fuentes listadas y mostrará información sobre él si lo encuentra. -
¿Cuál es la mayor diferencia entre
getent
y las otras herramientas cubiertas,host
ydig
?getent
busca nombres usando las librerías de resolución, los otros sólo consultan el DNS.getent
se puede utilizar para solucionar los problemas de su/etc/nsswitch.conf
y la configuración de las bibliotecas de resolución de nombres que su sistema está configurado para utilizar.host
ydig
se utilizan para buscar registros DNS. -
¿Qué opción de
dig
yhost
se utiliza para especificar el tipo de registro que se desea recuperar?Ambos programas utilizan
-t
para especificar el tipo de registro que se desea buscar. -
¿Cuál de las siguientes es una entrada correcta de
/etc/hosts
?::1 localhost
X
localhost 127.0.0.1
::1 localhost
es la línea correcta. La columna de la izquierda es siempre una dirección IPv4 o IPv6. -
¿Qué opción de
getent
se utiliza para especificar qué fuente de datos debe utilizarse para realizar una búsqueda?La opción
-s
se utiliza para especificar la fuente de datos. Por ejemplo:$ getent -s files hosts learning.lpi.org 192.168.10.25 learning.lpi.org $ getent -s dns hosts learning.lpi.org 208.94.166.198 learning.lpi.org
Respuestas a los ejercicios de exploración
-
Si usted editara el
/etc/resolv.conf
que aparece a continuación con un editor de texto, ¿qué es probable que ocurra?# Generated by NetworkManager nameserver 192.168.1.20
Los cambios serán sobrescritos por NetworkManager.
NetworkManager actualizará su configuración con sus cambios.
Sus cambios no afectarán al sistema.
NetworkManager se desactivará.
-
¿Qué significa la siguiente línea en
/etc/nsswitch.conf
?hosts: files [SUCCESS=continue] dns
Las búsquedas de nombres de host comprobarán primero sus archivos
/etc/hosts
y luego el DNS. Si se encuentra una entrada en los archivos y en el DNS, se utilizará la entrada en el DNS. -
Teniendo en cuenta el siguiente
/etc/resolv.conf
¿por qué el sistema no está resolviendo los nombres a través de DNS?search lpi.org #nameserver fd00:ffff::1:53 #nameserver 10.0.1.53
Ambos servidores DNS están comentados y no hay ningún servidor DNS funcionando en el host local.
-
¿Qué hace el comando
dig +noall +answer +question lpi.org
?Busca el registro A de
lpi.org
y muestra sólo la consulta y la respuesta. -
¿Cómo puede anular los valores predeterminados de
dig
sin especificarlos en la línea de comandos?Creas un archivo
.digrc
en tu directorio personal.