DNSサーバの設定
DNSサーバにて多言語ドメイン名を扱うための設定方法について 解説します。とはいっても従来の ASCII ドメイン名の場合の設定方法と 大きく変わるわけではありません。 ただ一つ注意すべき点は 「ゾーンマスタファイル等のエンコーディングを変換する必要がある」 ということです。
DNSサーバの設定の手順は、およそ以下の通りです。
設定で使用するエンコーディング変換ツール mdnconv の外部仕様 および内部処理の詳細に関しては、 mdnconv の仕様書をご覧ください。
また、クライアントからこれらの DNS サーバにアクセスするためには、 多言語ドメイン名変換 API、 runmdn、 mDN Wrapper などを使用してクライアント側で エンコーディング変換や正規化を行うか、あるいは エンコーディング変換を行うプロキシサーバである mdnsproxy を通す必要があります。 mdnsproxy の設定については mDNS Proxy Server の設定で説明します。
エンコーディング・正規化方式の決定
まず DNS の設定に先だって、DNS サーバで使用するドメイン名の エンコーディングおよび正規化方式を決める必要があります。
評価しようとする DNS の多言語化方式が決まっていれば、 その方式に合わせることになります。 現在提案されている方式の中から、使用するエンコーディング・正規化を いくつか紹介します。これ以外の方式も多数提案されています。詳しくは 参考文献をご覧ください。
-
RACE: Row-based ASCII Compatible Encoding for IDN
RACE
というエンコーディング方式のプロポーザルです。 -
BRACE: Bi-mode Row-based ASCII-Compatible Encoding for IDN
BRACE
エンコーディング方式のプロポーザルです。 -
LACE: Length-based ASCII Compatible Encoding for IDN
LACE
エンコーディング方式のプロポーザルです。 -
UTF-6 - Yet Another ASCII-Compatible Encoding for IDN
UTF-6
エンコーディング方式のプロポーザルです。 -
DUDE: Differential Unicode Domain Encoding
DUDE
エンコーディング方式のプロポーザルです。 -
Preparation of Internationalized Host Names
NAMEPREPという、ドメイン名をエンコーデドする前に行う正規化方法に ついて記述した文書です。 -
Internationalizing Host Names In Applications (IDNA)
アプリケーションがどのように多言語ドメイン名を処理すべきかを記述した 文書です。
その他 mDNkit がサポートしているエンコーディング・正規化方式については MDN ライブラリの仕様を参照してください。
- エンコーディングについては converter モジュール
- 正規化方式については nameprep モジュール
もちろん、1台の DNS サーバに複数のエンコーディングを持たせることも可能 です。この場合はゾーン毎に異なるエンコーディングを割り当てることになる でしょう。ただし mDNkit を用いて多言語ドメイン名の扱いを可能にした クライアントや mdnsproxy は DNS サーバ側のエンコーディングが単一である ことを仮定しているので、例えば mdnsproxy の場合にはエンコーディング毎に 複数の mdnsproxy を起動するなどのテクニックが必要です。
DNS サーバの用意
mDNkit では、エンコーディングとして RACE や LACE といった ASCII 互換エンコーディング (ACE: ASCII Compatible Encoding) を 用いることを前提としています。 したがって、エンコード結果は従来のホスト名として正当な文字列になるので、 現在使用中の DNS サーバをそのまま使うことができます。
named.conf
、ゾーンマスタファイルの作成
named.conf
やゾーンマスタファイル書き方自体は、
多言語ドメイン名と従来のドメイン名で変わるところはありません。
単にドメイン名に漢字などを含めることができるかどうかだけの違いです。
DNS サーバ自体にエンコーディング変換機能は備わっていないので、
DNS の読み込む named.conf
ファイルやゾーンマスタファイルの
エンコーディングはエンコーディング・正規化方式の決定で
決定したエンコーディングに合わせる必要があります。
mdnconv はこのような目的のために設計されたコード変換ツールです。
RACE や LACE なら、ASCII 文字が編集できるエディタがあれば直接入力
することも可能ですが、例えば「こんにちは.世界.」と入力する代わりに
bq--gbjzg23bn4.bq--3bhbm5km.
などといった暗号のような文字列を (しかも正確に) 入力しなければならず、
変換ツールを使用するほうがはるかに簡単です。
例えば次のようなコマンドを実行すると EUC-JP で書かれたゾーンマスタファイル
db.somezone.euc
を RACE エンコーディングの db.somezone.race
に変換することができます。
% mdnconv -in EUC-JP -out RACE db.foo.euc > db.foo.race
-in
オプションで入力テキストのエンコーディングを、
-out
で出力テキストのエンコーディングを、
-nameprep
で NAMEPREP による正規化方法 (この例で指定
している 03
は NAMEPREP のバージョン番号) を指定して
います。
オプションの一覧とどのような値が指定できるかについては、
mdnconv の仕様書をご覧ください。
逆に RACE エンコーディングから EUC-JP への変換も大抵の場合は可能で すが、必ず元の EUC-JP ファイルに戻せるとは限りません。 これは、入力された文字列の中で ASCII 互換エンコーディングを用いて 表記されている個所とそうでない通常の ASCII 表記の場所を、厳密に区別 することはできないからです。
一般的には ASCII 互換エンコーディングからローカルエンコーディング への変換を行うことはできないということを覚えておいてください。 これについては mdnconv の仕様書の 変換処理の詳細を参照してください。
以上のことから、ゾーンマスタファイル等 DNS サーバが読み込むファイル の作成と管理には次のような方法をとるのがよいと考えられます。 まずローカルエンコーディングを用いて記述した版を用意して、これに対して 編集やバージョン管理を行います。 そして mdnconv を用いてエンコーディング変換と正規化を行い、 DNS サーバの使用するエンコーディング版のファイルを生成して、これを DNS サーバが読み込むためのファイルとして使用します。
とはいってもローカルエンコーディング版のファイルを改訂するたびに mdnconv を実行してサーバエンコーディング版のファイルを作るのは面倒です。 この場合例えば make コマンドを使用すれば変換を自動化することができます。
例えばローカルエンコーディング版のファイル名にサフィックス .lc
、
RACE エンコーディング版にサフィックス .race
、
LACE エンコーディング版にサフィックス .lace
をつけるとします。
すると次のような Makefile を書くことにより、ローカルエンコーディング版を
更新したら make を実行するだけで変換を自動的に行うことができます。
.SUFFIXES: .lc .race .lace .lc.race: mdnconv -in $(LOCALCODE) -out RACE -nameprep $(NAMEPREP) \ $< > $@ .lc.lace: mdnconv -in $(LOCALCODE) -out LACE -nameprep $(NAMEPREP) \ $< > $@ LOCALCODE = EUC-JP NAMEPREP = 03 TARGETS = db.foo.race all: $(TARGETS)
1つの DNS サーバに異なるエンコーディングの複数のゾーンのマスタを
させようとした場合、named.conf
に複数のエンコーディングを
混在させなくてはならない状況になることがあります。残念ながらこれは
mdnconv では無理なので、include
ディレクティブ等を使って
ファイルを分割し、1つのファイルに複数のエンコーディングが
混在しないようにしてください。