
				mDNkit
		   -- 多言語ドメイン名評価キット --
			    バージョン 1.2
       (社) 日本ネットワークインフォメーションセンター (JPNIC)


* 概要

mDNkit とは DNS で多言語ドメイン名を扱うために提案されている各種の方式
を評価するためのキットです。多言語ドメイン名を扱うためには、次のような
機能が要求されます。

・アプリケーションが使用するエンコーディング (ローカルエンコーディング)
  と DNS プロトコル上のエンコーディングとの間の、ドメイン名のエンコー
  ディング変換。
・ドメイン名の正規化。

mDNkit では、これらの機能を追加するための各種の方法を提供しています。

この配布キットには次のようなものが含まれます。

・DNSプロキシサーバ (dnsproxy)
  ドメイン名変換機能をもつ DNS のプロキシサーバです。クライアントから
  受信した DNS メッセージ中のドメイン名をクライアントのローカルエンコー
  ディングから DNS サーバの使用する DNS プロトコル上のエンコーディング
  へと変換して DNS サーバに送信します。また DNS サーバから返されたDNS 
  メッセージ中のドメイン名をクライアントのローカルエンコーディングに戻
  してクライアントに返します。詳しくは、後述の「1. dnsproxy を使う」を
  御覧ください。

・UNIX アプリケーションに MDN 機能を動的に追加するコマンド (runmdn)
  UNIX の通常のアプリケーションで多言語ドメイン名を取り扱うために、特
  別なライブラリを動的にリンクするためのコマンドです。詳しくは、後述の
  「2. runmdn を使う」を御覧ください。

・bind-9 に MDN 機能を追加するパッチ
  bind-9 に MDN の機能を追加するパッチです。bind-9 では、クライアント
  側のライブラリ (liblwres) と、新しい名前解決用デーモン (lwresd) から
  成る、ライトウエイトリゾルバという全く新しい名前解決の方法が使われて
  います。このパッチは、これらに MDN の機能を追加します。詳しくは、後
  述の「3. bind9 にパッチを当てて使う」を御覧ください。

・Windows アプリケーション用の mDN ラッパー
  WINSOCK の名前解決機能に対するラッパー DLL です。Windows 上では、名
  前解決の要求は、WINSOCK DLL を通して行われます。そこで、これを多言語
  ドメイン用の WINSOCK DLL に置き換えることで、従来の Windows アプリケー
  ションでも mDN 機能を使用できるようにします。詳しくは、後述の
  「4. mDN ラッパーを使う」を御覧ください。

・named.conf およびゾーンマスタファイル用コードセットコンバータ (mdnconv)
  named.conf およびゾーンマスタファイルを対象としたコードセット (エン
  コーディング)変換用ツールです。SJIS などのローカルエンコーディングで
  書かれたこれらのファイルを、多言語化 DNS で使用するエンコーディング 
  (例えばUTF-8) へと変換します。

・多言語ドメイン名を処理するためのライブラリ (libmdn, libmdnres)
  dnsproxy や mdnconv が利用しているライブラリです。エンコーディング変
  換や正規化、ZLD (zero-level domain) の処理等の機能を提供します。
  
・bind-8 を 8 ビットスルー化するパッチ
  named やリゾルバでローカルエンコーディングや UTF-8 エンコーディング
  のドメイン名を使用可能にするためのパッチです。8ビットスルーなのでほ
  とんどどんなコードでも通ってしまいます。

・squid を 8 ビットスルー化するパッチ
  URL 中のホスト名に関する正当性チェックを外すためのパッチです。このパッ
  チを当てないと Squid は多言語ドメイン名を含む URL をエラーとしてはじ
  いてしまいます。


