Files
bind9/contrib/idn/mdnkit/README.ja
2001-06-09 00:30:55 +00:00

357 lines
13 KiB
Plaintext

mDNkit
-- 多言語ドメイン名ツールキット --
バージョン 2.1
(社) 日本ネットワークインフォメーションセンター (JPNIC)
* 概要
mDNkit とは多言語ドメイン名を扱うためのツールキットです。多言語ドメイ
ン名を扱うためには、次のような機能が要求されます。
・エンコーディング変換
多言語ドメイン名に対して、そのエンコーディングをアプリケーションが使
用しているもの (ローカルエンコーディング) から名前解決に用いられるも
の (IDN エンコーディング) への変換、またその逆方向の変換を行います。
ドメイン名を IDN エンコーディングにした結果は、従来のドメイン名と同
じく ASCII 文字のみで構成されるので、IDN エンコーディングはASCII 互
換エンコーディング (ACE) とも呼ばれます。
・NAMEPREP
ドメイン名を IDN エンコーディングに変換する前に、名前の正規化を行い
ます。これを NAMEPREP と呼びます。
上記の処理はドメイン名を DNS サーバに送る前に実行する必要があります。
処理済のドメイン名は ASCII 文字から構成され、従来の ASCII ドメイン名と
しても正しい形式になっているので、DNS サーバ側にはなんの変更も必要あり
ません。
この配布キットには次のようなものが含まれます。
・多言語ドメイン名を処理するためのライブラリ (libmdn)
これはエンコーディング変換や NAMEPREP の機能を実装したライブラリです。
このライブラリはこれらの機能を使うためのシンプルな API を備えているので、
このライブラリを使用すれば、多言語ドメイン名を扱う機能を簡単に
アプリケーションに追加することができます。
またこのライブラリは本ツールキットに含まれるさまざまなコマンド
(mdnsproxy や mdnconv など) を実装するのにも使われています。
・DNSプロキシサーバ (mdnsproxy)
ドメイン名変換機能をもつ DNS のプロキシサーバです。クライアントから
受信した DNS メッセージ中のドメイン名をクライアントのローカルエンコー
ディングから DNS サーバの使用する DNS プロトコル上のエンコーディング
へと変換して DNS サーバに送信します。また DNS サーバから返されたDNS
メッセージ中のドメイン名をクライアントのローカルエンコーディングに戻
してクライアントに返します。詳しくは、後述の「2. mdnsproxy を使う」
を御覧ください。
・UNIX アプリケーションに MDN 機能を動的に追加するコマンド (runmdn)
UNIX の通常のアプリケーションで多言語ドメイン名を取り扱うために、特
別なライブラリを動的にリンクするためのコマンドです。詳しくは、後述の
「3. runmdn を使う」を御覧ください。
・bind-9 に MDN 機能を追加するパッチ
bind-9 に MDN の機能を追加するパッチです。`dig'、`host'、`nslookup'
にエンコーディング変換と NAMEPREP の機能を追加し、多言語ドメイン名が
扱えるようにします。
・Windows アプリケーション用の mDN ラッパー
WINSOCK の名前解決機能に対するラッパー DLL です。Windows 上では、名
前解決の要求は、WINSOCK DLL を通して行われます。そこで、これを多言語
ドメイン用の WINSOCK DLL に置き換えることで、従来の Windows アプリケー
ションでも mDN 機能を使用できるようにします。詳しくは、後述の
「4. mDN ラッパーを使う」を御覧ください。
・named.conf およびゾーンマスタファイル用コードセットコンバータ (mdnconv)
named.conf およびゾーンマスタファイルを対象としたコードセット (エン
コーディング) 変換用ツールです。SJIS などのローカルエンコーディング
で書かれたこれらのファイルを、IDN エンコーディング (例えば RACE) へ
と変換します。
・bind-8 を 8 ビットスルー化するパッチ
named やリゾルバでローカルエンコーディングや UTF-8 エンコーディング
のドメイン名を使用可能にするためのパッチです。8ビットスルーなのでほ
とんどどんなコードでも通ってしまいます。
・squid を 8 ビットスルー化するパッチ
URL 中のホスト名に関する正当性チェックを外すためのパッチです。このパッ
チを当てないと Squid は多言語ドメイン名を含む URL をエラーとしてはじ
いてしまいます。
この配布キットは、以上のものを用いて、多言語ドメイン名を扱うための複数
の方法を提供しています。
** 1. API を使う
多言語ドメイン名を扱うための方式としてはこの方法が推奨されています。
アプリケーションは mDNkit の提供する API を明示的に呼び出して
エンコーディング変換や NAMEPREP を行います。
ACE エンコーディングの
+----------------+-------+--------+ ドメイン名
| | | | +------------+
| クライアント | mdn |システム|----------->| DNS サーバ |
|アプリケーション|library| 付属の |<-----------| |
| | |リゾルバ| +------------+
+----------------+-------+--------+
** 2. mdnsproxy を使う
上記の API を使うようにアプリケーションを修正できない場合でも、
mdnsproxy を使用すれば多言語ドメイン名の名前解決を行うことが
可能です。ただしこの場合アプリケーションが 8 ビットスルーの
リゾルバを使っていることが前提となります。
ローカルエン エンコーディン ACEエンコーディ
コードィング グ変換および正 ングのドメイン名
+----------------+のドメイン名 規化
| クライアント | +--------------+ +------+
|アプリケーション|------------>| mdnsproxy |------------>| DNS |
|と 8ビットスルー|<------------| |<------------|サーバ|
| 化したリゾルバ | +--------------+ +------+
+----------------+
** 3. runmdn を使う
あるいは、クライアントアプリケーションが名前解決 用の API
(gethostbyname など) を動的にリンクし、かつ OS が適切な機能を
備えている場合には runmdn を使うこともできます。名前解決用の
API を、エンコーディング変換や NAMEPREP 機能を備えたバージョンの
ものに動的に置換えることにより、通常のアプリケーションが多言語
ドメイン名を名前解決できるようにします。
エンコーディング変換 ACEエンコーディ
および正規化 ングのドメイン名
+----------------+------------------+
| クライアント |動的にリンクされた| +------+
|アプリケーション| ライブラリ |---------------->| DNS |
|と通常のリゾルバ| |<----------------|サーバ|
+----------------+------------------+ +------+
** 4. mDN ラッパーを使う
WINSOCK DLL をラップすることにより、mDN ラッパーは Windows の
アプリケーションが多言語ドメイン名を名前解決できるようにします。
ローカルエ 正規化および ACEエンコーディ
ンコーディ エンコーディ ングのドメイン名
+----------------+ ングのドメ ング変換
|従来の Windows | イン名 +---------+------------+ +------+
|ネットワーク |---------->| mDN | オリジナル |---------->| DNS |
|アプリケーション|<----------| ラッパー| winsock |<----------|サーバ|
+----------------+ +---------+------------+ +------+
* ディレクトリ構成
配布キットのディレクトリ構成と、主要なファイルを示します。
README 英語版の README
README.ja このファイル
DISTFILES 配布されるファイル一覧
NEWS 主な変更
ChangeLog 変更詳細
configure configure スクリプト
Makefile.in トップレベルの Makefile のテンプレート
include/ インクルードファイルディレクトリ
config.h.in config.h のテンプレート
mdn/ mdn ライブラリ用インクルードファイル
lib/ mdn ライブラリソース
mdnsproxy/ DNS プロキシサーバソース
patch/ 各種パッチファイル
bind8/ bind8 用パッチ
bind9/ bind9 用パッチ
libiconv/ libiconv 用パッチ
squid/ squid 用パッチ
tools/ 周辺ツール
mdnconv/ コードセットコンバータソース
runmdn/ runmdn コマンドソース
util/ ユーティリティ
wsock/ mDN ラッパーソース
* コンパイルおよびインストール
0. 前準備
もしあなたの使用しているシステムのライブラリに iconv() がない場合、あ
るいはあっても UTF-8 を扱うことができない場合にはあらかじめ iconv() を
インストールしておいてください。iconv() の実装は、例えば LGPL のものが
http://clisp.cons.org/~haible/packages-libiconv.html
から入手可能です。
*注意*
上記実装の最新版 (libiconv-1.6.1) は NetBSD 1.5 との組合わせで問題が
あり、コンパイル時にエラーが発生します。このバグを修正するためのパッ
チが patch/libiconv ディレクトリの下に用意されていますので、この問題
に遭遇した場合にはパッチを当ててから再インストールしてください。なお、
パッチの当て方はパッチファイルの先頭に書かれています。
1. configure スクリプトの実行
トップディレクトリにある configure スクリプトを実行してください。
% ./configure
configure スクリプトにはいくつかのオプションを指定することができます。
mdn に直接関係するものは次の通りです。
--with-iconv=LIB
libc に iconv が入っていない場合 (上記のパッケージを入れた
場合など) に、iconv のライブラリを指定します。例えば
--with-iconv="-L/usr/local/lib -liconv"
のように指定します。もし iconv が共有ライブラリになっている
場合には、-R オプションも指定して
--with-iconv="-L/usr/local/lib -R/usr/local/lib -liconv"
とする必要があるかもしれません。
--with-iconv-sofile=PATH
mDNkit に含まれている runmdn コマンドは、iconv() が libc の一
部として提供されないときに、iconv() を含む共有ライブラリへのパ
ス名を知る必要があります。mDNkit は、--with-iconv オプションの
記述を基にパス名を検索しますが、これに失敗したときに、以下のよ
うに共有ライブラリを指定することができます。
--with-iconv-sofile=/usr/local/lib/libiconvv.so.2.0
--with-utf8=NAME
iconv に utf-8 エンコーディングを指定する場合、本ライブラリは
デフォルトでは "UTF-8" という名前を指定します。もしあなたの
システムの iconv が "UTF-8" という名前を受け付けない場合には、
代りの名前を指定します。例えば "UTF-8" ではなく "utf8" の
場合には次のように指定します。
--with-utf8=utf8
--with-preference=PREFERENCE
mDNkit のサンプルコンフィギュレーションファイル (mdn.conf.sample)
の設定を PREFERENCE 向けのものにします。またこのオプションを指定
するとデフォルトのコンフィギュレーションファイル (mdn.conf) が
インストールされます。ただしファイルがすでに存在している場合には
インストールしません。
現在のところ、指定できる PREFERENCE は "jp" のみです。
--with-race-prefix=PREFIX
--with-brace-suffix=SUFFIX
--with-lace-prefix=PREFIX
--with-dude-prefix=PREFIX
RACE (Row-based ASCII-Compatible Encoding)、BRACE (Bi-mode
Row-based ASCII-Compatible Encoding)、 LACE (Length-based
ASCII Compatible Encoding) および DUDE (Differential Unicode
Domain Encoding) はいずれも DNS プロトコル上で使用される多言語
ドメイン名に関して提案されているエンコーディング方式です。通常
の ASCII ドメイン名とこれらによってエンコードされたドメイン名
を区別するために、固定の接頭辞 (BRACE の場合には接尾辞) が用い
られます。
mDNkit では現在のインターネットドラフトで定義されている接頭辞
あるいは接尾辞を使用するようになっていますが、今後のドラフトで
変わるかもしれません。そこで、これらのオプションを用いて指定で
きるようになっています。
--with-altdude-prefix=PREFIX
--with-altdude-suffix=SUFFIX
--with-amc-ace-m-prefix=PREFIX
--with-amc-ace-m-suffix=SUFFIX
--with-amc-ace-o-prefix=PREFIX
--with-amc-ace-o-suffix=SUFFIX
--with-amc-ace-r-prefix=PREFIX
AltDUDE、AMC-ACE-M、AMC-ACE-O および AMC-ACE-R も RACE などと
同様に多言語ドメインのエンコーディングとして提案されているもの
です。ただしこれらのエンコーディングは RACE など上にあげたもの
と異なり、インターネットドラフトでは特定の接頭辞、接尾辞が定義
されていません。mDNkit ではデフォルトの接頭辞/接尾辞を設定して
ありますが、ここにあげたオプションを使用すれば別のものに変更す
ることが可能です。
AltDUDE、AMC-ACE-M および AMC-ACE-O については、接頭辞、接尾辞
のどちらを指定することも可能です。もし接頭辞と接尾辞の両方が指
定された場合には、接頭辞の指定が優先されます。
--sbindir=DIR
DNS プロキシサーバをインストールするディレクトリを指定します。
デフォルトでは /usr/local/sbin です。
--bindir=DIR
コードセットコンバータ mdnconv をインストールするディレクトリを
指定します。デフォルトでは /usr/local/bin です。
--sysconfdir=DIR
DNS プロキシサーバの設定ファイルをインストールするディレクトリを
指定します。デフォルトでは /usr/local/etc です。
--mandir=DIR
オンラインマニュアルのインストールディレクトリを指定します。
デフォルトでは /usr/local/man です。
--with-iconv オプションではライブラリだけを指定します。もしインクルー
ドファイル iconv.h がデフォルトのインクルードファイルのパスにインストー
ルされていない場合、あるいは他に C コンパイラへのオプションを指定した
い場合には環境変数 CFLAGS を使用してください。例えば
% CFLAGS=-I/usr/local/include ./configure ...
(sh 系のシェルの場合)
% setenv CFLAGS -I/usr/local/include; ./configure ...
(csh 系のシェルの場合)
とします。
configure には他にも多くのオプションがありますが、残りは一般的なオプショ
ンなので説明は省きます。
% ./configure --help
を実行するとオプションの一覧が表示されます。
2. コンパイル
configure を実行すると Makefile などが生成されますので、続けて makeを
実行してコンパイルします。
% make
3. インストール
スーパユーザになってインストールします。
% su
# make install
4. Configuration and usage
インストールされるツール (mdnsproxy、mdnconv、runmdn) の使い方、設定方
法に関してはオンラインマニュアルをご覧ください。mdnconv と runmdn につ
いては、mDNkit のリゾルバ設定ファイル mdn.conf のマニュアルも参照して
ください。
% man mdnsproxy
% man mdnconv
% man runmdn
% man mdn.conf
* パッチの当て方
この配布キットには、bind-9.1.1、bind-8.2.3 および squid-2.4-STABLE1 に
対するパッチが含まれています。パッチの当て方は、パッチファイルの先頭に
書かれていますのでそちらを参照してください。
Solaris では、システム付属の patch コマンドが正常に動作しないことがあ
ります。そのような場合には、GNU バージョンの patch
(http://www.gnu.org/software/patch/) をインストールして、これを使用し
てください。
* 本キットに関する最新情報、問い合わせについて
本キットに関する最新情報については、
http://www.nic.ad.jp/jp/research/idn/ を参照してください
本キットに関するバグレポートおよびコメントは、それぞれ
mdnkit-bugs@nic.ad.jp および idn-cmt@nic.ad.jp へお願いします。
; $Id: README.ja,v 1.29 2001/06/01 01:13:46 ishisone Exp $