C'è un modo per impostare Avahi per implementare la "risoluzione dei nomi anycast" su una LAN?


9

Innanzitutto, alcuni retroscena: abbiamo un laboratorio contenente una manciata di server Linux dedicati che funzionano su una LAN isolata. Tutti i server eseguono lo stesso sistema operativo (Debian Linux) e lo stesso software server proprietario, ei processi del server comunicano tra loro per mantenere sincronizzati i loro dati. Ciò significa che, per quanto riguarda qualsiasi client, non importa a quale server si connette il client - qualsiasi server restituirà gli stessi dati di qualsiasi altro.

Tutti questi server Linux eseguono avahi-daemon per pubblicare nomi host mDNS autonomamente, il che significa che un client può inserire ad esempio " http: //linux-server-1.local ". nel suo browser Web e connettersi al server Linux n. 1 e così via.

Tutto questo va bene, tranne per il fatto che un utente seduto sul computer client (in genere un laptop Mac o Windows con Bonjour installato) deve sapere (o capire) quali server Linux sono attualmente online, e deve assicurati che si colleghi a uno di quelli. Ad esempio, se il server n. 2 non è in linea oggi e il client immette " http: //linux-server-2.local ". nella sua barra degli URL, non otterrà una risposta. Ovviamente non è la fine del mondo, ma è fastidioso per gli utenti inesperti che si aspettano che tutto funzioni "semplicemente", e rende anche più complicato lo sviluppo di potenti script lato client (dal momento che lo script lato client dovrebbe sapere come gestire esplicitamente i server offline).

Con questo in mente, la mia domanda è questa: è possibile configurare Avahi per pubblicare anche un alias hostname mDNS in stile anycast? L'obiettivo è che chiunque possa sedersi con il suo laptop, inserire " http: //any-linux-server.local ". (o simile) e connettersi a uno dei server attualmente in linea (di nuovo, non importa quale).

Si noti che questo deve funzionare senza alcuna configurazione speciale dei laptop client, poiché non abbiamo alcun controllo su di essi (a parte il requisito che hanno installato Bonjour).

Si noti inoltre che non possiamo fare affidamento sulla presenza di un nameserver o proxy box separato o sulla presenza di un particolare server Linux, poiché ciò introdurrebbe un singolo punto di errore, che stiamo cercando di evitare.

Risposte:


13

Trent Lloyd qui, uno degli autori del progetto Avahi.

In teoria questo è possibile, ma non è facile da fare. Sfortunatamente il meccanismo predefinito per pubblicare un nome host in Avahi, ha anche pubblicato un record DNS inverso che è elencato come esclusivo. Pertanto, se si tenta di pubblicare 2 nomi host che puntano allo stesso IP, si ottiene un conflitto sul record DNS inverso.

È possibile farlo se si utilizza l'API Avahi per pubblicare manualmente un record A e contrassegnarlo come non esclusivo. Dovresti scrivere un piccolo processo in background per ogni server in Python, C o simile.

La chiamata API da utilizzare è avahi_entry_group_add_record ed è necessario passare AVAHI_PUBLISH_ALLOW_MULTIPLE nel campo flags. Questo dovrebbe quindi funzionare.

Un'alternativa consiste nell'utilizzare il rilevamento del servizio nel modo in cui era previsto e fare in modo che ciascun client pubblichi un servizio HTTP e utilizzare un plug-in firefox o simile per esplorare i servizi Web annunciati. O qualche altro tipo di browser di servizio.

Bonjour includeva un plugin per Internet Explorer per fare questo come una barra dei segnalibri, non sono sicuro che lo sia ancora.


2
L'ho fatto funzionare, grazie! Nel caso qualcuno fosse interessato, ho pubblicato il codice sorgente C qui: public.msli.com/lcs/jaf/publish_cnames.c
Jeremy Friesner,

hm. che sembra non funzionare con le versioni più recenti di avahi :( Il programma stampa di aver pubblicato correttamente i nomi, ma non vengono visualizzati durante la navigazione da un altro host sulla rete.
Frederick Nord,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.