Avahi es un software libre y de código abierto que implementa el protocolo de descubrimiento de servicios de red mDNS/DNS-SD. Este protocolo permite a los dispositivos en una red local descubrir y anunciarse a sí mismos y a los servicios que ofrecen sin necesidad de configuración manual.
Avahi es un demonio en sistemas operativos Linux, y es compatible con otros sistemas operativos, incluidos macOS y Windows, y se integra con otros servicios de red para proporcionar un mecanismo de descubrimiento y resolución de nombres de servicio para dispositivos y aplicaciones en la red local. Avahi se utiliza comúnmente para la detección automática de impresoras, archivos compartidos, servicios de música y otros recursos de red en sistemas Linux y otros dispositivos integrados, sobre todo para las primeras instalaciones o cuando el dueño es lo suficientemente vago como para no terminar de configurarlo bien.
¿Y esto da problemas?
Pues la verdad es que sí, no solo por lo del dueño vago o del administrador descuidado, sobre todo cuando uso un TLD.
El servicio “Name Service Switch” y el archivo nsswitch.conf se utiliza para especificar qué fuentes de información se deben consultar primero para obtener información de nombres de usuario, DNS, contraseñas, grupos, hosts, etc…
El problema está en la prioridad que se le da en el orden de búsqueda de DNS dentro del fichero nsswitch.conf
.
Habrá que configurarlo
La configuración de nsswitch.conf
puede variar según la distribución de Linux y la versión del sistema operativo. La modificación incorrecta del archivo puede hacer que el sistema operativo no funcione correctamente, así que hay que saber lo que se toca.
En mi experiencia con los sistemas tipo red-hat (Fedora, Centos…) los paquetes que se instalan son avahi
y sus dependencias, y nss-mdns
.
En los armbian que tengo por casa, y me imagino que Debian y familia, son avahi-daemon
y libnss-mdns
.
Ojo, esto no está escrito en piedra y hay otras combinaciones.
Activar mDNS
Según lo clásico, lo que se nos enseña siempre en Unix, y Linux, es que el fichero /etc/nsswitch.conf
contiene esta línea base:
hosts: files dns
Que quiere decir que primero se revisen los ficheros locales y luego se le pregunte al DNS.
Eso es el comportamiento esperado en una máquina normal.
Pero claro, esa funcionalidad se queda corta a la espera de DNS dinámico de mDNS y de los Service Discovery.
Tengo un micro pc basado en una BananaPi M2U que tiene Armbian, y está en una carcasa de un viejo router, muy escondidita.
En Armbian, basta por editar el fichero /etc/nsswitch.conf
y en la línea 12, sustituir la línea:
hosts: files mymachines dns myhostname
por la línea:
hosts: files mymachines mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns myhostname
Bien, eso es lo que dice la documentación y la inmensa mayoría de los foros que hay que poner para que zeroconf funcione.
De esta manera se harán resoluciones de nombres a través de mdns (IPv4).
¿Y en Fedora, Red-Hat y derivados?
Pero en Fedora no, no es así, y ahí vamos a tocar el hardening del sistema operativo, así que continuaré en un próximo artículo, pero dejo por aquí una pequeña muestra de como se ve esto:
Desde un cliente cualquiera, localizar la bbdd, y un par de máquinas vecinas, funciona bien, como se le espera al servicio mDNS y de paso, al DNS-SD.
[samquejo@fedora ~]$ getent hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[samquejo@fedora ~]$ getent hosts labsam-3.local
203.0.113.111 labsam-3.local
[samquejo@fedora ~]$ getent hosts cpe1704tks.local
203.0.113.115 cpe1704tks.local
En cambio, en un servidor DNS, que es propietario de la zona yovirtualizador.xyz
resuelve las direcciones que tiene, y si no las encuentra, pasa directamente al CNAME del dominio. Es decir, que consulta antes DNS que mDNS, por seguridad.
root@petete:~# getent hosts fedora
100.127.255.255 labsam.duckdns.org fedora.yovirtualizador.xyz
root@petete:~# getent hosts fedora.local
100.127.255.255 labsam.duckdns.org fedora.local.yovirtualizador.xyz
root@petete:~# getent hosts cpe1704tks.local
100.127.255.255 labsam.duckdns.org cpe1704tks.local.yovirtualizador.xyz
root@petete:~# getent hosts cpe1704tks
100.127.255.255 labsam.duckdns.org cpe1704tks.yovirtualizador.xyz
Ahora toca seguir, con el hardening de linux, y corrigiendo este comportamiento por el bien del funcionamiento de mi red local
YoVirtualizador en formato podcast. Ahora también en Sospechosos Habituales: https://feedpress.me/sospechososhabituales
Y sin más, os dejo los enlaces:
Web: https://www.yovirtualizador.com
Grupo de telegram: https://t.me/grupovirtualizador
Podcast: https://www.ivoox.com/podcast-yovirtualizador_fg_f1563806_filtro_1.xml
Canal de youtube: https://www.youtube.com/channel/UC0R70cABSsmC6TFyXth0qPg
Enlace de afiliados de amazon: https://amzn.to/3gX3HmK
Enlace de referidos de la Asociación Podcast: https://www.asociacionpodcast.es/registrarse/socio/?coupon=SB6A70