インターネットの基幹となる技術、それがDNSだ。DNSがなければインターネットはきわめて使いにくいものになっていただろう。本連載では、BINDでDNSサーバを構築しながらDNSそのものについても解説していく。今回はDNSサーバの役割に触れたあと、BINDの入手からインストールまでを紹介する。
BINDはBerkeley Internet Name Domainの頭文字をとったもので、いわゆるDNSサーバとリゾルバライブラリ、各種ツールの集合体です。DNSはDomain Name Systemで、今日のインターネットを支える基幹技術の1つといって差し支えないでしょう。DNSの目的は、ホスト名とIPアドレスを関連づけることです。そしてその仕掛けは、名前空間の階層化と権限委譲による分散型データベースに集約されます。
もともとTCP/IPベースのネットワークとしてのインターネットでは、すべてのホストはIPアドレスで区別されます。0〜255の数値を4つ、ピリオドで区切って並べて表記しますが、人間にとっては覚えやすいものではありません。当然、分かりやすい名前でアクセスできるように対応表が用意されました。しかしインターネットに接続されるホストが増えると、これを人手でメンテナンスするのは不可能です。そこで名前空間を階層化するとともに分散型データベースとしてのDNSサーバが導入されたのです。
名前空間の階層化は、要するにピリオドで区切るということです。習慣でより広範囲を表すラベルを右側に書くので、右から左に行くにつれて徐々に範囲が狭くなっていくわけです。こうすることで、各ドメインごとに一意の名前を使いさえすれば、インターネット全体を通して名前が重複せずに済みます。
この階層に対応したサーバを用意することで、権限の委譲も可能になります。各サーバはインターネット上のホストすべてを知る必要はなく、下位のドメインに関する権限を持ったサーバを知っているだけで済みます。知らない情報に対してはルートネームサーバを始点としたたらい回しで処理されるのですが、それこそ電子的な速度で処理されるので人間からすれば大した遅れには見えません。
DNSにおける問い合わせの方法はRFCによって標準化されています。この問い合わせに答えるプログラムの1つが、BINDというわけです。4.2BSDで実装されて以来、事実上DNSサーバのリファレンス実装として扱われています。もちろん、ほかにもDNSサーバとして動作するプログラムはあります。が、情報が豊富という意味でも、まずはBINDを動かすことをお勧めします。
Linuxディストリビューションの特徴として(というよりもPC-UNIXの特徴ですが)、すでにコンパイルされたバイナリイメージがパッケージとして用意されています。これを利用すれば、簡単にBINDをインストールできます。主なディストリビューションごとのBINDパッケージを表にしてみました。
ディストリビューション | BINDパッケージ名 |
---|---|
Debian 2.2 | bind_8.2.2.p5-11.deb |
Kondara 1.2 | bind-8.2.2pl7-1k.i586.rpm |
Laser5 6.2 | bind-8.2.2_P5-1LL.i386.rpm |
RedHat 6.2 | bind-8.2.2_P5-9.i386.rpm |
RedHat 7.0 | bind-8.2.2_P5-25.i386.rpm |
Slackware 7.1 | bind.tgz(bind-8.2.2-P5) |
それぞれ、パッケージを扱うコマンド(dpkg, rpmなど)で簡単にインストール、アンインストールできます。ディストリビューションをインストールするときの方法によっては、すでにBINDがインストールされているかもしれません。dpkg -lやrpm -qaで確認してからの方がよいでしょう。
前述のように、原稿執筆時点ではKondara MNU/Linuxを除いたすべてのディストリビューションで、bind-8.2.2-P5がパッケージになっています。しかし8.2系列では最新版として8.2.2-P7が提供されていますし、9.0.1というバージョンもリリースされています。
これらの最新リリースを使うためには、ソースコードを入手してコンパイルし、バイナリファイルを作る必要があります。またそれほど頻繁に起きるわけではありませんが、セキュリティホールの報告があった場合などはパッケージになるのを待つわけにいきませんので、どうしてもソースコードからのインストールが必要になります。
もともとUNIXの世界では、ソースコードからコンパイルして必要なバイナリを作成する方が一般的でした。さらに最近では、さまざまなシステムによる違いを修正する方法も自動化されています。加えてLinuxは最もメジャーなPOSIX準拠のOSなので、たいていのソフトウェアは簡単な変更を行うとLinuxでコンパイルできるようにソースコードが作成されています。パッケージほど簡単お手軽ではありませんが、ソースコードからのインストールも決して難しいものではありません。
最初に、インストールに使用するツールを確認します。まずANSI Cに準拠したCコンパイラが必要ですが、たいていのディストリビューションにはGNUのCコンパイラ(gcc)が用意されているので、それを使えばOKです。もしインストールしていないようでしたら、パッケージからインストールしてください。
もう1つ、パーサジェネレータと呼ばれるプロクラムも必要です。これはyacc、byacc、GNU bisonのいずれかです。これもパッケージからインストールするのが手っ取り早い方法です。
次にソースコードの入手ですが、オリジナルはhttp://www.isc.org/にあります。日本だと、Ringサーバ(http://ring.ocn.ad.jp/、http://ring.so-net.ne.jp/)などから入手した方が早いかもしれません。バージョンが変わっても、名前は同じでソースコードをまとめたものがbind-src.tar.gz、ドキュメントをまとめたものがbind-doc.tar.gzとなっています。以下にコンパイルとインストールの手順を記します。
$ tar zxvf bind-src.tar.gz $ cd src $ make clean $ make depend $ make all $ su # make install
これで/usr/local/bind以下にライブラリやヘッダファイルがインストールされます。さらに、
/usr/bin/addr /usr/bin/nslookup /usr/bin/dig /usr/bin/dnsquery /usr/bin/host /usr/sbin/named /usr/sbin/named-xfer /usr/sbin/ndc /usr/bin/nsupdate /usr/bin/mkservdb /usr/sbin/irpd /usr/sbin/dnskeygen /usr/sbin/named-bootconf
がインストールされます。当然、ディストリビューション標準のバイナリファイルは書き換えられてしまいます。何が書き換えられたのかきちんと記録を取り、すぐに分かるようにしておかないと、後々の混乱を引き起こします。
これを避けるため、すべてのファイルを/usr/local以下にインストールする方法もあります。伝統的に、/usr/localはユーザーが自分でインストールするための場所とされており、システムはここに干渉しないことになっています。
この場合は、インストール先を変更するために環境変数を書き換えます。ドキュメントには、
DESTDIR | pefix used in front of all other DEST variables. The default is the empty prefix. (for non-root installs; not equivalent to autoconf's --prefix) |
---|---|
DESTLIB | libraries |
DESTINC | include files |
DESTBIN | ordinary binaries (e.g. dig, nslookup) |
DESTSBIN | system binaries (e.g. named) |
DESTEXEC | helper binaries (e.g. named-xfer) |
DESTHELP | place to put nslookup's help file |
DESTMAN | man file location |
DESTETC | configuration file |
DESTRUN | PID file location and "ndc" control channel location. This cannot be the same directory as DESTSBIN. |
とあります。実際には、src/ports/linux/Makefile.setに以下の記述があるので、これを適当に書き換えます。
'CC=gcc -D_GNU_SOURCE' 'CDEBUG=-O -g' 'DESTBIN=/usr/bin' 'DESTSBIN=/usr/sbin' 'DESTEXEC=/usr/sbin' 'DESTMAN=/usr/man' 'DESTHELP=/usr/lib' 'DESTETC=/etc' 'DESTRUN=/var/run' 'LEX=flex -8 -I' 'YACC=yacc -d' 'SYSLIBS=-lfl' 'INSTALL=install' 'MANDIR=man' 'MANROFF=cat' 'CATEXT=$$N' 'PS=ps -p' 'AR=ar crus' 'RANLIB=:'
安直な方法としては、/usrを/usr/localに書き換えるという手があります。この変更が確実に反映されるよう、make installを実行する前にsrc/.settingsを削除しておいてください。
これでインストールが終わったので、次は設定です。しかし、この設定だけで1冊の本が書けるほど奥が深いので、次回以降に解説を行います。
Copyright © ITmedia, Inc. All Rights Reserved.