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

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...

Zed: ahora un editor de código de código abierto

  Zed: ahora un editor de código de código abierto Introducción Como ya les comenté en un artículo anterior  Atom ha muerto, viva ZED , Microsoft dejó de dar soporte para el editor de código Atom en el año 2022 en beneficio del Visual Studio Code . En aquel artículo les comentaba que para mi el sucesor de Atom era Zed pues era un editor que se estaba creando por el mismo grupo de trabajo que creó el Atom . Además de que parecía que iba a seguir con la misma filosofía con la que nació  Atom . El editor Zed, una descripción de sus características Zed es un editor de código desarrollado en Rust que, como deberíamos saber, es un lenguaje de programación de sistemas que se enfoca en la seguridad, el rendimiento y la concurrencia. Pues, como decíamos, Zed acaba de dar el salto a ser de código abierto bajo la licencia GPL v3 . Este cambio no solo representa una nueva era para Zed , sino que también nos dirige a un nuevo mundo de colaboración y desarrollo en el ámbito de la...