「BIND 10」をC++とPythonで書く狙いとは

JPRSに聞く、次期DNSソフト開発の意義<後編>

 前編では、米Internet Systems Consortium(ISC)が「BIND 10」開発の方向性として示したキーワードのうち、「Flexible(柔軟性)」「Scalability(拡張性)」「Integration and Maintenance(統合とメンテナンス性)」について取り上げた。

 後編では引き続き、「Secure(安全性)」「Resilient(回復性・耐久性)」というキーワードを見ていくとともに、日本レジストリサービス(JPRS)が「BIND 10」開発プロジェクトに参画することを決めた理由などを同社担当者に聞いていく。

DNSSECを使いやすくし、よりセキュアに

 まずは「Secure(安全性)」というキーワードだが、「BIND 10」開発プロジェクトにソフトウェアエンジニアとして参画しているJPRS技術戦略室の藤原和典氏によると、現行の「BIND 9」がセキュアでないというわけではなく、よりセキュアにしようという意味だという。

JPRS技術戦略室の藤原和典氏
JPRSシステム運用部の神戸直樹氏

  一方で、「BIND 9」では脆弱性が指摘されることがあるが、ソースコードが複雑化していて、コアな部分をメンテナンスできるのが数人に限られることがその要因の1つとして考えられる。同じくこのプロジェクトに参画しているJPRSシステム運用部の神戸直樹氏は「一から作り直すことでソースコードがシンプルになれば、メンテナンスできる人が増え、現状よりも安全性が上がるでしょう。」と説明する。

 さらにISCの発表文では、「BIND 10」では、DNSSECを一般的なDNS運用者でも使いやすくするとも述べている。DNSSECは、DNSの応答に電子署名を付加することで、その応答データの出自が正当なものであること、および内容が途中で書き換えられていないことを検証できるようにする仕組みだ。2008年に話題となったDNSキャッシュポイズニングの脆弱性(通称「カミンスキー攻撃」)の解決策としても最良の方法といわれているが、広く導入されるようになるには、運用面で「BIND 9」では難があるという。藤原氏によると、現行の「BIND 9」でもきちんと設定すればDNSSECを問題なく導入できるが、それを通常のDNS運用者が誰でも行えるかというのとは別のようだ。

 「1カ月に1回というように定期的に再署名の手続きをする必要がありますが、署名鍵の寿命を運用者が自分で決めて定期的に鍵更新しなければなりません。通常のDNS管理者は、1回ゾーン設定を行ってしまうと、サーバーを変えなければ何年でもそのまま動かしているのではないでしょうか。それが、今後はうまく動作しなくなる恐れがあります。実はBIND 9.6にも、鍵の自動更新機能こそ入っていませんが、署名の自動更新機能は入っています。きちんと設定すれば動作するのですが……。」(藤原氏)

 こうした部分が、「BIND 10」では「こなれていく」という。前編で説明があったような、BINDを設定するためのWebインターフェイスを用意。ゾーン管理を、ゾーンファイルというファイルではなく、完全にダイナミックなオペレーションで実現する方向に進めていく見込みだ。

 なお、DNSSECに関しては、導入が進めば、DNS運用者だけでなく、より広範囲での認知が期待される。JPRS技術戦略室室長の三田村健史氏は次のように語る。

 「SSLは、Webブラウザのアドレスバーの色が変わるだけで、恐らく認知度が上がりました。DNSSECも、ネットワーク機器やWebブラウザが対応してくると、SSLのようにユーザーにより近い技術になります。DNSベンダーだけでなく、特にSOHO・個人向けのブロードバンドルータメーカーや、ブラウザなどのアプリケーションベンダーにも関心を持ってほしい。」

 もう1つのキーワード「Resilient(回復性・耐久性)」については、「何か予期しないことが発生した際に、詳細なログを出力することで、フェイルセーフを向上させること」(藤原氏)だという。「BIND 9」でもログはそれなりに出力されるが、「BIND 10」では、より的確にログを出力するということを考えている模様だ。また、一部の機能のエラーが「BIND 10」全体の停止につながらないようにすることも考えている。2009年7月に見つかった「BIND 9」の脆弱性では、Dynamic Update機能の不具合が「BIND 9」の停止につながった。「BIND 10」ではこのような際にもクエリに対する応答は維持し、DNSサーバーとしてのサービスの継続ができる仕組みを検討している。ただし、現時点ではまだ具体的な実装の議論には至っていないという。

