Existe-t-il un moyen de configurer Avahi pour implémenter la «résolution de nom anycast» sur un LAN?

9

Tout d'abord, quelques informations: nous avons un laboratoire contenant une poignée de serveurs Linux dédiés qui s'exécutent sur un réseau local isolé. Tous les serveurs exécutent le même système d'exploitation (Debian Linux) et le même logiciel serveur propriétaire, et les processus serveur communiquent entre eux pour garder leurs données synchronisées. Cela signifie qu'en ce qui concerne les clients, peu importe le serveur auquel le client se connecte - tout serveur renverra les mêmes données que les autres.

Ces serveurs Linux exécutent tous avahi-daemon pour publier eux-mêmes les noms d'hôte mDNS, ce qui signifie qu'un client peut entrer par exemple " http: //linux-server-1.local ". dans son navigateur Web et connectez-vous au serveur Linux n ° 1, etc.

C'est bien beau, sauf que cela signifie qu'un utilisateur assis sur la machine cliente (généralement un ordinateur portable Mac ou Windows avec Bonjour installé) doit savoir (ou comprendre) quels serveurs Linux sont actuellement en ligne, et il doit assurez-vous qu'il se connecte à l'un d'eux. Par exemple, si le serveur n ° 2 est hors ligne aujourd'hui et que le client entre « http: //linux-server-2.local ». dans sa barre d'URL, il ne recevra pas de réponse. Ce n'est pas la fin du monde, bien sûr, mais c'est ennuyeux pour les utilisateurs débutants qui s'attendent à ce que tout "fonctionne", et cela complique également le développement de scripts côté client robustes (puisque le script côté client aurait besoin de savoir comment gérer explicitement les serveurs hors ligne).

Dans cet esprit, ma question est la suivante: est-il possible de configurer Avahi pour publier également un alias de nom d'hôte mDNS de style anycast? Le but est que n'importe qui puisse s'asseoir avec son ordinateur portable, entrez " http: //any-linux-server.local ". (ou similaire), et connectez-vous à l'un des serveurs actuellement en ligne (là encore, peu importe lequel).

Notez que cela doit fonctionner sans aucune configuration spéciale des ordinateurs portables clients, car nous n'avons aucun contrôle sur eux (à part l'exigence qu'ils ont Bonjour installé).

Notez également que nous ne pouvons pas compter sur la présence d'un serveur de noms ou d'un boîtier proxy séparé, ou sur la présence d'un serveur Linux particulier, car cela introduirait un point de défaillance unique, que nous essayons d'éviter.

Jeremy Friesner
la source

Réponses:

13

Trent Lloyd ici, l'un des auteurs du projet Avahi.

C'est théoriquement possible, mais ce n'est pas facile à faire. Malheureusement, le mécanisme par défaut de publication d'un nom d'hôte dans Avahi a également publié un enregistrement DNS inversé qui est répertorié comme exclusif. Ainsi, si vous essayez de publier 2 noms d'hôtes pointant vers la même IP, vous obtenez un conflit sur l'enregistrement DNS inversé.

Il est possible de le faire si vous utilisez l'API Avahi pour publier manuellement un enregistrement A et le marquer comme non exclusif. Vous devrez écrire un petit processus d'arrière-plan pour chaque serveur en Python, C ou similaire.

L'appel d'API à utiliser est avahi_entry_group_add_record, et vous devez passer AVAHI_PUBLISH_ALLOW_MULTIPLE dans le champ flags. Cela devrait alors fonctionner.

Une alternative consiste à utiliser la découverte de service de la manière prévue, et à ce que chaque client publie un service HTTP, et utilise un plug-in Firefox ou similaire pour parcourir les services Web annoncés. Ou un autre type de navigateur de service.

Bonjour incluait un plugin pour Internet Explorer pour le faire comme une barre de signets, je ne sais pas si c'est toujours le cas.

Trent Lloyd
la source
2
Je l'ai fait fonctionner, merci! Au cas où quelqu'un serait intéressé, j'ai publié le code source C ici: public.msli.com/lcs/jaf/publish_cnames.c
Jeremy Friesner
hm. cela ne semble pas fonctionner avec les versions plus récentes d'avahi :( Le programme affiche qu'il a publié avec succès les noms, mais ils n'apparaissent pas lors de la navigation à partir d'un autre hôte sur le réseau.
Frederick Nord