連載
» 2000年12月13日 00時00分 UPDATE

BINDで作るDNSサーバ(1):DNSサーバの役割とBINDの導入

インターネットの基幹となる技術、それがDNSだ。DNSがなければインターネットはきわめて使いにくいものになっていただろう。本連載では、BINDでDNSサーバを構築しながらDNSそのものについても解説していく。今回はDNSサーバの役割に触れたあと、BINDの入手からインストールまでを紹介する。

[関野史朗,@IT]

BINDとDNS

 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を動かすことをお勧めします。

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© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。