Configuring mDNkit resolver

# mDNkit リゾルバのコンフィギュレーション

mDNkit が提供するツール、コマンドのうち、dnsproxy 以外のもの、 つまり runmdn と mdnconv は共通の設定ファイルを参照します。 また bind9 パッチも同じ設定ファイルを参照します。

このファイルには mDNkit を利用したクライアントあるいはリゾルバが 必要とするいくつかの情報を設定する必要があります。 例えば正規化の方式や DNS プロトコル上で用いられるドメイン名のエンコーディング 方法などをこのファイルで指定します。 ここでは、これらの情報の設定方法と意味とを説明します。

また、アプリケーションの使用するローカルエンコーディングは アプリケーションの動作するロケール情報から取得します。これについても 合わせて説明します。

- コンフィギュレーションファイル
- コンフィギュレーションデータ
  - server-encoding
  - server-zld
  - normalize
  - alternate-encoding
  - alias-file
- ローカルエンコーディングについて

## コンフィギュレーションファイル

mDNkit の設定は、コンフィギュレーションファイルによって行われます。 mDNkit をデフォルトの設定でコンパイルした場合には、 このコンフィギュレーションファイルのパス名は

>     /usr/local/etc/mdnres.conf

となります。ディレクトリ部分、つまり `/usr/local/etc` は mDNkit の設定時にオプションで 変更が可能です。

mDNkit をインストールすると、このファイルのサンプルファイルが

>     /usr/local/etc/mdnres.conf.sample

(デフォルトの設定の場合) にインストールされます。このサンプルファイルには 設定項目とその説明が書かれていますので、コンフィギュレーションファイル 作成の参考にしてください。

## コンフィギュレーションデータ

コンフィギュレーションファイルは通常のテキストファイルで、 以下のコンフィギュレーションデータを指定します。

server-encoding
  DNS プロトコルが使用するエンコーディングを指定します。

  > `server-encoding` encoding

  encoding にエンコーディング名を指定します。

  > [設定例]

  >       server-encoding RACE
  >       server-encoding UTF-8

  なお、アプリケーション側のローカルエンコーディングはロケールによって 決まるので、client-encoding というエントリはありません。 ローカルエンコーディングに関しては後述します。

server-zld
  ZLD を指定します。ZLD とは Zero Level Domain の略で、 `server-encoding` に UTF-5 など特殊なエンコーディングを指定した場合に 必要となります。ZLD については DNSサーバの設定の ZLD の指定の記述が参考になるでしょう。 なお、mDNkit をデフォルトの設定でコンパイルした場合には ZLD は使えず、 このエントリを指定しても無視されます。 ZLD が使えるように mDNkit をコンパイルする方法については インストールドキュメントの `--enable-zld` の項を ご覧ください。

  > `server-zld` ZLD

  ZLD で使用する ZLD を指定します。

  > [設定例]

  >       server-zld zld.to.be.used

normalize
  このエントリーでは正規化の方法を指定します。 2 つ以上の正規化の方法が指定された場合、順番通り (左から右に) 適用します。

  > `normalize` scheme...

  scheme で正規化の方式の名称を指定します。

  正規化の方式として以下のものが指定できます。

  > ascii-lowercase | ASCII の大文字を小文字に正規化
  > ascii-uppercase | ASCII の小文字を大文字に正規化
  > unicode-lowercase | Unicode の大文字を小文字に正規化
  > unicode-uppercase | Unicode の小文字を大文字に正規化
  > unicode-form-c | Unicode normalization form C
  > unicode-form-kc | Unicode normalization form KC
  > ja-kana-fullwidth | 半角カナ文字を全角カナ文字に正規化
  > ja-alnum-halfwidth | 全角英数字およびマイナス記号を半角文字に正規化
  > ja-compose-voiced-sound | 全角ひらがなカタカナとそれに続く濁点半濁点を1文字にまとめる正規化
  > ja-minus-hack | 全角マイナス記号をハイフン ('-') に正規化
  > ja-delimiter-hack | 全角ピリオドおよび句点を半角のピリオド ('.') に正規化

  > [設定例]

  >       normalize unicode-lowercase unicode-form-kc

alternate-encoding
  このエントリーでは代替エンコーディングの形式を指定します。 代替エンコーディングとは、DNS プロトコル上のエンコーディングから アプリケーション側のローカルエンコーディングへの変換に失敗した時に、 ローカルエンコーディングの代わりに使用されるエンコーディングです。 例えば日本語を扱うアプリケーションに DNS サーバから韓国のハングル文字を 含むドメイン名が返された場合には、日本語のローカルエンコーディングに 変換できないので、代わりにこの代替エンコーディングに変換された 結果が渡されます。

  > `alternate-encoding` encoding

  encoding に代替エンコーディングの名称を指定します。

  代替エンコーディングは、 ASCII 互換エンコーディングでなくてはなりません。

  > [設定例]

  >       alternate-encoding RACE

alias-file
  エンコーディングのコードセット名を、別名として追加することができます。 ここでは、追加する別名の定義ファイルへのパス名を指定します。

  > `alias-file` path

  path に定義ファイルのパス名を指定します。

  > [設定例]

  >       alias-file /some/where/mdnalias.txt

  別名の定義ファイルは通常のテキストファイルであり、1行に1つずつ 別名を定義します。各行の形式は次の通りです。

  >     <別名>     <元の名前>

  エンコーディング名 <元の名前> の代わりに <別名> が 使えるようになります。

## ローカルエンコーディングについて

ローカルエンコーディングについては、ロケールから推測して自動判定するため、 コンフィギュレーションファイルでは、 ローカルエンコーディングを設定するエントリはありません。

ただし、以下のようなケースのときには自動判定ができません。

- setlocate 関数を使用していないアプリケーションを実行したとき
- C ロケールのままアプリケーションを実行したとき
- ロケールとエンコーディングの対応がわからないとき

このような場合には環境変数 MDN_LOCAL_CODESET を設定することで、 ローカルエンコーディングの設定を行うことができます。 例えばローカルエンコーディングを EUC-JP に設定する場合には、 あらかじめ次のような設定をしておきます。

> [設定例]
>   sh 系のとき

>         $ MDN_LOCAL_CODESET=EUC-JP
>         $ export MDN_LOCAL_CODESET

>   csh 系のとき

>         % setenv MDN_LOCAL_CODESET EUC-JP

指定する値はローカルエンコーディング名で、これはシステムの iconv() 関数 (より正確には iconv_open()) が 受け付ける名前で指定します。この名前は iconv の実装によって それぞれ異なりますので、具体的な値については iconv の ドキュメントを参照してください。

もしあなたが単一のローカルエンコーディングしか使用していないのであれば、 このような設定を `.profile` や `.cshrc` 等に入れておくことを お勧めします。