Avahi'yi LAN üzerinde “anycast ad çözümlemesi” uygulamak üzere kurmanın bir yolu var mı?


9

İlk olarak, biraz arka plan: Yalıtılmış bir LAN üzerinde çalışan bir avuç ayrılmış Linux sunucusu içeren bir laboratuvarımız var. Tüm sunucular aynı işletim sistemini (Debian Linux) ve aynı tescilli sunucu yazılımını çalıştırır ve sunucu işlemleri, verilerini senkronize tutmak için birbirleriyle iletişim kurar. Bu, herhangi bir istemciye gelince, istemcinin hangi sunucuya bağlandığı önemli değildir - herhangi bir sunucu diğerleriyle aynı verileri döndürür.

Bu Linux sunucularının tümü, mDNS ana bilgisayar adlarını kendileri yayınlamak için avahi-daemon'u çalıştırır; bu, bir istemcinin örneğin " http: //linux-server-1.local " girebileceği anlamına gelir . ve 1 numaralı Linux sunucusuna bağlanın.

İstemci makinede oturan bir kullanıcının (tipik olarak Bonjour yüklü bir Mac veya Windows dizüstü bilgisayar) Linux sunucularından hangilerinin şu anda çevrimiçi olduğunu bilmesi (veya çözmesi) anlamına gelmesi ve bunlardan birine bağlandığından emin olun. Örneğin, sunucu # 2 bugün çevrimdışıysa ve istemci " http: //linux-server-2.local " girerse . URL çubuğuna bir yanıt alamayacak. Bu elbette dünyanın sonu değil, ancak her şeyin "sadece çalışmasını" bekleyen yeni başlayanlar için can sıkıcı ve aynı zamanda sağlam istemci tarafı komut dosyası geliştirmeyi daha karmaşık hale getiriyor (istemci tarafı komut dosyası çevrimdışı sunucularla nasıl başa çıkılacağını bilmeniz gerekir).

Bunu aklımda tutarak sorum şu: Avahi'yi herhangi bir yayın tarzı mDNS ana bilgisayar adı takma adı yayınlayacak şekilde yapılandırmak mümkün mü? Amaç, herkes dizüstü bilgisayarıyla oturup " http: //any-linux-server.local " girebilmesidir . (veya benzeri) ve şu anda çevrimiçi olan sunuculardan birine bağlanın (yine hangisi olduğu önemli değil).

Bunun üzerinde herhangi bir özel kontrolümüz olmadığından (Bonjour'un yüklü olması şartı dışında), istemci dizüstü bilgisayarların herhangi bir özel yapılandırması olmadan çalışması gerektiğini unutmayın.

Ayrıca, ayrı bir ad sunucusu veya proxy kutusunun varlığına veya herhangi bir Linux sunucusunun varlığına güvenemeyeceğimize dikkat edin, çünkü bu kaçınmaya çalıştığımız tek bir hata noktası getirecektir.

Yanıtlar:


13

Trent Lloyd burada, Avahi projesinin yazarlarından biri.

Bu teoride mümkündür, ancak bunu yapmak kolay değildir. Ne yazık ki Avahi'de bir ana bilgisayar adı yayınlamak için varsayılan mekanizma, özel olarak listelenen bir ters DNS kaydı da yayınladı. Böylece, aynı IP'yi işaret eden 2 ana bilgisayar adını denerseniz ve yayınlarsanız, ters DNS kaydında bir çakışma oluşur.

Bir A kaydını manuel olarak yayınlamak ve münhasır olmayan olarak işaretlemek için Avahi API'sını kullanırsanız bunu yapmak mümkündür. Python, C veya benzeri her sunucu için küçük bir arka plan işlemi yazmanız gerekir.

Kullanılacak API çağrısı avahi_entry_group_add_record'dur ve AVAHI_PUBLISH_ALLOW_MULTIPLE öğesini bayraklar alanına geçirmeniz gerekir. Bu daha sonra işe yarayacaktır.

Alternatif olarak, hizmet keşfini amaçlandığı şekilde kullanmak ve her istemcinin bir HTTP hizmeti yayınlamasını ve bildirilen web hizmetlerine göz atmak için bir firefox eklentisi veya benzeri bir şey kullanmasını sağlamaktır. Ya da başka bir tür servis tarayıcısı.

Bonjour, Internet Explorer için bir yer imi çubuğu gibi bunu yapmak için bir eklenti içeriyordu, hala yapılıp yapılmadığından emin değilim.


2
Çalıştım, teşekkürler! Herkes ilgileniyorsa, C kaynak kodunu buraya gönderdim: public.msli.com/lcs/jaf/publish_cnames.c
Jeremy Friesner

hm. Bu, avahi'nin daha yeni sürümleriyle çalışmıyor gibi görünüyor :( Program, adları başarıyla yayınladığını yazdırıyor, ancak ağdaki başka bir ana bilgisayardan tarama yaparken görünmüyor.
Frederick Nord
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.