インターフェイスを開発しやすく

 以上、ISCが掲げたキーワードをもとに「BIND 10」の方向性について見てきたが、実際に現時点で視野に入っているのは、「まず、C++のクラスを使ってDNSサーバーとDHCPサーバーをきれいに作り直すこと。また、性能を求められない部分についてはPythonで作り、修正しやすくすること」(神戸氏)だという。

JPRS技術戦略室室長の三田村健史氏

 すなわち、DNSソフトウェアとして応答性能が求められるコアな部分をC++で開発する一方で、周辺部分にはPythonを用いることがポイントとなる。

 「Pythonで、インターフェイスを作りやすい環境を用意するということです。具体的なイメージはまだ決まっていませんが、ISCでは、いろいろなインターフェイスを作って簡単に使えるようにしようと考えているようです。今回、APIをしっかり定義しようということになっており、ドキュメントもきちんと用意して、外部の開発者が使いやすくするということも考えています。」(藤原氏)

 すなわち、ISCのメンバーでなくとも、外部の開発者が、自分たちの使いやすいようなインターフェイスを自分たちで作れるようになるわけだ。もちろん、「BIND 10」はこれまで同様、オープンソースで提供される。前編で紹介した通り、開発者向けの情報サイトやメーリングリストも公開されており、一般の開発者も広く参加できるかたちをとっているという。

 「BIND 10では、DNSの運用者に対しても、開発者に対しても配慮しているといえます。機能の追加が容易になるというよりは、世界中のいろいろな開発者が参画して、BINDの機能を拡張しやすくなるということでしょう。もしかしたら、アプライアンスベンダーがBINDを使うようになり、DNSの利用者層を広げるかもしれません。それには、DNS単体として考えるよりも、DHCPサーバーのようにオールインワンのアプライアンスでDNS機能を用意しておき、すぐに使えるようにするのが一番の方法だと思います。今回、JPRSのノウハウを投入することで、DNSをソリューションとしても展開できるものとして敷居を下げようということなのです。」(三田村氏)

JPRSが「BIND 10」開発に参画する意味

 ISCが出した4月22日付の発表資料には、JPRS代表取締役社長の東田幸樹氏が「インターネットは、拡大とともに、社会基盤としての信頼性を求められている。BIND 10は、DNSSECのフルサポート、大規模DNSの柔軟な運用など、これからのインターネットを支えるDNSに必要なものを実現する。JPRSは、レジストリとしての経験を活かし、TLDレジストリだけでなく、世界中のDNS運用者とユーザーのためにも、このプロジェクトを積極的にサポートしていく」とのコメントを寄せている。

JPRS技術戦略室室長代理の佐藤新太氏

 確かに、今日ではDNSの役割は名前解決をするだけではなくなり、DNSがなければMXレコードを参照できず、メールすら送れない。さらにはSIPや、最近ではスパムメール対策技術のSPFやDKIMでもDNSが活用されている。DNSが止まることはインターネットサービスの基盤が崩れてしまうことを意味するため、その運用面を改善し、より安定性を高めることが「BIND 10」の目標だ。

 こうした側面があるからこそ、JPRSでは「BIND 10」開発プロジェクトに賛同し、そこにリソースをつぎ込むことが重要と判断したという。プロジェクト参画にあたっては、JPRSの2つの立場から、インターネットの安定や、ひいては社会貢献につながることを強調している。

 「まずccTLDのレジストリ事業者という立場では、JPRSは会社設立から9年が経ち、DNSの運用についてのノウハウが蓄積されてきています。その運用者としてのノウハウをBIND 10にフィードバックすることで、今後のインターネットの安定運用に貢献できればと思います。もう1つは、我々はDNSのスペシャリスト集団として、DNSの新技術の開発者という立場で新しい枠組みに参加することにより、運用者としての我々もレベルアップできることを期待しています。今後、TLDが新設されていけば、これまでBINDに触れたことのなかった人も触れていくようになると思います。長年DNSを運用してきたJPRSとして、そうした方々に対しても運用のノウハウを提供していくことが使命であり、それがインターネット全体の健全な運用につながるのではないでしょうか。」(三田村氏)

 「我々としても、多くのユーザーにDNSを上手に使い続けていただくことが、インターネットの安定・発展につながるものと考えています。」(JPRS技術戦略室室長代理の佐藤新太氏)


関連情報

(永沢 茂)

2009/8/21 13:00