DHCPサーバの話など
今日は濃い技術ネタです。
DHCPサーバとは、IPアドレスを自動でクライアントに割り当てるためのサーバで、PCでIPアドレスの設定を自動設定にすると、DHCPサーバから割り当てられたIPアドレスを使うことになります。職場でも自宅でも、ホテルや公衆無線LANでもよく使っているのではないでしょうか。
DHCPは、Dynamic Host Configuration Protocolの略です。私の知っているところでは、Windowsに付属しているMicrosoftのDHCPサーバや、ISC(Internet Systems Consortium)がオープンソースで配布しているDHCPサーバがよく使われていると思います。ルーターなどのネットワーク機器にもDHCPサーバ機能は付属していることが多くありますが、一般的によく使われているのはMicrosftのものかISCのものでしょう。
私の会社ではDHCPサーバ製品を「ProDHCP」という製品名で販売しています。Linux,BSD,SolarisなどのUNIX系OSで動きます。UNIX系OSにはISCのDHCPサーバがあるのになぜ作ったかというと、ISCのもので困っているので、何とかしてという相談を受けたからです。ISCのDHCPサーバは設定変更がやりにくいのです。一般的にUNIX系のサーバプログラムは設定変更を反映する場合、SIGHUPを与えるとプログラムが設定ファイルを読み直して、新しい設定でサービスを継続するというものが多いのですが、ISCのDHCPサーバはそれができません。dhcpdのオンラインマニュアルを見ると、
「
dhcpd.conf ファイルに変更を行ったときは、 dhcpd は再起動しなければなりません。こ れ に は SIGTERM ( シ グ ナ ル 15) を/var/run/dhcpd.pid に保存されているプロセス ID に送り、dhcpd を再び起動します。 DHCP サーバのデータベースは BOOTP のデータベースほど軽量ではないので、 dhcpd は dhcpd.conf ファイルが変更されたことを知っても、自動的に自分自身を再起動することはありません。
注 意: これにはたくさん文句が来ています。サーバに SIGHUP を送るとデータベースをリロードしてくれれば良いだろうな、とは我々も認識しています。これは技術的には不可能ではありませんが、非常に多くの作業を必要とします。我々のリソースは非常に限られてお り、 それらは他のところに振り向けられています。どうかメーリングリストに文句をいうのはご遠慮ください。この機能を実装するプロジェクトへの資金を提供してくださるとか、あなた自身が実装してくださるのならもちろん話は別ですが。
」
こんな感じに注意書きがあります。管理しているIPアドレスの数が少なければ再起動してもそれほど時間はかかりませんが、10万件くらい管理しているとそれなりのサーバ機でも3分くらい再起動に時間がかかってしまいます。相談を受けた際に、オープンソースなので一応ソースも見たのですが、かなり複雑な作りで、機能追加するのは相当困難と思いました。そこで、自作したわけです。ProDHCPは数万円のサーバ機で100万件を払い出し中でも設定変更は15秒くらいで終わります。
単にIPアドレスを貸し出すだけなので簡単だろうと思うかも知れませんが、実はDHCPはかなり複雑です。とりあえず3日でプロトタイプを作って、設定変更が瞬時で終わるような方法の目処をつけ、やってみるから、とお客さんに伝え、2週間後にはテストを開始したいのでよろしく、と言われました。まあ、なんとかテスト開始までにそれらしいものを作り、後はテストをしながら調整し、さらにあるサービスで実運用しながらバージョンアップをしました。すでに2年くらいそのサービスで稼働を続けています。
せっかく開発したので、販売もしてみようということで、会社のホームページに載せておいたのですが、さすがにDHCPサーバをわざわざお金を出して買いたいというケースは少ないだろうという想像通り、1年以上ほとんど問い合わせもなかったのですが、知り合い経由でDHCPのアプライアンス製品を販売している会社がある、と紹介していただき、OEM提供することになりました。ソリトンシステムズさんの「Net'Attest D3」という製品です。DHCPとDNSのアプライアンス製品なのですが、買う人いるのかと思っていたら、実はかなりの販売量なのでビックリしました。最新版はProDHCPがエンジンとして入っています。ソリトンさんにもさまざまな試験をしていただき、機能追加も行いました。アプライアンス製品の場合はIPアドレスの数の問題より、信頼性がポイントで、ISCのDHCPサーバは実は意外と不具合もあるそうで、製品として販売しているといろいろと苦労もあったそうです。そのあたりをProDHCPで解決しようという感じでした。冗長化などにも対応しています。
さらにこのところ、他のお客さんからも具体的な問い合わせをいただくことが増えてきて、カスタマイズに対応したり、まもなくあるサービスで運用開始になる案件や、他にも検討中というお客さんが出てきました。皆さん大体ISCで困っていたり、大規模運用で安定した状態で使いたいなど、ご希望は同じような感じです。IP電話やケーブルテレビ、公衆無線LANなどで使いたいというご相談が多い感じです。
ProDHCPは中心部分はほぼ私が一人で作りましたので、何か起きたときの解析や対応、機能追加なども私がやればスピーディーというのも特徴です。作った本人ですので、問い合わせをいただいて、ほぼ瞬時に対応ができてきました。もちろん会社として提供している製品ですので、他のメンバーも付加機能を作ったりして理解していますし、対応もできますが、いずれにしても対応スピードは強烈です。海外製品を輸入販売しているのとは桁違いですし、オープンソースを調べて解析するよりも遙かに早いのはあたり前です。
実はWIDEプロジェクトのメンバーの方々に、「DHCPサーバを完全オリジナルで作った」と言ったら、「世界標準のISCのものがあるのに、なんで?」と不思議がられたのですが、背景を説明すると、なるほど、とはなったものの、まああまり興味はない人が多かった感じでした。研究テーマとしては初物が好まれるので、すでにあるものを作ってもあまり珍しがられません。しかし、実際に運用している現場では困っているものも多いものです。普通に使って大体動く、というもので十分な場面も多いですが、プロが提供するサービスとして運用するとなると、規模・性能・信頼性など、さまざまな課題が出てくるものは多いのです。
作った本人としては、少しでも多く、いろいろな場面で使ってもらえるとうれしいものなので、本当はこういう汎用的なプログラムはフリーで公開したいところなのですが、残念ながら会社も余裕がなく、少しでも稼ぎの足しになればと、製品として販売させてもらっています。お使いいただくケースも商用がほとんどでしょうから。。
DHCPはIPv6になるとあまり活躍しなくなるプロトコルと言えるでしょう。IPv6ではクライアントのIPアドレスはNDPでルーターにより配布されるような感じになります。クライアント向けにDHCPも使えないことはないのですが、IPv6の仕組み自体でIPアドレスの自動設定ができるので、ルーターにセグメント情報を配布するのにDHCPが使われる程度になるでしょう。しかし、クライアントが完全にIPv6オンリーになるのはまだまだ相当先と言われています。世界中のさまざまなサービスが全てIPv6になるのには時間が必要で、その間はIPv4+IPv6のデュアルスタックで使うことになり、DHCPもまだまだ必要でしょう。
自作したおかげでDHCPに関しては相当詳しく理解できました。私はネットワークプロトコルに関しては大抵自作しながら勉強したものです。HTTP,SMTP,POP3,FTP,DNSなど、サーバかプロキシを作ると大体一通り理解できるものです。すでに世の中にあるものを作ることも決して無駄ではないと思いますし、とりあえず作ってみたいと思えること自体が技術者として大事だと思っています。設計書通りに、言われたとおりに作るより、自分で挑戦したいものを作る方が私は好きです!
実は・・・私の会社のメンバーが作ったシステムは、名前こそ表に出てきませんが、かなり大規模なシステムの根幹部分として動いているものが結構あります。技術的に他ではなかなか引き受けないような、性能の限界にチャレンジするようなものもかなりあります。うちのメンバーはそういうものに燃えるタイプが多いので。でも、せっかくすごいものを作っているのだから少しは表に出たいと言うことで製品開発販売にも力を入れはじめています。そんな頼もしいメンバーたちとますます面白いものを作っていきたいとワクワクしてます。