Apakah ada cara untuk mengatur Avahi untuk mengimplementasikan "resolusi nama anycast" pada LAN?

9

Pertama, beberapa latar belakang: Kami memiliki laboratorium yang berisi beberapa server Linux khusus yang dijalankan pada LAN yang terisolasi. Semua server menjalankan OS yang sama (Debian Linux) dan perangkat lunak server berpemilik yang sama, dan proses server berkomunikasi satu sama lain untuk menjaga data mereka tetap sinkron. Itu berarti bahwa sejauh menyangkut klien, tidak masalah server mana yang disambungkan klien - server mana pun akan mengembalikan data yang sama dengan yang lain.

Semua server Linux ini menjalankan avahi-daemon untuk mempublikasikan nama host mDNS untuk diri mereka sendiri, yang berarti bahwa klien dapat memasukkan mis. " Http: //linux-server-1.local ." ke browser web dan terhubung ke server Linux # 1, dan seterusnya.

Ini semua baik dan bagus, kecuali itu berarti bahwa pengguna yang duduk di mesin klien (biasanya laptop Mac atau Windows dengan Bonjour diinstal) harus mengetahui (atau mencari tahu) server Linux mana yang sedang online, dan ia harus pastikan dia terhubung ke salah satu dari itu. Misalnya, jika server # 2 sedang offline hari ini, dan klien memasukkan " http: //linux-server-2.local ." ke dalam bilah URL-nya, dia tidak akan mendapat jawaban. Itu bukan akhir dari dunia, tentu saja, tetapi itu menjengkelkan bagi pengguna pemula yang mengharapkan segalanya untuk "hanya bekerja", dan juga itu membuat pengembangan skrip sisi klien yang kuat menjadi lebih rumit (karena skrip sisi klien perlu tahu cara berurusan dengan server offline secara eksplisit).

Dengan mengingat hal itu, pertanyaan saya adalah ini: apakah mungkin untuk mengkonfigurasi Avahi untuk menerbitkan alias hostname mDNS gaya apa pun juga? Tujuannya agar siapa pun dapat duduk dengan laptopnya, masukkan " http: //any-linux-server.local ." (atau serupa), dan terhubung ke salah satu server yang sedang online (sekali lagi, tidak masalah yang mana).

Perhatikan bahwa ini perlu bekerja tanpa konfigurasi khusus laptop klien, karena kami tidak memiliki kontrol atas mereka (selain persyaratan bahwa mereka telah menginstal Bonjour).

Perhatikan juga bahwa kita tidak dapat mengandalkan keberadaan server nama atau kotak proksi yang terpisah, atau pada keberadaan server Linux tertentu, karena itu akan memperkenalkan satu titik kegagalan, yang coba kita hindari.

Jeremy Friesner
sumber

Jawaban:

13

Trent Lloyd di sini, salah satu penulis proyek Avahi.

Secara teori ini mungkin, tetapi tidak mudah dilakukan. Sayangnya mekanisme default untuk mempublikasikan nama host di Avahi, juga menerbitkan catatan reverse-DNS yang terdaftar sebagai eksklusif. Jadi, jika Anda mencoba dan mempublikasikan 2 nama host yang menunjuk pada IP yang sama, Anda mendapatkan konflik pada catatan DNS terbalik.

Dimungkinkan untuk melakukan ini jika Anda menggunakan Avahi API untuk menerbitkan catatan A secara manual, dan menandainya sebagai non-eksklusif. Anda harus menulis proses latar belakang kecil untuk setiap server dengan Python, C atau yang serupa.

Panggilan API untuk digunakan adalah avahi_entry_group_add_record, dan Anda harus memasukkan AVAHI_PUBLISH_ALLOW_MULTIPLE ke bidang bendera. Ini seharusnya bekerja.

Alternatifnya adalah dengan menggunakan penemuan layanan seperti yang dimaksudkan, dan mintalah setiap klien menerbitkan layanan HTTP, dan gunakan plugin firefox atau serupa untuk menelusuri layanan web yang diumumkan. Atau semacam browser layanan lain.

Bonjour dulu memasukkan plugin untuk Internet Explorer untuk melakukan ini seperti bilah bookmark, saya tidak yakin apakah itu masih ada.

Trent Lloyd
sumber
2
Saya berhasil, terima kasih! Jika ada yang tertarik, saya telah memposting kode sumber C di sini: public.msli.com/lcs/jaf/publish_cnames.c
Jeremy Friesner
hm yang tampaknya tidak berfungsi dengan versi avahi yang lebih baru :( Program ini mencetak bahwa ia telah berhasil menerbitkan nama-nama, tetapi mereka tidak muncul ketika menjelajah dari host lain di jaringan.
Frederick Nord