web-dev-qa-db-ja.com

LANに「エニーキャスト名前解決」を実装するようにAvahiを設定する方法はありますか?

まず、いくつかの背景:分離されたLAN上で実行される少数の専用Linuxサーバーを含むラボがあります。すべてのサーバーは同じOS(Debian Linux)と同じ独自のサーバーソフトウェアを実行し、サーバープロセスは相互に通信してデータの同期を維持します。つまり、クライアントに関する限り、クライアントがどのサーバーに接続するかは問題ではありません。どのサーバーも他のサーバーと同じデータを返します。

これらのLinuxサーバーはすべてavahi-daemonを実行して、mDNSホスト名を公開します。つまり、クライアントは次のように入力できます。 " http://linux-server-1.local 。"彼のWebブラウザーに接続し、Linuxサーバー#1に接続します。

これは、クライアントマシン(通常はBonjourがインストールされたMacまたはWindowsラップトップ)に座っているユーザーが現在オンラインになっているLinuxサーバーを知る(または把握する)必要があることを除いて、すべてうまくいきます。彼がそれらの1つに接続していることを確認してください。たとえば、サーバー#2が今日オフラインで、クライアントが「 http://linux-server-2.local 」と入力したとします。彼のURLバーに、彼は応答を受け取るつもりはありません。もちろん、これで終わりではありませんが、すべてが「正常に機能する」ことを期待する初心者ユーザーにとっては煩わしいものです。また、堅牢なクライアント側スクリプトの開発がより複雑になります(クライアント側スクリプト以降)オフラインサーバーを明示的に処理する方法を知る必要があります)。

それを念頭に置いて、私の質問はこれです:エニーキャストスタイルのmDNSホスト名エイリアスも公開するようにAvahiを構成することは可能ですか?目標は、誰でも自分のラップトップを持って座って、「 http://any-linux-server.local 」と入力できるようにすることです。 (または同様の)、現在オンラインになっているサーバーの1つに接続します(ここでも、どちらでも構いません)。

これは、クライアントのラップトップを特別に構成しなくても機能する必要があることに注意してください。これは、クライアントのラップトップを制御できないためです(Bonjourがインストールされているという要件を除く)。

また、個別のネームサーバーやプロキシボックスの存在、または特定のLinuxサーバーの存在に依存することはできません。これは、回避しようとしている単一障害点を引き起こすためです。

9
Jeremy Friesner

Avahiプロジェクトの作者の1人であるTrentLloydがここにいます。

これは理論的には可能ですが、簡単ではありません。残念ながら、Avahiでホスト名を公開するためのデフォルトのメカニズムでは、排他的としてリストされている逆引きDNSレコードも公開されていました。したがって、同じIPを指す2つのホスト名を公開しようとすると、逆引きDNSレコードで競合が発生します。

Avahi APIを使用してAレコードを手動で公開し、非排他的としてマークする場合、これを行うことができます。 Python、Cなどで、サーバーごとに小さなバックグラウンドプロセスを作成する必要があります。

使用するAPI呼び出しはavahi_entry_group_add_recordであり、AVAHI_PUBLISH_ALLOW_MULTIPLEをflagsフィールドに渡す必要があります。これでうまくいくはずです。

別の方法は、意図した方法でサービスディスカバリを使用し、各クライアントにHTTPサービスを公開させ、Firefoxプラグインなどを使用してアナウンスされたWebサービスを参照することです。または他の種類のサービスブラウザ。

Bonjourには、ブックマークバーのようにこれを行うためのInternet Explorerのプラグインが含まれていましたが、まだ含まれているかどうかはわかりません。

13
Trent Lloyd