メインコンテンツへジャンプする

JPNICはインターネットの円滑な運営を支えるための組織です

ロゴ:JPNIC

WHOIS 検索 サイト内検索 WHOISとは? JPNIC WHOIS Gateway
WHOIS検索 サイト内検索

DNSサーバの設定

DNSサーバにて多言語ドメイン名を扱うための設定方法について 解説します。とはいっても従来の ASCII ドメイン名の場合の設定方法と 大きく変わるわけではありません。 ただ一つ注意すべき点は 「ゾーンマスタファイル等のエンコーディングを変換する必要がある」 ということです。

DNSサーバの設定の手順は、およそ以下の通りです。

  1. エンコーディング・正規化方式を決める。
  2. DNS サーバを用意する。
  3. named.conf、ゾーンマスタファイルを作成する。

設定で使用するエンコーディング変換ツール mdnconv の外部仕様 および内部処理の詳細に関しては、 mdnconv の仕様書をご覧ください。

また、クライアントからこれらの DNS サーバにアクセスするためには、 多言語ドメイン名変換 APIrunmdnmDN Wrapper などを使用してクライアント側で エンコーディング変換や正規化を行うか、あるいは エンコーディング変換を行うプロキシサーバである mdnsproxy を通す必要があります。 mdnsproxy の設定については mDNS Proxy Server の設定で説明します。


エンコーディング・正規化方式の決定

まず DNS の設定に先だって、DNS サーバで使用するドメイン名の エンコーディングおよび正規化方式を決める必要があります。

評価しようとする DNS の多言語化方式が決まっていれば、 その方式に合わせることになります。 現在提案されている方式の中から、使用するエンコーディング・正規化を いくつか紹介します。これ以外の方式も多数提案されています。詳しくは 参考文献をご覧ください。

その他 mDNkit がサポートしているエンコーディング・正規化方式については MDN ライブラリの仕様を参照してください。

もちろん、1台の DNS サーバに複数のエンコーディングを持たせることも可能 です。この場合はゾーン毎に異なるエンコーディングを割り当てることになる でしょう。ただし mDNkit を用いて多言語ドメイン名の扱いを可能にした クライアントや mdnsproxy は DNS サーバ側のエンコーディングが単一である ことを仮定しているので、例えば mdnsproxy の場合にはエンコーディング毎に 複数の mdnsproxy を起動するなどのテクニックが必要です。


DNS サーバの用意

mDNkit では、エンコーディングとして Punycode や RACE といった ASCII 互換エンコーディング (ACE: ASCII Compatible Encoding) を 用いることを前提としています。 したがって、エンコード結果は従来のホスト名として正当な文字列になるので、 現在使用中の DNS サーバをそのまま使うことができます。


named.conf、ゾーンマスタファイルの作成

named.conf やゾーンマスタファイル書き方自体は、 多言語ドメイン名と従来のドメイン名で変わるところはありません。 単にドメイン名に漢字などを含めることができるかどうかだけの違いです。

DNS サーバ自体にエンコーディング変換機能は備わっていないので、 DNS の読み込む named.conf ファイルやゾーンマスタファイルの エンコーディングはエンコーディング・正規化方式の決定で 決定したエンコーディングに合わせる必要があります。 mdnconv はこのような目的のために設計されたコード変換ツールです。

Punycode や RACE なら、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 で出力テキストのエンコーディングを指定います。 オプションの一覧とどのような値が指定できるかについては、 mdnconv の仕様書をご覧ください。

逆に RACE エンコーディングから EUC-JP への変換も大抵の場合は可能で すが、必ず元の EUC-JP ファイルに戻せるとは限りません。 これは、入力された文字列の中で ASCII 互換エンコーディングを用いて 表記されている個所とそうでない通常の ASCII 表記の場所を、厳密に区別 することはできないからです。

一般的には ASCII 互換エンコーディングからローカルエンコーディング への変換を行うことはできないということを覚えておいてください。 これについては mdnconv の仕様書の 変換処理の詳細を参照してください。

以上のことから、ゾーンマスタファイル等 DNS サーバが読み込むファイル の作成と管理には次のような方法をとるのがよいと考えられます。 まずローカルエンコーディングを用いて記述した版を用意して、これに対して 編集やバージョン管理を行います。 そして mdnconv を用いてエンコーディング変換と正規化を行い、 DNS サーバの使用するエンコーディング版のファイルを生成して、これを DNS サーバが読み込むためのファイルとして使用します。

とはいってもローカルエンコーディング版のファイルを改訂するたびに mdnconv を実行してサーバエンコーディング版のファイルを作るのは面倒です。 この場合例えば make コマンドを使用すれば変換を自動化することができます。

例えばローカルエンコーディング版のファイル名に サフィックス .local、Punycode エンコーディング版に サフィックス .puny、RACE エンコーディング版にサフィックス .race をつけるとします。 すると次のような Makefile を書くことにより、ローカルエンコーディング版を 更新したら make を実行するだけで変換を自動的に行うことができます。

.SUFFIXES: .local .puny .race

.local.puny:
        mdnconv -in $(LOCALCODE) -out Punycode -nameprep $(NAMEPREP) \
            $< > $@
.local.race:
        mdnconv -in $(LOCALCODE) -out RACE -nameprep $(NAMEPREP) \
            $< > $@

LOCALCODE = EUC-JP
NAMEPREP  = 06

TARGETS = db.foo.puny

all: $(TARGETS)

1つの DNS サーバに異なるエンコーディングの複数のゾーンのマスタを させようとした場合、named.conf に複数のエンコーディングを 混在させなくてはならない状況になることがあります。残念ながらこれは mdnconv では無理なので、include ディレクティブ等を使って ファイルを分割し、1つのファイルに複数のエンコーディングが 混在しないようにしてください。

このページを評価してください

このWebページは役に立ちましたか?
よろしければ回答の理由をご記入ください

それ以外にも、ページの改良点等がございましたら自由にご記入ください。

回答が必要な場合は、お問い合わせ先をご利用ください。

ロゴ:JPNIC

Copyright© 1996-2024 Japan Network Information Center. All Rights Reserved.