Ir al contenido principal

Gestión de la red usando la línea de comandos (III): gestión DNS

 


Introducción

En este nuevo artículo de la serie vamos a hablar de la gestión del DNS, Domain Name System. El sistema de resolución de nombres nos permite traducir los nombres de los dominios de Internet en direcciones IP númericas. Más difíciles de recordar para los humanos. 
El DNS fue concebido a mediados de los años 80. Hasta esa época, los ordenadores conectados a una red disponían de una dirección numérica, la dirección IP. Pero con el tiempo, cada vez había más ordenadores conectados a las redes. Esto hacía que cada vez fuera más difícil recordar las direcciones IP. Sobre el año 1983, Paul Mockapetris, un informático estadounidense, desarrolló un sistema jerárquico de nombres para identificar a los ordenadores conectados a una red. Y, a mediados de la década, ya se convirtió en un estándar. Pueden consultar más información sobre el sistema DNS consultando el artículo de la Wikipedia: Sistema de nombres de dominio.
En este artículo, no vamos a explicar como montar un servidor DNS para nuestra red. Sino que vamos a explicar algunas de las herramientas de que disponemos en un sistema con Ubuntu 22.04 LTS instalado para identificar problemas en la resolución de nombres.

Cómo saber que DNS tenemos configurado

Antes de la versión de Ubuntu 12.04 el DNS se configuraba en el fichero /etc/resolv.conf cuando se configuraba la dirección IP en modo estático. Para la configuración del servidor DNS de forma dinámica se usaba, y se sigue usando, el protocolo DHCP. Por aquellos tiempos, consultar el DNS que teníamos configurado era tan sencillo como utilizar la orden nslookup. Así, si consultábamos una dirección con el comando nslookup en la salida se nos mostraba el servidor DNS configurado.
Como podemos observar, en la salida del comando nslookup actualmente se muestra como servidor DNS 127.0.0.53, que es donde escucha el demonio NetWorkManager.
A partir de la 12.04 se implementó la gestión de la red usando el demonio NetworkManager, incluida la definición del DNS del sistema. NetworkManager fue desarrollado por RedHat con el objetivo de permitir a los usuarios de Linux lidiar con las modernas necesidades de redes, especialmente con las redes inalámbricas. NetworkManager selecciona la conexión de red que esté disponible priorizando la red cableada antes que la inalámbrica. Entre las redes inalámbricas prioriza las conocidas, que se han guardado previamente, sobre las desconocidas. Si finalmente no encuentra ninguna red inalámbrica conocida pregunta por las credenciales para acceder a la que el usuario seleccione entre las desconocidas.

Comando nmcli

Para interactuar con el demonio de NetworkManager disponemos de la utilidad de línea de comandos nmcli. Así, si ejecutamos el comando:
$nmcli -a dev show

Vemos que se nos muestra la información de todos los dispositivos de red configurados en nuestro sistema. Estén actualmente conectados o no. Si sólo queremos el DNS configurado en una interfaz de red determinada, ejecutaríamos:
$nmcli -g IP4.DNS -a dev show <nombre interfaz>
Siendo <nombre interfaz> el nombre de la interfaz que queremos consultar. Si se omite mostrará los de todas las interfaces. Aunque todas las líneas estarán en blanco excepto la correspondiente a la interfaz o interfaces conectadas.

Comando resolvectl

Otro modo de obtener el DNS actualmente configurado es con el comando resolvectl, que ya viene preinstalado en Ubuntu 22.04. Resolvectl es una utilidad  de línea de comandos englobada en el paquete systemd. Con ella podremos resolver nombres de dominio, direcciones IPV4 e IPv6, recursos DNS registros y servicios; introspección y reconfiguración de la resolución de DNS (tal y como se especifica en su página del manual: man resolvectl). Así, por ejemplo, si queremos resolver una dirección URL ejecutaríamos
$resolvectl query www.canarisoft.es
Si queremos ver el DNS configurado en el sistema:
$resolvectl
Si queremos saber el estado del servicio y, al ser éste parte del paquete systemd, lo podemos saber usando el comando:
$systemctl status systemd-resolved
También podemos, con este comando, establecer el DNS que queremos usar en una interfaz en concreto con el comando:
$sudo resolvectl dns wlpXXs0 8.8.8.8
Donde wlpXXs0 es el nombre de la interfaz y 8.8.8.8 es la dirección del DNS, en este caso, el de Google. 
Hay que tener en cuenta que el servidor DNS así establecido es provisional hasta que se reinicie el sistema. Si queremos que el cambio sea definitivo tenemos que especificar el DNS en el fichero /etc/systemd/resolved.conf, especificando la dirección del DNS principal en la línea DNS=, que habrá que descomentar, y el DNS secundario en la línea FallbackDNS=. El contenido por defecto de este fichero es el que se puede ver en la siguiente captura:

Conclusión

Después de leer el artículo ya conocemos un poco más cómo manejarnos con una parte tan importante de las redes como es la resolución de nombres.
Como siempre, recomiendo encarecidamente consultar la página del manual de los comandos que voy mostrando si queremos conocer todas sus posibilidades. Concretamente para resolvectl existen opciones que nos permiten, por ejemplo, vaciar la caché del DNS, mostrar estadísticas, monitorear la peticiones DNS del equipo local, etc.

Comentarios

Entradas populares de este blog

Atom ha muerto, viva Zed

El día 8 de junio de 2022, Microsoft anunció que a partir del día 31 de diciembre de este mismo año dejaría de dar soporte para el editor de código Atom .  ¿En qué nos afecta esto a nosotros? Bueno, pues si me han seguido en artículos anteriores saben que tras una comparativa de varios IDEs había decidido utilizar Atom para los ejemplos que tuviera que hacer en este blog. Sobre todo los artículos que prepararé para ilustrar el uso de Laravel . Amén de los miles de programadores que actualmente usan Atom  en sus proyectos, claro. Pero, ¿qué editor de código abierto podremos utilizar para sustituir a Atom ? En el mismo comunicado, Microsoft explicaba que el abandono del proyecto Atom  se debía a que querían volcar todos sus esfuerzos en el Visual Studio Code y, por supuesto, recomendó a los usuarios de Atom la utilización del mismo como alternativa natural. No quiero entrar en las bondades o defectos del Visual Studio Code  si quieres elegirlo como tu IDE para d...

Gestión de la red usando la línea de comandos (IV): monitorización de conexiones

  Introducción En este artículo de la serie de gestión de la red usando la línea de comandos nos vamos a centrar en la monitorización de las conexiones. Para ello vamos a utilizar el comando netstat , que es el decano de los comandos de monitorización de la red. También mostraremos el comando ss , que viene a sustituir a netstat  en las funciones de monitorización de conexiones de red. Asimismo mostraré una breve explicación de los conceptos que se van a trabajar en el artículo. S ockets, puertos, protocolos y procesos En primer lugar vamos a empezar con un poco de teoría para alumbrar lo que luego se explicará en el artículo. Si ya sabes de lo que estamos hablando, sáltate esta sección y ve al meollo del asunto [1] . Nos referiremos al contexto de la conexiones TCP/IP. Dentro de este contexto, cada conexión queda definida por dos endpoints , puntos finales, uno en el host , equipo, que establece la conexión y otro en el host con el que se comunica. Generalmente este último es...