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


9

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

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

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

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

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

また、個別のネームサーバーまたはプロキシボックスの存在、または特定のLinuxサーバーの存在に依存することはできないことに注意してください。これにより、単一障害点が発生し、回避しようとしています。

回答:


13

Avahiプロジェクトの作者の1人、トレントロイド。

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

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

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

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

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


2
うまくいきました、ありがとう!誰かが興味を持っている場合に備えて、Cソースコードをこちらに投稿しました: public.msli.com/lcs/jaf/publish_cnames.c
Jeremy Friesner

うーん。avahiの最近のバージョン:(プログラムのプリントが正常に名前を公表したことで動作するようには思えませんが、ネットワーク上の別のホストからアクセスするときには表示されませんので。
フレデリックノール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.