Gibt es eine Möglichkeit, Avahi so einzurichten, dass die Auflösung von Anycast-Namen in einem LAN implementiert wird?

9

Zunächst einige Hintergrundinformationen: Wir haben ein Labor mit einer Handvoll dedizierter Linux-Server, die in einem isolierten LAN ausgeführt werden. Auf allen Servern wird dasselbe Betriebssystem (Debian Linux) und dieselbe proprietäre Serversoftware ausgeführt, und die Serverprozesse kommunizieren miteinander, um ihre Daten synchron zu halten. Dies bedeutet, dass es für Clients keine Rolle spielt, mit welchem ​​Server der Client eine Verbindung herstellt. Jeder Server gibt dieselben Daten zurück wie jeder andere.

Diese Linux-Server führen alle avahi-daemon aus, um mDNS-Hostnamen für sich selbst zu veröffentlichen. Dies bedeutet, dass ein Client beispielsweise " http: //linux-server-1.local " eingeben kann . in seinen Webbrowser und verbinden Sie sich mit Linux Server # 1 und so weiter.

Dies ist alles gut und schön, außer dass ein Benutzer, der auf dem Client-Computer sitzt (normalerweise ein Mac oder Windows-Laptop mit installiertem Bonjour), wissen muss (oder herausfinden muss), welcher der Linux-Server derzeit online ist, und er muss Stellen Sie sicher, dass er eine Verbindung zu einem dieser Geräte herstellt. Wenn beispielsweise Server 2 heute offline ist und der Client " http: //linux-server-2.local " eingibt . In seiner URL-Leiste wird er keine Antwort erhalten. Das ist natürlich nicht das Ende der Welt, aber es ist ärgerlich für Neulinge, die erwarten, dass alles "nur funktioniert", und es macht auch die Entwicklung robuster clientseitiger Skripte komplizierter (seit dem clientseitigen Skript) müsste wissen, wie man explizit mit Offline-Servern umgeht).

Vor diesem Hintergrund lautet meine Frage: Ist es möglich, Avahi so zu konfigurieren, dass auch ein mDNS-Hostnamen-Alias ​​im Anycast-Stil veröffentlicht wird? Das Ziel ist, dass sich jeder mit seinem Laptop hinsetzen und " http: //any-linux-server.local " eingeben kann . (oder ähnlich) und verbinden Sie sich mit einem der Server, die gerade online sind (auch hier spielt es keine Rolle, welcher).

Beachten Sie, dass dies ohne spezielle Konfiguration von Client-Laptops funktionieren muss, da wir keine Kontrolle über diese haben (abgesehen von der Anforderung, dass Bonjour installiert ist).

Beachten Sie auch, dass wir uns nicht auf das Vorhandensein eines separaten Nameservers oder einer Proxy-Box oder auf das Vorhandensein eines bestimmten Linux-Servers verlassen können, da dies zu einem einzelnen Fehlerpunkt führen würde, den wir vermeiden möchten.

Jeremy Friesner
quelle

Antworten:

13

Trent Lloyd hier, einer der Autoren des Avahi-Projekts.

Dies ist theoretisch möglich, aber nicht einfach. Leider hat der Standardmechanismus zum Veröffentlichen eines Hostnamens in Avahi auch einen Reverse-DNS-Eintrag veröffentlicht, der als exklusiv aufgeführt ist. Wenn Sie also versuchen, zwei Hostnamen zu veröffentlichen, die auf dieselbe IP verweisen, tritt ein Konflikt im Reverse-DNS-Eintrag auf.

Dies ist möglich, wenn Sie die Avahi-API verwenden, um einen A-Datensatz manuell zu veröffentlichen und ihn als nicht exklusiv zu markieren. Sie müssten für jeden Server in Python, C oder ähnlichem einen kleinen Hintergrundprozess schreiben.

Der zu verwendende API-Aufruf lautet avahi_entry_group_add_record, und Sie müssen AVAHI_PUBLISH_ALLOW_MULTIPLE an das Feld flags übergeben. Dies sollte dann funktionieren.

Eine Alternative besteht darin, die Diensterkennung so zu verwenden, wie sie beabsichtigt war, und jeden Client einen HTTP-Dienst veröffentlichen zu lassen und ein Firefox-Plugin oder ähnliches zu verwenden, um angekündigte Webdienste zu durchsuchen. Oder eine andere Art von Service-Browser.

Bonjour hat früher ein Plugin für Internet Explorer eingefügt, um dies wie eine Lesezeichenleiste zu tun. Ich bin mir nicht sicher, ob dies immer noch der Fall ist.

Trent Lloyd
quelle
2
Ich habe es zum Laufen gebracht, danke! Falls jemand interessiert ist, habe ich den C-Quellcode hier gepostet: public.msli.com/lcs/jaf/publish_cnames.c
Jeremy Friesner
Hm. das scheint mit neueren Versionen von avahi nicht zu funktionieren :( Das Programm druckt, dass es die Namen erfolgreich veröffentlicht hat, aber sie werden nicht angezeigt, wenn sie von einem anderen Host im Netzwerk aus surfen.
Frederick Nord