357 lines
13 KiB
Plaintext
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 $
|