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

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

ロゴ:JPNIC

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

idnkit の概要


国際化ドメイン名とは

従来、ドメイン名には、英字、数字(およびハイフン)しか使えませんでした。 国際化されたドメイン名とは、ドメイン名としてこれらに加えて日本語など いろいろな言語の文字を使えるようにしたものです。 実現方式の標準化が、 IETF (The Internet Engineering Task force) の IDN (Internationalized Domain Name) ワーキンググループで進められています。 (参考文献 参照)。

ここではまず、国際化ドメイン名を扱うために必要な、次の二つの基本的な 機能について説明します。


エンコーディング変換

DNS で国際化ドメイン名を使えるようにするには、まず DNS サーバ間で 国際化ドメイン名として使用するエンコーディング (文字コード) を決める 必要があります。 (idnkit では、このエンコーディングのことを「IDN エンコーディング」と 呼んでいます。)

IDN エンコーディングに関しては、ISO10646 (Unicode) で定義されている文字を、 従来のドメイン名として使うことのできる文字 (英数字とハイフン) だけを 使って表現するという方式が標準となりつつあります。 この方式は ACE (ASCII Compatible Encoding) とも呼ばれています。 たとえば、「国際化」というドメイン名を Punycode で変換すると、次のように なります。

zq--cjrr4g710f

ACE を使用すると、見かけ上は従来の ASCII ドメインと同じであるため、 既存の DNS サーバやリゾルバライブラリで特別な改造を行う必要はなく、 国際化ドメイン名をそのまま使うことができるという利点があります。

一方、一般のアプリケーションはシフト JIS 等のローカルエンコーディング を使用するので、国際化ドメイン名を使えるようにするためには、ACE と ローカルエンコーディングを相互に変換する処理を追加する必要があります。 つまり、DNS サーバにリクエストを送信する前に ACE にエンコードし、 DNS サーバからの応答に含まれていた ACE をローカルエンコーディングに デコードを行わなくてはなりません。

このアプリケーション側での変換処理については、 IDNA という方式が標準となりつつあります。 したがって、本キットもこの方式に基づいて作られています。


NAMEPREP

国際化ドメイン名を扱うためには、エンコーディング変換の他にも重要な機能が あります。それは NAMEPREP です。

すでに述べたように、DNS サーバ間で使用されるドメイン名のエンコーディング として提案されている方式は ISO10646 (Unicode) をベースとしていますが、 ISO10646 の中には、見かけ上は同じ文字が複数存在するものもあります。 このような文字に対する表現方法は統一しておかないと、ユーザが正しい (と思える) ドメイン名を入力したにも関わらず、名前解決ができないという不都合 が生じることになります。

また、従来の ASCII ドメイン名では、ドメイン名の大文字と小文字は区別して いませんでした。これをそのまま国際化ドメイン名にも適用することは、 一致比較の処理効率などの点で問題があり、あらかじめすべて小文字あるいは 大文字に統一するのがより効率的だと考えられます。

このようにドメイン名をあらかじめ設定した基準にしたがって標準形に変換するのが 正規化です。この処理はエンコーディング変換の直前に行われるため、 名前をあらかじめ前処理しておくという意味で NAMEPREP (NAME PREPeration) と呼ばれています。

NAMEPREP で規定されている正規化はすべての国際化ドメイン名に適用される ものですが、地域あるいは言語によっては NAMEPREP の正規化だけでは足りない、 別の正規化を行いたいという場合があります。 このため、idnkit では地域化のために次の2つの処理を用意しました。これらは NAMEPREP 処理の直前に実行されます。

デリミタマッピング
ドメイン名の区切り (デリミタ) 文字であるピリオド "." の 代りに誤って入力しがちな文字をピリオドに変換します。
トップレベルドメインに基づくローカルマッピング
ある文字を別の文字に変換するマッピング処理を行います。ただし どの文字をどの文字にマッピングするかというルールは 入力されたドメイン名のトップレベルドメイン (例えば .jp.kr) 毎に指定できます。 これにより、ドメイン名の属す地域固有の正規化を可能にします。

また、NAMEPREP では使用禁止文字 (prohibited character) や 未割り当てコードポイント (unassigned codepoint) の検出、 双方向文字列チェックも行われます。


idnkit の紹介

idnkitは、国際化ドメイン名を扱えるようにするためのパッチ、ツール、 ライブラリをまとめたものです。 現在の idnkit は次のライブラリ、コマンド、パッチから構成されています。

idnkit ライブラリ

アプリケーションを国際化ドメイン名に対応させるために必要な、 エンコーディングの変換や NAMEPREP の機能を実装したライブラリです。 後述する BIND パッチ、idnconv、runidn コマンドはすべてこのライブラリ を使用しています。

idnkit ライブラリを用いたアプリケーションの開発について、詳しくは idnkit ライブラリの API をご覧ください。

idnconv コマンド

ACE とローカルエンコーディング (例えば 日本語EUC やシフトJIS) との間 の変換を行うツールです。 BIND の設定ファイル (named.conf) やゾーンファイルを変換 することも可能です。

idnconv の使用方法について、詳しくは idnconv をご覧ください。

BIND に対するパッチ

このパッチは BIND 8 および 9 に付属する dig や nslookup コマンドに、 エンコーディングの変換や NAMEPREP の機能を持たせるものです。 これらのコマンドの引数に国際化ドメイン名をローカルエンコーディングで 指定することが可能になります。

runidn の使用方法について、詳しくは BIND パッチ をご覧ください。

runidn コマンド

このコマンドは、Unix アプリケーションを再コンパイルすることなしに 国際化ドメイン名を扱えるようにします。 これは共有ライブラリの動的リンク機構を利用して、リゾルバライブラリの 提供する名前解決用の関数を国際化ドメイン名の処理を付加したバージョンに 動的に置き換えることで実現されます。

conversion/NAMEPREP by runidn

runidn にはいくつかの制限事項があり、すべてのアプリケーションに適用でき るものではありません。

runidn の使用方法について、詳しくは runidn をご覧ください。

idn wrapper

これは Windows のアプリケーションを、やはり再コンパイルなしに 国際化ドメイン名を扱えるようにするものです。 DLL の機構を利用して、名前解決を行う WINSOCK DLL の一部の関数に 国際化ドメイン名の処理を付加することで実現されています。

conversion/NAMEPREP by winsock wrapper

idn wrapper の使用方法について、詳しくは idn wrapper をご覧ください。

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

このWebページは役に立ちましたか?
ページの改良点等がございましたら自由にご記入ください。

このフォームをご利用した場合、ご連絡先の記入がないと、 回答を差し上げられません。 回答が必要な場合は、お問い合わせ先をご利用ください。

ロゴ:JPNIC

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