BIND 9 パッチ
概要
mDNkit に含まれる BIND 9 用のパッチファイルを適用することにより、 BIND 9 に付属するいくつかのツールにおいて 従来の ASCII 文字によるドメイン名に加え、 非 ASCII 文字による多言語ドメイン名を扱うことが可能になります。
具体的には、BIND 9 に次のような機能を追加します。
- dig、host、nslookup コマンドがローカルエンコーディングのドメイン名を 受け付け、また問い合わせ結果に含まれるドメイン名をローカルエンコーディングで 表示する
BIND 9 へのパッチの適用方法は、パッチファイルの先頭に記載してあります。 なおパッチファイルについては、 対応する BIND のバージョンをよく確認してから、使用してください。
アーキテクチャ
mDNkit の以前のバージョンに含まれる BIND 9 パッチは、概要に記した 機能に加え、次のような機能も提供していました。
- lightweight resolver API (lwres_gethostbyname など) で、 ローカルエンコーディングで表現されたホスト名を名前解決する
- 同じく名前解決結果としてローカルエンコーディングで表現された ホスト名を返す
これはリゾルバレイヤで正規化やエンコーディング変換等の多言語ドメイン名処理を 実装するものですが、現在多言語ドメイン名処理のアーキテクチャとして 有力になりつつある IDNA では、これらの処理をすべてアプリケーション内で行うように規定しています。 mDNkit バージョン2 は IDNA に準拠しており、そのため上記の機能を BIND 9 パッチから外しました。
以下に BIND 9 の各コンポーネントで実装される機能と、コンポーネント間の インタフェースで用いるエンコーディングを表した図を示します。
dig/host/nslookup 修正
BIND 9 には DNS の問い合わせツールとして dig、host、nslookup という コマンドが付属します。mDNkit の BIND 9 パッチにより、これらはいずれも 多言語ドメイン名が扱えるようになります。具体的には以下の機能が 付加されます。
- エンコーディング変換
コマンド引数、あるいは標準入力から入力された、ローカルエンコーディングで 表現されたドメイン名を、DNS プロトコル上で用いられるエンコーディングに変換し、 DNS の問い合わせを発行します。また DNS の返答に含まれる多言語ドメイン名をローカルエンコーディングに 変換し、表示します。
- 正規化
DNS の問い合わせで、ローカルエンコーディングで表現されたドメイン名を DNS プロトコル上で用いられるエンコーディングに変換する際、ドメイン名の 正規化を行います。
これらの処理には MDN ライブラリの res モジュール を使用しています。 設定はmDNkit設定ファイルで行います。