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

Virtualización con KVM

Introducción NOTA : este artículo fue publicado inicialmente el 17/06/2013. Posteriormente se añadieron apuntes correctivos con respecto a la distribución Ubuntu 20.04. Desde hace unos años se viene hablando en informática del concepto de Virtualización como forma de ahorrar costes en las empresas aprovechando al máximo los recursos hardware de que dispone.  La virtualización consiste en una abstracción de los recursos de una computadora, creando una capa intermedia entre el hardware de la máquina física y el sistema operativo de la máquina virtual, dividiendo los recursos entre varios entornos de ejecución. Entre los distintos distribuidores de software para la virtualización, el líder indiscutible a día de hoy es VMware , qué distribuye una solución propietaria, y muy completa. Sin embargo, en el mundo del software libre, existe una alternativa muy buena al software de virtualización de VMware . Esta alternativa es KVM . KVM, siglas de Kernel-based Virtual Machin...

Gestión de la red usando la línea de comandos (II): rutas persistentes

  Introducción Esta será la segunda entrada de la serie de artículos referentes a la gestión de la red en la línea de comandos de Linux. Concretamente, en esta entrada voy a explicar tres métodos para dejar configuradas rutas persistentes en nuestro Ubuntu. Las pruebas de campo las he hecho en una máquina virtual con Ubuntu Desktop 22.04 instalado. Pero lo explicado es válido para cualquier sabor de Ubuntu, incluido el Ubuntu Server. Ejecutar una tarea programada En Linux en general y, por tanto, también en Ubuntu, existe la posibilidad de programar tareas. Las tareas son ejecutadas por el demonio cron  y tienen que ser definidas usando el comando crontab . Para conocer más sobre el sistema de programación de tareas programadas les recomiendo mirar las páginas del manual: man cron , man crontab , man 5 crontab ... En este último se explica la estructura de un fichero crontab . Lo primero que tenemos que hacer es crear nuestro script que luego se ejecutará en la programación de...