ここでは、DNSサーバで国際化ドメイン名を扱う場合の手順や注意点について 述べています。
DNSサーバで国際化ドメイン名を扱う方法について、解説します。 とはいえ、従来のASCIIドメイン名の場合の設定方法と大きく変わるわけでは ありません。 ただ一つ注意すべき点は 「ゾーンファイルやDNSサーバの設定ファイルのエンコーディングを 変換する必要がある」 ということです。
「国際化ドメイン名とは」で記したように、 国際化ドメイン名は実際にはUTF-8などのエンコーディングで直接表現される のではなく、PunycodeというASCIIと互換な表現形式を用います。 DNSサーバも同様で、設定ファイルやゾーンファイルに直接UTF-8で国際化 ドメイン名を書いても認識しません。 Punycodeに変換したファイルを用意して、それを読み込ませる必要があります。
DNSサーバで国際化ドメイン名の設定を行う上で必要となるのは、この 「Punycodeに変換したファイル」を用意することです。 もちろん、ゾーンファイルにPunycodeで直接
; こんにちは.example.jp xn--28j2a3ar1p.example.jp. IN CNAME server.example.jp.
のように書ければ苦労はありませんが、これを手作業で行うのは大変です。
idnkit付属のidnconv2という変換ツールを使うと、ファイルを簡単に
Punycodeへ変換することができます。
たとえば、BIND 9の設定ファイル (named.conf
) をUTF-8で
直接次のように記述したとします。
options { directory "/etc/namedb"; }; zone "привет.jp" { type master; file "example.jp.zone"; }; zone "мир.jp" { type master; file "example.jp.zone"; };
この設定ファイルの名前をnamed.conf.utf8
とすると、
次のコマンドを実行することで、Punycodeに変換したファイル
named.conf.puny
が生成されます。
必要に応じて、-in
オプションで入力テキストの
エンコーディングを指定します。
% idnconv2 -in UTF-8 named.conf.utf8 > named.conf.puny
変換後のファイルを見てみると、国際化ドメイン名の部分がPunycodeで 置き換わっているのが分かります。
options { directory "/etc/namedb"; }; zone "xn--b1agh1afp.jp" { type master; file "example.jp.zone"; }; zone "xn--h1ahn.jp" { type master; file "example.jp.zone"; };
このようにidnconv2は、国際化ドメイン名の箇所だけを抜き出してPunycode に変換します。 ただし、ASCII以外の文字でファイル内にコメントを記すと、誤って変換して しまうことがありますので、注意して下さい。 上記は設定ファイルの変換例でしたが、ゾーンファイルについても同様の 手順で変換できます。
また大抵の場合は、Punycodeからのデコード (逆変換) も可能です。
% idnconv2 -reverse -out UTF-8 named.conf.puny > named.conf.utf8_2
-reverse
オプションで、逆変換を指示しています。
しかし残念ながら、必ず元のUTF-8ファイルに戻せる保証はありません。
これは、入力された文字列の中でPunycodeを用いて表記されている箇所と
そうでない通常のASCII表記の箇所を、厳密に区別することはできないため
です。
逆変換では必ず元に戻せるとは限らないため、 変換が済んだ後も元のUTF-8ファイルは保管しておくことをお薦めします。
idnconv2の使い方の詳細については、 「idnconv2コマンドの使用方法」をご覧下さい。
最後に、変換の手間を極力減らす方法を紹介します。
たとえばUTF-8版のファイル名の末尾には.utf8
、Punycode
エンコーディング版に.puny
をそれぞれ付けるものとします。
次のようなMakefileを用意します。
ただし、「TARGETS = ...
」の部分に、実際に変換したいファイル
を書き並べます。ファイル名同士は空白で区切ります。
もしUTF-8ではなく、他のエンコーディングでファイルを記述した場合は、
「LOCALCODE = ...
」の部分も適宜書き換えて下さい。
LOCALCODE = UTF-8 TARGETS = named.conf.puny .SUFFIXES: .utf8 .puny .utf8.puny: rm -f $@ idnconv -in $(LOCALCODE) $< > $@ all: $(TARGETS)
UTF-8版のファイルの更新が終わったら、makeコマンドを実行します。
% make
これにより、更新されたUTF-8ファイルすべてについて、Punycode版の ファイルが再作成 (ないし新規作成) されます。