# dnsproxy

- 概要
- 設定
- 使用法
- 制限事項

## 概要

dnsproxy は文字通り DNS のプロキシサーバとして動作する プログラムです。クライアントと本物の DNS サーバの間で両者の間の 通信データ (DNS プロトコルメッセージ) の変換を行います。

クライアントからローカルエンコードされた多言語ドメイン名を含む DNS要求を受け取ると、DNSメッセージ中のドメイン名を 多言語化対応したDNS サーバが受付けられる標準エンコーディングに変換し、 DNS サーバに送出します。 エンコーディングの変換と同時に正規化も行います。 また逆に DNS サーバからの応答メッセージを受信すると、その中に 含まれる多言語ドメイン名をクライアント側で認識できるローカル エンコーディングに変換し、クライアントに返します。

dnsproxy はこのようなメカニズムによって一般のクライアントが 多言語ドメイン名を扱うことを可能にします。

具体的には、

- 日本語など、非 ASCII 文字の入ったホスト名を名前解決できるようになります。
- 非 ASCII 文字の入ったホスト名を名前解決の結果として受け取れるように なります。

## 設定

dnsproxy を使用するには、専用のコンフィギュレーションファイルで 使用するエンコーディングや正規化の方法を設定しておく必要があります。 このファイルの設定方法については DNS Proxy Server のコンフィギュレーション をご覧ください。

## 使用法

dnsproxy を使用するためにはあらかじめ設定が必要です。 DNS Proxy Server のコンフィギュレーション をご覧ください。

dnsproxy は以下のコマンド行オプションを受け付けます。

`-daemon`
  dnsproxy をデーモンとして起動します。
`-config` config-file
  config-file をコンフィギュレーションファイルとして使用します。 このオプションを指定しなかった場合にはデフォルトのコンフィギュレーション ファイル (通常は `/usr/local/etc/dnsproxy.conf`) が使用されます。
`-logfile` log-file
  ログをファイル log-file に出力します。このオプションが 指定されなかった場合にはコンフィギュレーションファイルで指定された ログファイル、またはデフォルトのログファイルに出力されます。

## 制限事項

dnsproxy は、エンコーディング変換や正規化の機能を持たない 一般のクライアントが多言語ドメイン名を扱うことを可能にします。 クライアントではローカルコードで記述されたドメイン名を、 そのまま多言語ドメイン名として使うことができるようになります。

しかしそれにはクライアントがドメイン名に対して独自のチェックや変換を 行なっていなければ、という前提条件があります。 問題はこの点にあり、 クライアントによっては、ドメイン名のシンタックスを厳密にチェックしていたり、 独自の手法で部分的に多言語化していたりするものがあります。 このようなクライアントであれば、dnsproxyを使っても 多言語ドメイン名を使うことはできません。

UNIXの場合は、DNSへの要求は通常リゾルバライブラリを経由して送られますが、 既存のリゾルバはドメイン名のシンタックスをチェックしていて、 ドメイン名にnon-ASCIIコードが含まれているとエラーとして はじかれてしまいます。 この問題に対処するために、mDNkitには、bind8付属のリゾルバライブラリを 8ビット透過にするためのパッチが付属しています。このパッチを適用した リゾルバライブラリを組み込めば、クライアントからのローカルコードによる 多言語ドメイン名がdnsproxyに渡されて、多言語化DNSサーバと組み合わせて 使用することができるようになります。 Windowsの場合には、リゾルバ(WINSOCK)は8ビット透過になっていますので、 この問題はありません。

残る問題は、アプリケーションでのチェックや変換ですが、 これは対象となるクライアントが多数ありますし、また、 ソースが公開されていないものについては手の出しようがありませんので、 基本的には、mDNkitには含まれていません。しかし、 DNSのチェックに多用されるnslookup(in bind8)と、 汎用のproxyとして使用されることの多いsquidについては、 ドメイン名のチェックを外すためのパッチが含まれています。

dnsproxy を使用してどのようなアプリケーションが多言語ドメイン名を 扱えるようになるのかをまとめた 文書を用意してありますので、 こちらをご覧ください。