mdnsproxy は文字通り DNS のプロキシサーバとして動作する プログラムです。クライアントと本物の DNS サーバの間で両者の間の 通信データ (DNS プロトコルメッセージ) の変換を行います。
クライアントからローカルエンコードされた多言語ドメイン名を含む DNS要求を受け取ると、DNSメッセージ中のドメイン名を 多言語化対応したDNS サーバが受付けられる標準エンコーディングに変換し、 DNS サーバに送出します。 エンコーディングの変換と同時に正規化も行います。 また逆に DNS サーバからの応答メッセージを受信すると、その中に 含まれる多言語ドメイン名をクライアント側で認識できるローカル エンコーディングに変換し、クライアントに返します。
mdnsproxy はこのようなメカニズムによって一般のクライアントが 多言語ドメイン名を扱うことを可能にします。
具体的には、
なお、mdnsproxy は 環境変数 MDN_DISABLE の設定 を明示的に無視するため、 MDN_DISABLE が設定されているかどうかにかかわらず、ドメイン名の変換処理を 行います。
mdnsproxy を使用するには、専用の設定ファイルで 使用するエンコーディングや正規化の方法を設定しておく必要があります。 このファイルの設定方法については mDNS Proxy Server の設定 をご覧ください。
mdnsproxy を使用するためにはあらかじめ設定が必要です。 mDNS Proxy Server の設定 をご覧ください。
mdnsproxy は以下のコマンド行オプションを受け付けます。
-daemon
-config
config-file
/usr/local/etc/mdnsproxy.conf
) が使用されます。
-logfile
log-file
/usr/local/var/mdnsproxy/mdnsproxy.log
) に出力します。
mdnsproxy は、エンコーディング変換や正規化の機能を持たない 一般のクライアントが多言語ドメイン名を扱うことを可能にします。 クライアントではローカルコードで記述されたドメイン名を、 そのまま多言語ドメイン名として使うことができるようになります。
しかしそれにはクライアントがドメイン名に対して独自のチェックや変換を 行なっていなければ、という前提条件があります。 問題はこの点にあり、 クライアントによっては、ドメイン名のシンタックスを厳密にチェックしていたり、 独自の手法で部分的に多言語化していたりするものがあります。 このようなクライアントであれば、mdnsproxyを使っても 多言語ドメイン名を使うことはできません。
UNIXの場合は、DNSへの要求は通常リゾルバライブラリを経由して送られますが、 既存のリゾルバはドメイン名のシンタックスをチェックしていて、 ドメイン名に非ASCII文字が含まれているとエラーとして はじかれてしまいます。 この問題に対処するために、mDNkitには、BIND 8付属のリゾルバライブラリを 8ビット透過にするためのパッチが付属しています。このパッチを適用した リゾルバライブラリを組み込めば、クライアントからのローカルコードによる 多言語ドメイン名がmdnsproxyに渡されて、多言語化DNSサーバと組み合わせて 使用することができるようになります。 Windowsの場合には、リゾルバ(WINSOCK)は8ビット透過になっていますので、 この問題はありません。
残る問題は、アプリケーションでのチェックや変換ですが、 これは対象となるクライアントが多数ありますし、また、 ソースが公開されていないものについては手の出しようがありませんので、 基本的には、mDNkitには含まれていません。しかし、 DNSのチェックに多用される (BIND 8 付属の) nslookup と、 汎用のproxyとして使用されることの多い Squid については、 ドメイン名のチェックを外すためのパッチが含まれています。
mdnsproxy を使用してどのようなアプリケーションが多言語ドメイン名を 扱えるようになるのかをまとめた 文書を用意してありますので、 こちらをご覧ください。