2013年4月14日

【FHC】LAN内からホスト名を指定してアクセスする【avahi】


今週もFHCネタをつらつらと書いていこうと思います。

突然ですがみなさんはFHCのコントロール画面を開くとき(またはsshから入るとき)など、どのように指定して入っているでしょうか?

おそらく http://fhc.rti-giken.jp/ にアクセスしているか、アドレスの直打ちをしているんじゃないかと思います。

ちなみに僕はアドレス派なんですが、毎回毎回アドレスを打つのって面倒ですよね。
まぁ「ブックマーク作れよ!」って言われるのは目に見えてるんですが。

ホームガジェットなのに、外部サーバー経由で入るのはなんかあれだし、アドレス直打ちも嫌だし……
と、言うわけで。今回は、おそらく俺得でしかないであろうが、名前解決のためのサービスを取り入れる試みを行いました。



【家庭内LANにおける名前解決手法】

名前解決、というとまずパッと思い浮かぶのは、DNSなんじゃないかと思います。
インターネット上ではもうこの仕組みなしにして名前解決なんて出来ないくらいの常識的なシステムとなっています。

ですが、家庭内においてはC/Sモデルのサービスというのは、いちいち設定しなくちゃならないので非常に面倒です。

なので、マルチキャストでパケットをネットワーク上に流して、各ホストでホスト名とIPを交換して自動で名前解決してしまおう、という手法をとります。(設定をしなくてもいいのでzeroconfと呼ばれています)

zeroconfで名前を解決するためにはいくつかあります。

1) NetBIOS

聞いたことがある人も多いと思います。
MS-DOS時代から、Windowsで使われている名前解決(というかMS-DOSの通信関連のAPI的な)を行うためのシステムです。
LinuxでもSambaを導入することによりNetBIOSによる名前解決を行うことができます。
(正確にはSambaに同梱されているnmbデーモンが名前解決を行う)

参照: NetBIOS (Network BIOS) - @IT

2) LLMNR

NetBIOSの名前解決はIPv4でしか出来なかったところをIPv6でも解決できるように拡張したもの…みたい。
こちらはWindowsVista以降で対応しているらしい。
LinuxではLLMNR implentation for Linuxというプロジェクトもあるみたいだが、まぁ「LLMNRを使わないと田舎のばっちゃの病気が治らないんじゃ!」という奇特な人でない限り使う必要はないんじゃないかと思います。

参考: LLMNR メモ [LLMNR][名前解決][IPv6] - 波状論的メタフィジックN

3) mDNS

はじめに言っておくとこれが本命です。
mDNSはAppleのソフトウェア(iOSだったりiTunesのBonjourだったり)で使われている名前解決手段みたいです。
LinuxはavahiでmDNSを導入することができます。

で、FHCに入れるとしたら(1)で、Sambaを入れるか(3)でavahiを入れるかどちらかかな。と思い、とりあえずSambaを入れようとしたことがあったんですが、FHCの中にいろいろモジュールだったりいろいろが足りないみたいで、いつまでたっても ./configure が通らないので諦めました。
そもそもsmbの方は要らないし。

(3)のavahiの方は、ライブラリなどを追加でインストールしたら無事に入れることが出来ました。

以下、ちょろんとavahiの導入手順を書いておきます。

【avahi導入方法】

①intltoolの導入

(クライアントがLinux/Macの場合)
以下のコマンドを打ってソースを取得したらFHCにscpしましょう
# wget https://launchpad.net/intltool/trunk/0.50.2/+download/intltool-0.50.2.tar.gz
# scp intltool-0.50.2.tar.gz sshuser@(あいぴーあどれす):
※一応最新版を入れるようにしましょう。

(クライアントがWindowsの場合)
launchpadからソースコードを入手します。
TeraTermだったらターミナル画面にファイルをD&Dでscpすることができます。(適当)

FHCに送れたらsshでログインして、展開してコンパイルします。
# tar xzvf intltool-0.50.2.tar.gz
# cd intltool-0.50.2
# ./configure
# make
# su
# make install

これは(たぶん)エラー出ることもなくインストールまでたどり着けると思います。

②gettextの導入

wgetで最新版のgettextをインストールします。
ちなみに、GNUの公式サーバーへのアクセスはクッソ重いので、ミラーサーバーから落とすのがおすすめです。

# wget http://ftp.jaist.ac.jp/pub/GNU/gettext/gettext-0.18.2.1.tar.gz
# tar xzvf gettext-0.18.2.1.tar.gz
# cd gettext-0.18.2.1
# ./configure
# make
# make install

これも(きっと)エラー出ることもなくインストールまでたどり着けると思います。(推定)
ただ結構重いみたいです。こんふぃぐあーとめいくに時間かかります。

③libdaemonの導入

これも同様に①②みたいな流れで、最新版のlibdaemonをぶち込んでいきます。

# wget http://0pointer.de/lennart/projects/libdaemon/libdaemon-0.14.tar.gz
# tar xzvf libdaemon-0.14.tar.gz
# cd libdaemon-0.14
# ./configure
# make
# make install

これも入りますね。はい。(

④avahiの導入

やっとここまで来ましたね。
avahiだけはこんふぃぐあーの時にひと工夫します。

例のごとく、最新版を(ry

# wget http://avahi.org/download/avahi-0.6.31.tar.gz
# tar xzvf avahi-0.6.31.tar.gz
# cd avahi-0.6.31
# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
# ./configure --with-distro=fedora --disable-qt3 --disable-qt4 --disable-gtk3 --disable-pygtk --disable-gdbm --disable-mono
# make
# make install

これで無事に入ったと思います。
無事に入らなかったら僕に文句言ってください。

⑤動作確認と自動起動の設定

FHCのディストリビューションであるAngstrom linuxはfedora系列のディストリだそうで。
ですので、自動起動やデーモンの管理はsystemdというサービスで行ってるそうです。
(実はよく知らなかった)

とりあえず、デーモンの起動は以下のコマンドです。

# systemctl start avahi-daemon.service

起動に成功したら、正しく動作しているか確認します。

# avahi-browse -t -a

+   eth0 IPv4 FHC [00:18:31:8f:d5:ba]     _workstation._tcp    local
+   eth0 IPv4 FHC                         _ssh._tcp            local
+   eth0 IPv4 FHC                         _sftp-ssh._tcp       local

コマンドを打ってFHCと書かれた行が出れば正しく動作しているはずです。

続いて、ブラウザからアクセスして表示されるかを確認しましょう。
アドレス欄に「fhc.local」と入力したらFHCの管理ページが表示されるはずです。

※エラーが発生する場合※

mDNSの情報が正しくクライアントPCに届いていないと思われます。
→WindowsだったらiTunesなどを入れれば動くかな(試してない)
→avahiが入ってるか確認し、/etc/nsswitch.confの中身を確認しましょう(FHCと、クライアントPCがLinuxの場合はこちらでも確認してください)

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns mdns4 wins
networks:       files wins

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

赤文字で書かれているhosts:から始まる行にmdns4の記述があるか確認してください。


次に自動起動の設定をします。

# systemctl enable avahi-daemon.service

これで、FHCを再起動した後も自動でFHCが起動するようになります。

【思いがけない副産物】

avahi入れたからか、nsswitch.conf弄ったからかよくわからないですが、FHC→クライアントPCへのアクセスが早くなりました。

我が家のFHCはクライアントPCをシャットダウンさせるためにsshで接続しているんですが、これが数秒のラグが発生していたのですが、そのラグが見事に無くなって快適にシャットダウンされるようになりました。

ちょっと嬉しい改善でした。これだけでもavahiを入れた甲斐があったというものです。