mDNkit Frequently Asked Questions 2001/10/11 版 この FAQ は mDNkit バージョン2.1リリースを対象としています。 【コンパイル時の注意点】 Q.1010 Solaris で mDNkit を作ろうとしていますがソースにパッチが当たりません。 A.1010 Solaris のシステムに付属する patch コマンドは mDNkit に含まれるパッチ の形式を正しく解釈できないため、パッチが正しく当たりません。GNU patch のソースを入手してインストールして、それを使用してください。 GNU patch web page http://www.fsf.org/software/patch/patch.html Q.1020 make の時に iconv.h が見つからないと言われます。 A.1020 mDNkit は、既に iconv ライブラリがインストールされていることを前提と しています。もし iconv ライブラリがインストールされていないのであれば まず、iconv ライブラリのインストールを行ってください。フリーの iconv ライブラリとしては以下のものがあります。 libiconv Web page http://clisp.cons.org/~haible/packages-libiconv.html 上記の iconv ライブラリをインストールした場合など、iconv.h が標準の インクルードファイルパス以外にある場合には、configure を実行する際に 環境変数 CFLAGS でそのパスを設定してください。 (sh 系のシェルの場合) % CFLAGS="-I/usr/local/include" ./configure ... (csh 系のシェルの場合) % setenv CFLAGS "-I/usr/local/include" % ./configure ... Q.1040 libiconv-1.3 の shared ライブラリが作成されません。 A.1040 libiconv-1.3 に付属の shared ライブラリ生成ツールは FreeBSD4.x 系 などの比較的新しい OS には対応していません。最新版の libiconv を お使いください。最新版の入手先については A.1020 をご参照ください。 Q.1070 NetBSD 1.5 で libiconv-1.6.1 をインストールしましたが iconv コマンド を実行すると下記のエラーが起きて実行できません。 Cannot open "../lib/.libs/libiconv.so" A.1070 libiconv-1.6.1 に付属の shared ライブラリ生成ツールは NetBSD 1.5 の 対応に不具合があります。mDNkit-2.1 には、これを修正するパッチを mdnkit-2.1-src/patch/libiconv/ ディレクトリに用意しています。 あるいは、パッチを当てないで、shared ライブラリを生成しないように libiconv-1.6.1 をインストールすることでも対応できます。具体的には、 configure のオプションに --disable-shared を追加してインストールをや り直してください。 Q.1050 make してできた mdnconv コマンドを実行しようとすると libiconv.so.2.0 が見つからないというエラーメッセージが出力されて実行できません。 A.1050 mDNkit の configure 時に --with-iconv オプションで iconv のライブラリ がインストールされたディレクトリを指定してください。 共有ライブラリを利用する場合、-L オプション以外にも -R オプションの ように、ライブラリ検索ディレクトリを実行時リンカに指定するためのオプ ションが必要になる場合があります。 (/usr/local/lib にインストールされている場合) % ./configure --with-iconv="-L/usr/local/lib -R/usr/local/lib -liconv" ... Q.1030 BIND 9.1.2 に mDNkit のパッチを当ててコンパイルしようとしたところ、 sqr がないというエラーメッセージが出てコンパイルできません。 A.1030 OpenSSL がインストールされていて、そのヘッダファイルが BIND 9.1.2 に 付属の SSL ライブラリのヘッダファイルより先に読み込まれている可能性 があります。 configure を実行した際の環境変数 CFLAGS に、OpenSSL のヘッダファイル がインストールされたディレクトリが設定されていることが考えられます。 その場合には、環境変数 CFLAGS をクリアして、configure からやり直して みてください。 (sh 系のシェルの場合) % CFLAGS="" ./configure ... (csh 系のシェルの場合) % setenv CFLAGS "" % ./configure ... Q.1060 Debian GNU/Linux で mDNkit 付属の BIND 9 パッチをあてた BIND 9.1.2 をコンパイルしようとしたら、dns/enumclass.h がないといわれてエラー になりました。 A.1060 mDNkit の共有ライブラリ libmdn.so* がインストールされたディレクトリ が共有ライブラリのサーチパスに入っていないためです。/etc/ld.so.conf に当該ディレクトリパスを追加し、ldconfig コマンドを実行してください。 【設定方法】 Q.2060 設定ファイルの mdnres.conf や dnsproxy.conf が見当たりません。 dnsproxy コマンドが見当たりません。 A.2060 mDNkit 2.X では、NAMEPREP と IDNA への対応、ZLD の廃止などの大幅な設 計変更にともない、コマンド名、設定ファイル名などの名称を変更していま す。 MDN ライブラリ(mdnconv などが参照)の設定ファイル名は、mdnres.conf から mdn.conf に変更しました。 dnsproxy コマンドは名称を mdnsproxy に変更しました。 mdnsproxy コマンドの設定ファイルは dnsproxy.conf ではなく、 mdn.conf と mdnsproxy.conf を参照するようになりました。 詳しくは、mDNkit 2.X の「mDNkit ドキュメント」をご覧下さい。 Q.2070 mDNkit 1.X で指定していた設定項目やコマンドラインオプションが使えな くなりました。 A.2070 mDNkit 2.X では、NAMEPREP と IDNA への対応、ZLD の廃止などの大幅な設 計変更にともない、設定項目の変更と追加をしています。 詳しくは、mDNkit 2.X の「mDNkit ドキュメント」をご覧下さい。 主な変更点は以下のものです。 ・mdn.conf(旧称 mdnres.conf)の設定項目の変更と追加 - server-encoding を idn-encoding に変更 - normalize を廃止し nameprep を追加 - local-map、delimiter-map を追加 ・mdnconv のコマンドラインオプションの変更と追加 - auto、zld オプションを廃止 - normalize を廃止し nameprep を追加 - localmap、delimitermap を追加 - reverse を追加 ・mdnsproxy.conf(旧称 dnsproxy.conf)の設定項目の変更と追加 - ZLD 指定を廃止 - client-translation を client-encoding に変更 - normalize、server-translation を廃止 (mdn.conf の設定項目を参照して解決するようになった) Q.2080 mDNkit 2.X での設定ファイル mdn.conf にはどんな設定を書けばよいので すか? 設定ファイル mdn.conf のサンプルはありますか? A.2080 通常は、設定ファイル mdn.conf のサンプルが mdn.conf.sample という名 称で、標準のインストールパスでは /usr/local/etc の下にインストールさ れます。 mDNkit-2.1 以降では configure のオプションに --with-preference=jp を 指定すれば、汎用JPドメイン名(.JP)用の標準的な設定例が mdn.conf とし てインストールされるようになりました。 現在の運用試験では、mdn.conf の主な設定項目は以下のもので充分でしょ う。 idn-encoding RACE nameprep nameprep-03 local-map .jp filemap:/usr/local/share/mdnkit/jp.map delimiter-map U+3002 U+FF0E alternate-encoding RACE encoding-alias-file /usr/local/share/mdnkit/mdnalias.txt Q.2090 mDNkit 2.X での設定ファイル mdn.conf には、mDNkit 1.X での設定項目 normalize の代わりに何を設定すればよいのですか? A.2090 現在の運用試験では、mdn.conf の設定項目に下記の行があればよいでしょ う。 nameprep nameprep-03 通常は、より詳細な設定項目の nameprep-map、nameprep-normalize、 nameprep-prohibit、nameprep-unassigned などの指定は必要ありません。 Q.2100 ACE表現の文字列を逆変換することはできますか? A.2100 次のように、mdnconv に -reverse, -r オプションを指定してください。 % mdnconv -r SAMPLE.race 同時に -in あるいは -out オプションも指定する場合には、例えば以下の ようになります。 % mdnconv -r -in RACE -out EUC-JP SAMPLE.race Q.2030 mdnsproxy を起動すると、initTcp や initUdp といったメッセージが出力 されてエラー終了します。 A.2030 mdnsproxy は DNS サーバと同一のポートを使用しています。従って、既に DNS サーバが起動されているホスト上では、通常は mdnsproxy を起動する ことはできません。DNS サーバと mdnsproxy は別のホスト上で動かすよう にしてください。 Q.2040 mdnsproxy と DNS サーバを同じホスト上で動かすことはできませんか? A.2040 mdnsproxy と DNS サーバが問い合わせを受け付けるポート番号を違うものに するか、mdnsproxy と DNS サーバが問い合わせを受け付ける IP アドレス を違うものにしてください。 Q.2110 mDNkit-1.XからmDNkit-2.Xにバージョンアップしたいと思います。問題は ないでしょうか? A.2110 mDNkitバージョン2.XはmDNkitバージョン1.Xに対して完全な下位互換では ありませんので、注意が必要です。 mDNkit-1.XからmDNkit-2.Xにおける主な非互換点を以下にまとめました。 バージョンアップに際して参考にしてください。 * mdnconvコマンド ・ZLDサポートが廃止されました。それに伴い、auto、zld オプション が削除されました。 ・正規化の方式がNAMEPREP対応になりました。それに伴い、normalize オプションが削除され、nameprepオプションが追加されました。 ・ACEからローカルエンコーディングへの逆変換を行うためのreverseオ プションが追加されました。 reverseオプションによる逆変換が指定された場合は、inオプション、 outオプションのデフォルトの解釈が反対となります。なお、変換処 理は順方向と逆方向とで処理内容が異なりますので、逆変換の時には 必ず reverse オプションを付けて下さい。変換処理についての詳細 は、「mDNkit 仕様書」の「mdnconv」の章を参照して下さい。 ・デフォルトの設定ファイル名がmdnres.confからmdn.confに変更され ました。 * mdn.conf ・server-encodingがidn-encodingに変更されました。 ・normalizeが削除され、nameprepが追加されました。 ・local-map、delimiter-mapが追加されました。 * mdnsproxy ・名称がdnsproxyからmdnsproxyに変更されました。 ・デフォルトの設定ファイル名がdnsproxy.confからmdnsproxy.confに 変更されました。 ・mdnsproxyの設定ファイル中に構文エラーがある場合、mdnsproxyは起 動せずにエラー終了するようになりました。 * mdnsproxy.conf ・client-translationがclient-encodingに変更され、ZLD指定が廃止さ れました。 ・normalize、server-translationが削除され、mdn.confの設定を読み 込むようになりました(mdnsproxyを起動するためには、 mdnsproxy.confとmdn.confの両方が必要となりました)。 * BIND 9パッチ ・DNSプロトコルでのUTF-8サポートはmDNkit-2.Xではなくなりました。 そのため、named.confのoptionsの設定で、allow-utf8拡張は削除さ れました。 ・mDNkit-2.Xでは、IDNRAアーキテクチャの採用をやめ、IDNAアーキテ クチャを採用しました。そのため、lightweight resolver(lwres)が ローカルエンコーディングで書かれた名前を解決できるようにするた めの拡張も削除されました。 なお、MDNライブラリ(libmdn)のインターフェースも大幅に変更されまし た。MDNライブラリの詳細については、MDNライブラリ仕様書をご覧くださ い。 【クライアントからの使い方(一般、他 UNIX関連)】 Q.3010 環境変数 LANG に ja_JP.euc-JP を設定しています。mdnconv はそれに従っ て正しくローカルエンコーディングを判断してくれますが、runmdn は正し くは判断してくれません。 A.3010 runmdn で環境変数 LANG が評価されるか否かはアプリケーションの locale の設定方法に依存します。依存しないためには、環境変数 MDN_LOCAL_CODESET に iconv ライブラリが受付可能なコードセット名を設定してください。 Q.3020 runmdn を使って telnet はできますが、ping ができません。 A.3020 runmdn はセキュリティ上の理由から、SUID または SGID ビットが立った コマンドには使用できません。 Q.3080 runmdn でログを残すことはできませんか? A.3080 runmdn は、環境変数 MDN_LOG_LEVEL に 0 から 5 までの数値を設定する ことで、標準エラー出力にログを出力することが可能となります。 数値が大きくなるほど、出力されるログの詳細度があがりますが、その分 情報量が増えます。これは runmdn が利用している mDNkit のライブラリ libmdn の機能なので、mdnconv でも同様に使用可能です。 MDN_LOG_LEVELに 4 または 5 を指定する場合には、CFLAGS に -DDEBUG オプションを追加して libmdn および当該ライブラリをリンクしている コマンドを再コンパイルしてください。 【クライアントからの使い方(Windows、mDN Wrapper 関連)】 Q.3060 mDN Wrapper のコンフィグレーションプログラムでアプリケーションを wrap しようとすると、エラーダイアログが出力されて wrap できません。 mDN Wrapper のコンフィグレーションプログラムで wrap したアプリケー ションを unwrap しようとすると、エラーダイアログが出力されて unwrap できません。 A.3060 mDN Wrapper のコンフィグレーションプログラムで wrap を行うと、登録 されたアプリケーションがインストールされているフォルダに Wrapper DLL をコピーします。逆に、unwrap を行うとコピーした Wrapper DLL を 削除します。 そのため、wrap を行おうとするアプリケーションが起動されている間は、 コピーしようとする Wrapper DLL がオープンされているため wrap は失敗 します。また、wrap が行われたアプリケーションが起動されている間は、 コピーされた Wrapper DLL がオープンされているため unwrap が失敗します。 wrap および unwrap はアプリケーションを終了してから行ってください。 Q.3070 mDN Wrapper でログを残すことはできませんか? A.3070 mDN Wrapper は、コンフィギュレーションプログラムの "Log.." ボタンで ログレベルやログファイルの設定や、ログの参照または削除を行うことが できます。 設定可能なログレベルは None, Fatal, Error, Warning, Info, Trace です。 ログを出力したくない場合には None を選択してください。 また、ログの参照は "View" ボタンで、ログの削除は "Delete" ボタンを クリックすることにより行うことができます。 Q.3090 mDN Wrapper のインストールを行ったのですが、新しくなったようには 見えません。 A.3090 すでに古いバージョンの mDN Wrapper がインストールされているマシンに 新しいバージョンをインストールする際には、注意が必要です。すでにラッ プしていたプログラムを起動する前に、設定プログラムを起動して、ラップ されているプログラムのすべてを再度ラップし直す必要があります。これは 設定プログラムの "Rewrap All" というボタンを押すことで実行することが できます。 mDN Wrapper はその動作原理上、mDN Wrapper を適用するプログラムが存在 するディレクトリにDLL をコピーします。このコピーされた DLL は新しい バージョンをインストールするだけでは更新されないので、そのままでは新 しいバージョンが使われないことになります。このため、新しいバージョン をインストールしたら必ず、設定プログラムを起動し "Rewrap All" を実行 して下さい。 Q.3100 mDN Wrapper で Internet Explorer を Wrapするように設定しましたが、 閲覧試験用のページ http://閲覧試験.日本語ドメイン名試験.JP:8080/ が表示できません。 A.3100 mDN Wrapper で Internet Explorer を Wrapして使う場合、IE の「イン ターネットオプション」中の「詳細設定」タブの「常にUTF-8としてURLを 送信する(再起動が必要)」のチェックをはずして、Internet Explorer を 再起動してください。現在の Internet Explorer (4.0, 5.0/5.5, 6.0 preview release)の UTF-8 への URL変換は日本語についてはうまく動作し ない場合があります。 Q.3110 mDN Wrapper で Internet Explorer を Wrapするように設定しましたが、 閲覧試験用のページが表示できません。インターネットオプションの「常 に UTF-8 として URL を送信する」のチェックはオフに設定しています。 A.3110 現在の Internet Explorer (4.0, 5.0/5.5, 6.0 preview release)の仕 様により、通常の URL では省略可能なURLの最初の「http://」が、日本 語ドメイン名では省略できません。必ず「http://閲覧試験.日本語ドメイ ン名試験.jp:8080/」のように、「http://」を省略せずに入力する必要が あります。 Q.3120 mDN Wrapper で Internet Explorer を Wrapするように設定しましたが、 閲覧試験用のページが表示できません。インターネットオプションの「常 に UTF-8 として URL を送信する」のチェックはオフに設定し、URL は 「http://」から入力しています。 A.3120 Webブラウザでのアクセスの際にプロキシサーバ(透過型(トランスペア レント)プロキシサーバを含む)を経由している場合、プロキシサーバが 日本語ドメイン名を含む HTTP Host ヘッダを処理できないため、日本語 ドメイン名のWeb ページにアクセスできない場合があります。もしそれに 該当すると考えられる場合、インターネットに直接接続してお試しくださ い。(例えば、社内ネットワークや公開プロキシサーバ等を経由せず、プ ロバイダへのダイアルアップ等でアクセスする) また、URLをシフトJISで送信する Web ブラウザでは、シフトJISコードの2 バイト目が"@"(0x40)になる文字コード(例: 機)を含むURLには、そのま まではアクセスできません。これは、"@" が URL内では特殊な文字として取 り扱われるためです。これを防ぐためには、「http://@@...」のように、 http://の直後に"@"を並べて記述することで、このような URL にアクセス できるようになります。 【クライアントからの使い方(mdnsproxy 関連)】 Q.3050 mdnsproxy を使うと、日本語ドメイン名に片仮名の「ソ」が含まれていると 正しくアドレス解決ができません。 A.3050 クライアント側のローカルエンコーディングが SJIS で、かつクライアント 側のリゾルバが 8bit クリーンでないと、SJIS 中に '\'(ASCII コードで 0x5c)が含まれる文字の場合は、その部分のみ削除されることがあり、その ためにアドレス解決に失敗します。代わりに runmdn を使うか、ホスト側の リゾルバライブラリを 8bit クリーンのものと入れ替えてください。 【サーバでの対応】 Q.4010 ISP 側で mdnsproxy を用意すれば、ダイヤルアップユーザーは多言語ドメ イン名の Web にアクセスできますか? A.4010 ISP のネットワーク構成や利用者の利用状況によって異なります。基本的 には、多言語ドメイン名の対応は利用者側(リゾルバやアプリケーション など)で行われる必要があります。mdnsproxy は利用者の端末で対応でき ない場合のための補助的な手段であり、最終的な解決法ではありません。 Q.4020 Apache で日本語ドメイン名の Web サイトを立ち上げたのですが、日本語 ドメイン名では Apache のログに "Client sent malformed Host header" というメッセージが出力されてアクセスできません。 A.4020 Apache-1.3.10~1.3.14ではセキュリティ上の理由で、HTTP リクエスト中の Hostヘッダのチェックが厳しくなり、ASCII の英数字、ハイフン、ドット (ピリオド)以外の文字は不正なホスト名とみなされるようになりました。 mDNkit はリゾルバ(ドメイン名の問い合わせ)の部分で多言語対応する 機能を提供するもので、個々のアプリケーションプロトコルには対応して いません。現状では、Apache で日本語ドメイン名のリクエストを受け付 けるためには以下のいずれかの対応が必要となります。 ・Apache-1.3.15 以降を使う ・Apache-1.3.9 を使う ・Host ヘッダを ACE で出力する Web ブラウザを使う (そのような Web ブラウザがあったら教えてください) Q.4030 Squid 2.4-STABLE1 用のパッチは用意されていますが、Apache 用のパッチ は用意されないのですか? A.4030 一般に HTTP Proxy サーバは利用者の近くに配置されるため、利用者の端 末が使用する文字エンコーディングを仮定することが可能です。 そのため、日本語ドメイン名の導入初期において、mdnsproxy または mDNkit が提供するリゾルバライブラリと組み合わされた HTTP Proxy を使用する ことは、多言語ドメイン名での Web アクセスに対応する有効な方式になり 得ると考えています。 Squid は世界中で広く使われている HTTP Proxy あり、小規模なパッチで 対応することが可能であったため、パッチを用意しました。 Web サーバは利用者の近くに配置されるものではなく、利用者の端末が使 用する文字エンコーディングを仮定することは不可能です。 そのため、Web サーバで多言語ドメイン名に対応することは困難であり、 また、日本語ドメイン名にのみ対応するようなパッチを作成することは Web サーバの汎用性を失わせることになるため、パッチは用意しません。 【その他】 Q.5010 ACE って何ですか? ZLD って何ですか? IDNA って何ですか? NAMEPREP って何ですか? A.5010 ACE とは ASCII Compatible Encoding の略で、多言語ドメイン名を ASCII 文字のみで表現するエンコーディング方式のことです。 ACE はそれ自体 ASCII 文字列ですので、プレフィックスやサフィックス として特定の文字列を追加するなどの工夫を施さない限り、それが ASCII 文字列なのか ACE なのかを判断することはできません。 ZLD とは Zero Level Domain のことで、利用者が意識する必要のない、 もしくは利用者から隠蔽された特別な上位レベルドメイン名のことです。 ZLD は、ACE を判別する方式の一つですが、実際のドメイン名空間では ZLD は通常のドメイン名として存在しますので、ZLD の使用はドメイン名 空間の分断を招く恐れがあるとして、現在では支持されていません。 mDNkit-2.0 以降では IDNA アーキテクチャに対応し、mDNkit-1.X でおこなっ ていた ZLD への対応を廃止しました。 IDNA とは Internationalizing Host Names In Applications のことで、 現在の標準化動向の中で最も有力な方式です。これは多言語ドメイン名を現 状のDNSプロトコルに従ったドメイン名に変換する作業をアプリケーション 側で行う方式のことです。この方式では、DNS サーバ側には修正は必要あり ませんが、アプリケーションを多言語ドメイン名対応に書き換える必要があ ります。 NAMEPREP とは Name Preparation のことを示し、多言語ドメイン名を正規 化する方法のことです。意味的、表示的に同じ文字列の表現形式を統一しま す。実際には、大文字、小文字の文字種の統一、全角、半角などの互換文字 の統一、濁点、半濁点の合成などや、不適切な文字の検査などを行います。 例えば Unicode のようにエンコーディング方式によっては、見かけ上で全 く同一の文字を表す方法が複数ある場合があります。このような文字をその まま使うと、ユーザが入力したドメイン名が見かけ上は正しいと思われても、 登録されたドメイン名と同一だとは判断されないような不都合が起こりえま す。 Q.5020 RACE って何ですか? A.5020 RACE とは Row-based ASCII Compatible Encoding の略で、ACE 方式の一 つです。ACE であることが識別できる特定の文字列を持つ(プレフィック スに bq-- が付く)ことと、簡単な圧縮アルゴリズムが使用されているこ とが特徴で、現在の運用試験で使用しておるACE方式です。 (例)日本語ドメイン名.jp ↓(RACE に変換) bq--3bs6kzzmrkpdbsjq4eykimhtkqgq.jp Q.5030 RACE 以外の ACE 方式は実装されないのですか? A.5030 mDNkit-2.1 では、以下の ACE 方式が実装されています。 AltDUDE AMC-ACE-M AMC-ACE-O AMC-ACE-R BRACE DUDE LACE RACE UTF-6 Q.5040 djbdns を使っているのですが、多言語ドメイン名は使えますか? A.5040 ACE を使えば可能です。 Q.5050 バグを見つけました。どこに報告すればよいですか? A.5050 mdnkit-bugs@nic.ad.jp にメールでご連絡ください。その際、わかる範囲 で結構ですので、以下の情報を添付してください。 ・OS 名、OS バージョン ・DNS サーバ名(BINDなど)、DNS サーババージョン ・mdnsproxy.conf、mdn.conf の内容 ・mdnsproxy、mDN Wrapper のログ ・mDNkit コンパイル時のオプションなど(CFLAGS や configure 時 のオプションなど) Q.5060 この FAQ に間違いを見つけました。どこに報告すればよいですか? A.5060 idn-cmt@nic.ad.jp にメールでご連絡ください。 Q.5070 この FAQ に項目を追加したいのですが、どこに連絡すればよいですか? A.5070 idn-cmt@nic.ad.jp にメールでご連絡ください。Q & A の形式でご連絡を いただけると幸いです。