吉川 洋太郎

ラック コンピュータセキュリティ研究所

 前回,DNSのアーキテクチャや仕様が決まるまでをお話しました。実際にネット上でDNSを利用するには,DNSを実装したサーバー,つまりDNSサーバーが必要です。「DNSの歴史」最終回である5回目は,DNSサーバーについて解説します。

 RFCに基づくDNSが最初に実装されたサーバー,すなわち,最初のDNSサーバーは,RFCを書いたPaul Mockapetris氏自身による「JEEVES」です。JEEVESはその後,UNIX系OSの一種である「4.3 BSD」のために開発された「BIND(Berkeley Internet Name Domain)」に置き換えられて,現在に至ります。

 BINDは,カリフォルニア大学バークレー校「Computer Systems Research Group(CSRG)」により,開発されました。CSRGに在籍していたDouglas Terry氏,Mark Painter氏, David Riggle氏,そして Songnian Zhou氏により,BINDのプロジェクト・チームが構成され,そこで開発及び保守が行われていました。CSRGにより,BINDはバージョン4.8.3までアップグレードされました。

 その後,Ralph Campbell氏に引き継がれ,さらに,今はCompaqに吸収されてしまったDigital Equipment社(DEC)のKevin Dunlap氏により,開発が引き継がれました。この体制は,1985年から1987年までの2年間続きました。

 この期間に,非常に多数の開発者が,BINDの改良や,各OSへの移植などに,積極的に参加しました。前回(第4回)のコラムで名前が出た Craig Partridge氏もその中の一人です。現在のBINDの地位は,このときに確立されたといっても過言ではないでしょう。

 BIND 4.9.0と4.9.1は,DECからリリースされました。DEC内部では,活動の中心はPaul Vixie氏に移行していました。現在同氏は,後述するInternet Software Consortiumの代表者です。そして,彼をアシストしていたメンバーの中には,O'Reilly社の有名な書籍「DNS & BIND」の著者であるPaul Albitz氏もいました。

 その後,BIND 4.9.2がVixie Enterprise社からリリースされました。そうです,前述のPaul Vixie氏がDECをスピン・アウトして起した会社です。この時点で,彼個人が,DNS開発の,そしてBINDの開発のリーダーであることが,明確に示されました。

 BINDはその後,Vixie氏を代表とする非営利団体「Internet Software Consortium(ISC)」*1 により,開発,管理されるようになりました。しかし,現在では,ISCのスタッフだけでは作業をこなせなくなり,現在はIBMやSun Microsystemsなどのベンダーも開発に参加するようになりました。

*1 ISCの代表は,彼がずっと務めていたわけではなく,David Conrad氏などが代表を務めた時代もありました。

「Windows版BIND」苦難の道のり

 BINDというと,「UNIXプラットフォームのDNSサーバー」という印象が非常に強いですが,Windows NT系列のOS(以下「NT」)にも移植されています。「BIND for NT」と呼ばれています。

 UNIX系列の各種OSへの移植は,前述したように,バージョン4.9.0までの間に積極的に行われましたが,NTへの移植は4.9.3からでした。Laurence G. Kahn氏によるものです。これで,NTユーザーもBINDの恩恵を受けられるようになりました。

 ところがその後,NTユーザーは地獄を見ることになります。4.9.7までは順調だった BIND for NT のバージョン・アップが,バージョン8の前でストップしてしまいました。事実上,BIND for NTの歴史は,バージョン4.9.7をもって,一度終了したのです。

 しかしながら,その間,セキュリティ・ホールは次から次へと発見されます。バージョン・アップが止まった BIND for NTは,時間が経つごとに危険になっていきます。もちろん“本家”のBINDでは,セキュリティ・ホールはふさがれますし,新しい機能も追加されていきます。ユーザーは,古いBIND for NTに,いつまでもしがみついているわけにはいきません。

 当時,“頼みの綱”だったのは,Microsoft純正の「MS DNS」と,MetaInfo社(現在はCheck Point Software Technologies社に吸収)による「MetaDNS」でした。しかし,前者はセキュリティ上好ましくなく,後者は非常に高価でした。しかも,事前入手できるMetaDNSの情報は少なく,いいか悪いかの判断材料がほとんどありませんでした。そのため,MetaDNSの導入には勇気が必要でした。

 当時,NTユーザーの一人だった(現在もそうですが)筆者も,判断に困りました。「DNSサーバーだけはUNIXマシンで運用するしかないのだろうか?」と,しばしば考えさせられました。さらには,「BIND8をNTで動作させたい」とも考えていました。

 結局,「なければ自分で作ろう」と,BIND8の移植作業に踏み切りました。ところが,開始してすぐに,様々な難問にぶつかりました。「“fork()”などという,NTのプログラミングでは決して見ることのない関数」,「長年の開発によりスパゲッティ化した見にくいソースコード」,などなど。何度移植をあきらめかけたか,正直覚えていません。

 しかし,その度に,いろいろな人からアドバイスをもらったり,励まされたりして,ついに「BIND for NT 8.2.2 patch level 5」を完成させました。このときの喜びといったらありません。表現不可能です。今でも,そのときの感動を覚えています。

 完成後,すぐにISCへ報告したところ,「ISCオフィシャル」と認められ,ISC BINDのソース・コードの中に収録されました。「ISC BIND for NT/2000」という,正式名称ももらいました。

 最初は,UNIX版と比較すると,バージョン・アップは一歩も二歩も遅れていましたが,現在では,ほぼ同時になっています。そして,UNIX版,NT版共に,バージョンは8.2.3になりました。大幅な安定性の向上やパフォーマンス・チューニングが施されましたので,前バージョンの8.2.2とは別物になったと言ってもよいでしょう。

 現在も,筆者はISC BIND for NT/2000の開発に携わっています。「BIND 9.1.0」のソース・コードと日々格闘中です。最新情報については,筆者のWebサイト(http://www.port53.co.jp/)を参照してください。また,UNIX版については,ISCのWebサイト(http://www.isc.org/)を参照してください。

◇   ◇   ◇   ◇   ◇

 今回は,「DNSサーバー」といいながら,「BIND」の話に終始してしまいました。これは,現在の使用状況や歴史を考えれば,いたしかたないことでしょう。しかし最後に,BINDのライバルといってもよい「djbdns」について,一言述べたいと思います。

 発表されたときには「DNScache」という名前だった,このサーバー・ソフトウエアは,使用可能メモリーの上限を指定可能であるなど,BINDにはない特色を持っています。そのため,非力なサーバー・マシンを使用している場合には,こちらを利用したほうがいいかもしれません。もちろん,非力なサーバーのために開発されたソフトではありません。

 BINDとdjbdnsのどちらがよいか---。これは,簡単に答えられる質問ではありません。利用環境や,好みにもよるでしょう。選択については,ユーザー(正確には,システム管理者)の手にゆだねたいと思います。