dnsmasqでDNSおよびDHCPサービスを強化する

 ネットワークが小規模で、ユーザのほとんどが主にインターネット上のサービスを利用している場合は、名前ではなくIPアドレスの数値を各ノードに割り当てておけばよい。しかし、ネットワークが拡大して組織内のサービス(Wiki、メールサーバ、メディアサーバなど)がオンライン化されると、個々のアドレス値をいちいち覚えきれなくなってくる。解決策の1つが、dnsmasqを使ってドメインネームサーバ(DNS:Domain Name Server)と動的ホスト構成プロトコル(DHCP:Dynamic Host Configuration Protocol)を実装することだ。そうすれば、外部DNSアドレスをキャッシュしてパフォーマンスの向上が図れるほか、ネットワークのすべてのメンバへのIPアドレスの動的割り当てや、あらゆる管理の一元化が可能になる。本記事ではその方法を紹介しよう。

 SOHO(個人および小規模事業者)ネットワークの大半は、ネットワークアドレス変換(NAT:Network Address Translation)とルーティング不可(non-routable)のIPアドレス範囲を使って構築されている。ネットワークの管理者は、新しいマシンが加わるたびに、使用中のアドレス範囲(例:192.168.168.*)から利用可能なIPアドレスを順に割り当てていけばよい。しかし、プライベートネットワーク上にあるこうしたノードのIPアドレスは、組織のパブリックDNSサーバーにはわからない。よって、ネットワークのユーザは、覚えにくいIPアドレス値を使って組織内のネットワークサービスを利用しなければならない。

 これを避けるには、dnsmasqをインストールしてネットワーク上のすべてのノードの情報を覚えさせ、DNSサーバ化して、それらの情報を提供するようにすればよい。処理を簡単にするために、dnsmasqの設定によってDHCPプロトコルで各ノードにIPアドレスを割り当てさせることも可能だ。さらに、特定のシステムに固定のIPアドレスを持たせる必要がある場合は、dnsmasqのDHCPサーバの設定により、システムのメディアアクセス制御(MAC:Media Access Control)アドレス、つまり物理アドレスに基づいてIPアドレスを提供するようにすればよい。これにより、LANのIPアドレス設定情報のすべてを1か所に集めることができる。

 dnsmasqのインストールは非常に簡単だ。ソースからのビルドも「make ; make install」を実行するだけだが、たいていのLinuxディストリビューションには、インストール可能なパッケージが用意されている。dnsmasqには、OpenWRTTomatoなど、ルータ用のオープンソース・ファームウェアも入っているので、DNS、DHCP、ルーティングの各機能を1台にまとめることも可能だ。

 標準的な設定のシステムであれば、dnsmasqを起動した時点でネットワークのDNSサーバとして稼働する準備が整っている。DNS検索の要求が来ると、dnsmasqはまず「/etc/hosts」ファイルを参照し、要求に一致するエントリがないかを調べる。一致するエントリがあれば、対応するIPアドレスを返す。「/etc/hosts」ファイルの中身は次のようになっている。

192.168.168.5  haggard.example.com haggard
192.168.168.6  grant.example.com grant
192.168.168.7  dent.example.com dent

 この場合、grant.example.comの要求が来ると、dnsmasqは192.168.168.6を返す。

 一致するものが「/etc/hosts」になければ、dnsmasqは「/etc/resolv.conf」に記されている“本来”のネームサーバに要求を転送する。Linuxシステムの「/etc/resolv.conf」ファイルは次のようになっている。

nameserver 24.21.23.54
nameserver 15.16.17.18

 なお、実在する外部のドメイン名は、より優先度の高い「/etc/hosts」のエントリによってマスクできる。

 こうしてdnsmasqシステムのセットアップが済むと、ネットワークのほかのシステムではdnsmasqのIPアドレスをドメインネームサーバとして入力できる。そうすれば、IPアドレスではなくホスト名を使ってTCP/IPネットワークのリソースにアクセスできるようになる。またdnsmasqには、インターネットのDNSサーバから取得したIPアドレスをキャッシュして同じアドレスを探す以降の要求に再利用することで、パフォーマンスが向上するという利点もある。