
				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 $
