Czy istnieje sposób skonfigurowania Avahi do implementacji „rozpoznawania nazw anycast” w sieci LAN?

9

Po pierwsze, pewne tło: mamy laboratorium zawierające garść dedykowanych serwerów Linux, które działają w odizolowanej sieci LAN. Wszystkie serwery działają w tym samym systemie operacyjnym (Debian Linux) i tym samym zastrzeżonym oprogramowaniu serwerowym, a procesy serwera komunikują się ze sobą w celu synchronizacji danych. Oznacza to, że dla każdego klienta nie ma znaczenia, z którym serwerem klient się łączy - każdy serwer zwróci te same dane, co każdy inny.

Wszystkie te serwery Linux uruchamiają demona avahi, aby same publikować nazwy hostów mDNS, co oznacza, że ​​klient może wprowadzić np. „ Http: //linux-server-1.local ”. do swojej przeglądarki internetowej i połącz się z serwerem Linux nr 1 i tak dalej.

To wszystko dobrze i dobrze, z tym wyjątkiem, że użytkownik siedzący na komputerze klienckim (zwykle Mac lub Windows z zainstalowanym Bonjour) musi wiedzieć (lub dowiedzieć się), które serwery Linux są obecnie online, i musi upewnij się, że łączy się z jednym z nich. Na przykład, jeśli serwer nr 2 jest dzisiaj offline, a klient wprowadza „ http: //linux-server-2.local ”. na pasku adresu URL nie uzyska odpowiedzi. To oczywiście nie koniec świata, ale jest denerwujący dla początkujących użytkowników, którzy oczekują, że wszystko „po prostu zadziała”, a także utrudnia rozwój solidnego skryptu po stronie klienta (od skryptu po stronie klienta musiałby wiedzieć, jak jawnie radzić sobie z serwerami offline).

Mając to na uwadze, moje pytanie brzmi: czy można skonfigurować Avahi do publikowania także aliasu nazwy hosta mDNS w stylu anycast? Celem jest, aby każdy mógł usiąść ze swoim laptopem i wpisać „ http: //any-linux-server.local ”. (lub podobny) i połącz się z jednym z serwerów, który jest aktualnie online (ponownie, nie ma znaczenia, który z nich).

Pamiętaj, że musi to działać bez specjalnej konfiguracji laptopów klienckich, ponieważ nie mamy nad nimi kontroli (poza wymogiem zainstalowania Bonjour).

Zauważ też, że nie możemy polegać na obecności oddzielnego serwera nazw lub serwera proxy ani na żadnym konkretnym serwerze Linux, ponieważ spowodowałoby to jeden punkt awarii, którego staramy się uniknąć.

Jeremy Friesner
źródło

Odpowiedzi:

13

Trent Lloyd tutaj, jeden z autorów projektu Avahi.

Jest to teoretycznie możliwe, ale nie jest to łatwe. Niestety, domyślny mechanizm publikowania nazwy hosta w Avahi, również opublikował rekord odwrotnego DNS, który jest wymieniony jako wyłączny. Dlatego jeśli spróbujesz opublikować 2 nazwy hostów wskazujące na ten sam adres IP, wystąpi konflikt na odwrotnym rekordzie DNS.

Można to zrobić, jeśli użyjesz interfejsu API Avahi, aby ręcznie opublikować rekord A i oznaczyć go jako niewyłączny. Będziesz musiał napisać mały proces w tle dla każdego serwera w języku Python, C lub podobnym.

Wywołanie API do użycia to avahi_entry_group_add_record, i musisz przekazać AVAHI_PUBLISH_ALLOW_MULTIPLE do pola flagi. To powinno wtedy działać.

Alternatywą jest użycie funkcji wykrywania usług w sposób, w jaki był przeznaczony, i poproszenie każdego klienta o opublikowanie usługi HTTP oraz użycie wtyczki Firefox lub podobnego narzędzia do przeglądania ogłoszonych usług internetowych. Lub inna przeglądarka usług.

Bonjour zawierał wtyczkę do Internet Explorera, aby zrobić to jak pasek zakładek, nie jestem pewien, czy nadal tak jest.

Trent Lloyd
źródło
2
Mam to do pracy, dzięki! Jeśli ktoś jest zainteresowany, opublikowałem kod źródłowy C tutaj: public.msli.com/lcs/jaf/publish_cnames.c
Jeremy Friesner
hm. wydaje się, że nie działa z nowszymi wersjami avahi :( Program drukuje, że z powodzeniem opublikował nazwy, ale nie pojawiają się podczas przeglądania z innego hosta w sieci
Frederick Nord,