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

Instalar Code::Blocks en español

Introducción Code::Blocks es un IDE libre diseñado para la programación de C, C++ y FORTRAN construido para proveer las necesidades más demandadas por sus usuarios. Está diseñado para ser muy extensible y totalmente configurable. Está diseñado a partir de un marco de trabajo de extensiones, por lo que puede ser ampliado mediante la instalación de las mismas. De hecho, las funcionalidades de compilación y depuración son extensiones. En este artículo, voy a explicar como instalar el Code::Blocks en un sistema con el Ubuntu 21.10 instalado. La versión de Code::Blocks que hay en los repositorios es la 20.03. Además, explicaré como poner su interfaz en español. Instalando pre-requisitos En primer lugar hemos de asegurarnos que tenemos instalados el compilador y las herramientas de depuración. Por lo que ejecutaremos en una terminal $sudo apt install build-essential gdb Con esto ya es suficiente para el C y C++. Instalando el paquete de Code::Blocks En una distribució

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 programación.

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 desarrollo predeterm