¿Hay alguna manera de configurar Avahi para implementar la "resolución de nombre anycast" en una LAN?

9

Primero, algunos antecedentes: tenemos un laboratorio que contiene un puñado de servidores Linux dedicados que se ejecutan en una LAN aislada. Todos los servidores ejecutan el mismo sistema operativo (Debian Linux) y el mismo software de servidor propietario, y los procesos del servidor se comunican entre sí para mantener sus datos sincronizados. Eso significa que, en lo que respecta a los clientes, no importa a qué servidor se conecte el cliente; cualquier servidor devolverá los mismos datos que cualquier otro.

Todos estos servidores Linux ejecutan avahi-daemon para publicar nombres de host mDNS por sí mismos, lo que significa que un cliente puede ingresar, por ejemplo, " http: //linux-server-1.local ". en su navegador web y conectarse al servidor Linux # 1, y así sucesivamente.

Esto está muy bien, excepto que significa que un usuario sentado en la máquina del cliente (generalmente una computadora portátil Mac o Windows con Bonjour instalado) tiene que saber (o averiguar) cuáles de los servidores Linux están actualmente en línea, y tiene que asegúrese de que se conecte a uno de esos. Por ejemplo, si el servidor # 2 está fuera de línea hoy y el cliente ingresa " http: //linux-server-2.local ". en su barra de URL, no va a obtener una respuesta. Ese no es el fin del mundo, por supuesto, pero es molesto para los usuarios novatos que esperan que todo "simplemente funcione", y también hace que el desarrollo de scripting robusto del lado del cliente sea más complicado (ya que el script del lado del cliente necesitaría saber cómo tratar con servidores fuera de línea explícitamente).

Con eso en mente, mi pregunta es la siguiente: ¿es posible configurar Avahi para publicar un alias de nombre de host mDNS de estilo anycast también? El objetivo es que cualquiera pueda sentarse con su computadora portátil, ingrese " http: //any-linux-server.local ". (o similar), y conéctese a uno de los servidores que están actualmente en línea (de nuevo, no importa cuál).

Tenga en cuenta que esto debe funcionar sin ninguna configuración especial de las computadoras portátiles del cliente, ya que no tenemos control sobre ellas (aparte del requisito de que tengan instalado Bonjour).

También tenga en cuenta que no podemos confiar en la presencia de un servidor de nombres o cuadro de proxy por separado, o en la presencia de un servidor Linux en particular, ya que eso introduciría un único punto de falla, que estamos tratando de evitar.

Jeremy Friesner
fuente

Respuestas:

13

Trent Lloyd aquí, uno de los autores del proyecto Avahi.

En teoría, esto es posible, pero no es fácil de hacer. Desafortunadamente, el mecanismo predeterminado para publicar un nombre de host en Avahi, también publicó un registro de DNS inverso que aparece como exclusivo. Por lo tanto, si intenta publicar 2 nombres de host que apuntan a la misma IP, obtendrá un conflicto en el registro DNS inverso.

Es posible hacer esto si usa la API de Avahi para publicar manualmente un registro A y marcarlo como no exclusivo. Tendría que escribir un pequeño proceso en segundo plano para cada servidor en Python, C o similar.

La llamada API a utilizar es avahi_entry_group_add_record, y debe pasar AVAHI_PUBLISH_ALLOW_MULTIPLE al campo de banderas. Esto debería funcionar.

Una alternativa es usar el descubrimiento del servicio de la manera en que fue diseñado, y hacer que cada cliente publique un servicio HTTP, y use un complemento de Firefox o similar para navegar por los servicios web anunciados. O algún otro tipo de navegador de servicios.

Bonjour solía incluir un complemento para Internet Explorer para hacer esto como una barra de marcadores, no estoy seguro de si todavía lo hace.

Trent Lloyd
fuente
2
Lo tengo a trabajar, gracias! En caso de que alguien esté interesado, he publicado el código fuente C aquí: public.msli.com/lcs/jaf/publish_cnames.c
Jeremy Friesner
hm. eso no parece funcionar con las versiones más recientes de avahi :( El programa imprime que ha publicado con éxito los nombres, pero no aparecen cuando navega desde otro host en la red.
Frederick Nord