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
$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
Publicar un comentario