この配布キットは、以上のものを用いて、多言語ドメイン名を扱うための複数
の方法を提供しています。

 ** 1. dnsproxy を使う

		     ローカルエン  エンコーディン  DNS プロトコル上の
		     コードィング  グ変換および正  エンコーディングの
   +----------------+のドメイン名  規化		   ドメイン名
   |クライアント    |             +--------------+             +------+
   |アプリケーション|------------>|   dnsproxy   |------------>| DNS  |
   |と 8ビットスルー|<------------|              |<------------|サーバ|
   |化したリゾルバ  |             +--------------+             +------+
   +----------------+

 ** 2. runmdn を使う

		     エンコーディング変換  DNS プロトコル上の
		     および正規化	   エンコーディングの
   +----------------+------------------+   ドメイン名
   |クライアント    |動的にリンクされた|                 +------+
   |アプリケーション|    ライブラリ    |---------------->| DNS  |
   |と通常のリゾルバ|   (libmdnres)    |<----------------|サーバ|
   +----------------+------------------+                 +------+

 ** 3. bind9 にパッチを当てて使う

		     UTF-8 のド	   エンコーディ    DNS プロトコル上の
		     メイン名	   ング変換およ    エンコーディングの
   +----------------+		   び正規化	   ドメイン名
   |クライアント    |           +----------------+             +------+
   |アプリケーション|---------->| ライトウェイト |------------>| DNS  |
   |と bind9のライト|-----------|    リゾルバ    |<------------|サーバ|
   |ウェイトリゾルバ|           |    デーモン    |             +------+
   +----------------+           +----------------+

 ** 4. mDN ラッパーを使う

		      ローカルエ  正規化および		DNS プロトコル上の
		      ンコーディ  エンコーディ		エンコーディングの
   +----------------+ ングのドメ  ング変換		ドメイン名
   |従来の Windows  | イン名    +---------+------------+           +------+
   |ネットワーク    |---------->|   mDN   | オリジナル |---------->| DNS  |
   |アプリケーション|<----------| ラッパー|  winsock   |<----------|サーバ|
   +----------------+           +---------+------------+           +------+


* ディレクトリ構成

配布キットのディレクトリ構成と、主要なファイルを示します。

  	README			英語版の README
	README.ja		このファイル
	DISTFILES		配布されるファイル一覧
	NEWS			主な変更
	ChangeLog		変更詳細
	configure		configure スクリプト
  	Makefile.in		トップレベルの Makefile のテンプレート
	include/		インクルードファイルディレクトリ
  	    config.h.in		config.h のテンプレート
	    mdn/		mdn ライブラリ用インクルードファイル
	dnsproxy/		DNS プロキシサーバソース
	lib/			mdn ライブラリソース
	wsock/			mDN ラッパーソース
	tools/			周辺ツール
	    mdnconv/		コードセットコンバータソース
	    runmdn/		runmdn コマンドソース
	patch/			各種パッチファイル
	    bind8/		bind8 用パッチ
	    bind9/		bind9 用パッチ
	    squid/		squid 用パッチ
	util/			ユーティリティ


* コンパイルおよびインストール

0. 前準備
  
もしあなたの使用しているシステムのライブラリに iconv() がない場合、あ
るいはあっても UTF-8 を扱うことができない場合にはあらかじめ iconv() を
インストールしておいてください。iconv() の実装は、例えば LGPL のものが

	http://clisp.cons.org/~haible/packages-libiconv.html

から入手可能です。

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-race-prefix=PREFIX
    --with-brace-suffix=SUFFIX
    --with-lace-prefix=PREFIX
	RACE (Row-based ASCII-Compatible Encoding)、BRACE (Bi-mode
	Row-based ASCII-Compatible Encoding) および LACE (Length-based
	ASCII Compatible Encoding) はいずれも DNS プロトコル
	上で使用される多言語ドメイン名に関して提案されているエンコーディ
	ング方式です。通常の ASCII ドメイン名とこれらによってエンコー
	ドされたドメイン名を区別するために、固定の接頭辞 (BRACE の場合
	には接尾辞) が用いられます。

	mDNkit では現在のインターネットドラフトで定義されている接頭辞
	あるいは接尾辞を使用するようになっていますが、今後のドラフトで
	変わるかもしれません。そこで、これらのオプションを用いて指定で
	きるようになっています。

    --enable-zld
	ZLD (zero level domain) は、デフォルトでは使用できません。この
	機能を使用したいときに、このオプションを指定します。

    --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

インストールされるツール (dnsproxy、mdnconv、runmdn) の使い方、設定方
法に関してはオンラインマニュアルをご覧ください。mdnconv と runmdn につ
いては、mDNkit のリゾルバ設定ファイル mdnres.conf のマニュアルも参照し
てください。

	% man dnsproxy
	% man mdnconv
	% man runmdn
	% man mdnres.conf


* パッチの当て方

この配布キットには、bind-8.2.2-P7、bind-8.2.3-T6B、bind-9.0.0、および 
squid-2.3-STABLE3 に対するパッチが含まれています。パッチの当て方は、パッ
チファイルの先頭に書かれていますのでそちらを参照してください。

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.1.1.1 2001/01/31 03:58:56 zarzycki Exp $
