2012年1月17日火曜日

Linuxでのmdns(avahi/Bonjour)による名前解決。

macやpcでParallelsやVMWareなどの仮想化ソフトを使っていると、ゲストOSの名前解決にストレスを感じることがあります。

RedHat LinuxやCentOSでは、avahi daemonがデフォルトでインストールされます。avahi daemonはZeroconfのフリーソフトウェアによる実装で、IPアドレスの自動割り当てや、名前解決の機能などを実現します。ZeroconfのAppleによる実装であるBonjourとの相互運用が可能ですので、macでは特別なソフトウェアを追加することなく、すぐに使うことができます。WindowsではiTunesをインストールすると、Bonjourの機能が使えるようになります。

多くの仮想化ソフトでは、ゲストOSのためにDHCP daemonを提供してくれています。ですから、avahiの恩恵を受けるのはやはり名前解決の部分だと思います。もちろんこれはStaticにIP Addressをアサインされたマシンに対しても有効です。逐一/etc/hostsファイルを編集するのも面倒ですし、IPアドレスでゲストOSにアクセスするのはもっと面倒です。Bonjour@mac/winとavahi@Linuxを手軽に使うのは非常に簡単です。Linux ゲストOSのホスト名を .localドメインに所属させるように定義します。node1.localとか、mylinux.localとか。CentOS5では、/etc/sysconfig/networkファイルでホスト名を設定することができます。

これだけでmacやBonjourが有効になっているWindowsから、名前によるアドレス解決ができます。ホストOSの端末からsshなどをするときに名前解決ができるようになるので、大変便利です。しかし、この状態では少しだけ不満がでます。それは、Linuxホスト自体がavahiによる名前解決をしてくれないというものです。(macからping linux1.localは問題なく行えるが、linux1.localからping linux2.localができない)

Linuxで、avahiによる名前解決をするためには、nss-mdnsライブラリをインストールした上で、/etc/nsswitch.confを編集する必要があります。以下、その手順です。(ここであげている例はOSはCentOS 5.7 x64です)

  1. epel repositoryにアクセスできるようにする。nss-mdnsライブラリはepel repositoryからダウンロードすることができます。http://download.fedora.redhat.com/epel/5/x86_64/ にアクセスして、最新のepel-release-*.noarch.rpmを探してダウンロードします。このblogを書いている時点では5.4が最新のようですので、http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpmをダウンロードすることになります。
  2. ダウンロードしたepelのrpmパッケージをインストールします。もちろん、直接ネットワークからインストールしてもらってもかまいません。
    # rpm -Uvh epel-release-5-4.noarch.rpm
  3. nss-mdnsパッケージをインストールします。
    # yum -y install nss-mdns

この操作によって、以下のファイルがインストールされます。

  • libnss_mdns.so.2
  • libnss_mdns4.so.2
  • libnss_mdns6.so.2
  • libnss_mdns_minimal.so.2
  • libnss_mdns4_minimal.so.2
  • libnss_mdns6_minimal.so.2

/etc/nsswitch.confでhostsの項目にmdnsやmdns4, mdns6_minimalなどを指定することでavahiによる名前解決がLinuxノードでもできるようになります。ここでいくつか注意点があります。mdnsモジュールは、IPv4, IPv6の両方に対応したモジュールなのですが、IPv4のみでの運用を行なっているようなネットワークである場合、IPv6のアドレス解決をしようとしてタイムアウトをしてしまうことがあるようです。ですので、どちらかに限定したネットワークを構築している場合は、mdns4あるいはmdns6のどちらかを使うことをお勧めします。また、_minimalとついているのはavahiによってアサインされたリンクローカルのアドレスについてのみ名前解決をするというものなので、DHCPやStaticにIP Addressをアサインしているような環境では使うことができません。yumコマンドでインストールされるnss-mdnsパッケージは/etc/nsswitch.confに対してmdns_minimalを使うような設定を書き込みますので注意が必要です。

0 件のコメント:

コメントを投稿