mDNkit では bind9 用のパッチファイルを提供しています。 このパッチを適用することにより、 bind9 において多言語ドメイン名を扱うことが可能になります。
具体的には、このパッチは bind9 に次のような機能を追加します。
bind9 へのパッチの適用方法は、パッチファイルの先頭に記載してあります。 インストールガイドの bind9 用パッチの適用とインストールも ご覧ください。
このパッチの適用により、DNS サーバである named に対して、 UTF-8 文字の透過機能が追加されます。
bind9 の named ではドメイン名の処理はほとんど8ビットスルーになって いるのですが、named 内のドメイン名の内部表現からテキスト表現への 変換部分は8ビットスルーになっておらず、ASCII 文字以外 はバックスラッシュでクォートされ、\DDD という形式の表現に 変換されてしまいます。
これは DNS プロトコル上で用いられるエンコーディングとして UTF-8 を 使用する場合に問題となります。
本パッチでは、変換しようとする文字がUTF-8 文字の 場合にはバックスラッシュによるクォートをせずそのまま透過させる機能を 追加しました。 この動作は named の設定ファイル (named.conf) で切り替えることができます。 デフォルトは互換性のため透過しない設定になっています。 もしDNS プロトコル上で用いるエンコーディングとして UTF-8 を用いる場合には、 設定ファイルの options セクションの allow-utf8 パラメータを 次のように指定してください。
options { ... allow-utf8 yes; ... };
DNS プロトコル上で用いられるエンコーディングとして RACE 等の ASCII 互換エンコーディングを 使用する場合には、この設定は不要です。
bind9 のリゾルバは、bind8 までのものとは全く異なり、 lightweight resolver ライブラリと呼ばれるアプリケーションに リンクされるライブラリと、lightweight resolver デーモンと呼ばれる サーバから構成されています。
本パッチを適用することにより、このリゾルバに多言語ドメイン名の 処理機能が加わります。具体的には次のような機能が追加されます。
DNS プロトコル上で用いられるエンコーディングや使用する正規化方式の指定は あらかじめコンフィギュレーションファイルで設定しておきます。 このファイルの設定方法については mDNkit リゾルバのコンフィギュレーション をご覧ください。
以下に、パッチによって多言語化される名前解決用 API 関数の一覧を示します。 多言語化された API 関数は、従来の ASCII ドメイン名に加え、 非 ASCII ドメイン名を扱うことができます。
引数の型や返り値の型に変更はありません。 パッチを当てる前と同様の呼び出し方法で、従来の ASCII ドメイン名と、 非 ASCII ドメイン名の両方を扱うことができます。
本パッチを適用した bind9 リゾルバは MDN ライブラリ を利用してエンコーディング 変換や正規化を行います。従って bind9 リゾルバを使用したクライアントを コンパイルする場合、MDN のライブラリ libmdn をリンクする必要が あります。もしあなたのシステムが iconv() をサポートしていない 場合には、iconv() のライブラリも合わせてリンクする必要があります。
bind9 には DNS の問い合わせツールとして dig、host、nslookup という コマンドが付属します。bind9 パッチを適用することにより、これらはいずれも 多言語ドメイン名が扱えるようになります。具体的には以下の機能が 付加されます。
DNS プロトコル上で用いられるエンコーディングや使用する正規化方式の指定は あらかじめコンフィギュレーションファイルで設定しておきます。 このファイルの設定方法については mDNkit リゾルバのコンフィギュレーション をご覧ください。