avahi

Xenやらlxc(Linuxコンテナ)やらkvmやらVirtualBoxやら、
仮想マシンが多くなってくると各マシンへのリモートログインが面倒なことになります。
何らかの方法でそれらマシンのIPアドレスを知る必要があり、
一番の解決法は各マシンに固定のIPアドレスを設定してそれを覚えておくことでしょうか。
しかしマシンが多くなると固定IPアドレスをつけるのすら面倒ですし、
何か事情があって別のネットワークに移すとかなると地獄を見ます。
やっぱりIPアドレス配布はDHCPに任せたい。

で、少しでもいい環境にするために思いつくのが、
DHCPサーバから割り当てたIPアドレスとその配布先のホスト名を
DNSサーバに通知させてダイナミックDNSを構築し、
アクセス先をホスト名で指定できる環境にすることです。
私自身以前運用していた事があります。
ただダイナミックDNSを動かすDNSサーバと、
インターネットに接続するためのDNSサーバを別にせざるを得なかったり、
クライアントからうまいこと名前解決できるようにしなければならなかったりと、
あらゆる場面でうまく運用できるわけではありません。
というか廉価なブロードバンドルータがDHCPサーバになってるようだと多分無理です。

面倒なことはしたくないし楽な手が何かないかなと考えていた矢先、
いいものがあることを知りました。avahiです。
そういえば大昔に何かの絡みで調べた記憶がうっすらあります。
Apple社のBonjourと同種で、avahiはZeroconfの実装です。
本来Zeroconfにはいろいろ機能があるみたいですが、
ここで注目すべきは、マルチキャストDNSで
ローカルネットワーク内のマシンの名前解決をする機能です。
同一サブネット上にあり、かつavahiが動作しているマシン同士であれば、
IPアドレスではなく、ホスト名指定でアクセスできてしまいます。

avahiはUbuntu 14.04では既に入っているかもしれませんが、
以下を実行してインストールします。

# apt-get install avahi-daemon

“/etc/hostname”設定ファイルにかかれているホスト名と”local”ドメインの組み合わせで、
そのマシンが特定できます。
例えばsshでログインしたければ、

$ ssh <リモートマシンのホスト名>.local

で可能です。IPアドレスを確認する手間が省けます。

sshと言えば、私はWindowsのcygwinからのLinuxへのリモートログインも多用するので
cygwinでも使えるようにします。
すでにパッケージがインストールされているとして、cygwin(bash)上で以下を実行します。

$ /usr/bin/messagebus-config
$ /usr/sbin/avahi-daemon-config

2行目を実行した際、

*** Info: `net start avahi-daemon' or `cygrunsrv -S avahi-daemon'. Otherwise,

と表示されるので、

$ net start avahi-daemon

も実行します。しかしこの時

システム エラー 1075 が発生しました。
依存関係サービスが存在しないか、または削除の対象としてマークされています。

と表示されてしまいました。

しょうがないので[コントロールパネル]の[管理ツール]から[コンピューターの管理]を開き、
[サービスとアプリケーション]-[サービス]を見てみると、
[CYGWIN D-Bus system service]は開始されているのに
[CYGWIN Avahi servise]は開始されておらず、
手動で開始しようとしても先と同等のエラーとなります。
で、[コンピューターの管理]の[システム ツール]-[イベント ビュー]-[カスタム ビュー]-[管理イベント]
で該当エラーを見ると、どうもBonjourが必要なよう。

Apple社のサイトを見てもWindows版のBonjourは単体ではなさそうで、
iTunesを入れるしかないかと思っていたところ、
Bonjour Print Services for Windowsなるパッケージを見け、
試しにインストールしたところ、avahiも起動するようになりました。

これによりcygwinからssh時に”<ホスト名>.local”で接続先を指定できるようになりました。
のみならず、通常のコマンドプロンプトでのping等でも使えますし、
chromeブラウザ等でも”http://”をつけることでそのウェブサーバにアクセスできます。
なかなか便利です。

広告