# dnsproxy

- 概要
- Overview
- 設定
- Setup
- 使用法
- Usage
- 制限事項
- Limitations

## 概要

## Overview

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

As the name implies, dnsproxy is a program that operates as a DNS proxy server. It converts communications data (DNS protocol messages) between clients and real DNS servers.

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

When DNS queries that contain multlingual domain names in local encoding are received from a client, it is converted to standard encoding that can be accepted by a DNS server that supports. Normalization is performed at the same time as the encoding is converted. On the other hand, when a response message from a DNS server is received, the multilingual domain names in the message are converted to local encoding that is understood by the client before it is returned to the client.

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

dnsproxy uses this mechanism to enable regular clients to handle multilingual domain names.

具体的には、

Specifically,

- 日本語など、非 ASCII 文字の入ったホスト名を名前解決できるようになります。
- It is possible to resolve host names that contain Japanese and other non-ASCII characters.
- 非 ASCII 文字の入ったホスト名を名前解決の結果として受け取れるように なります。
- Thus host names containing non-ASCII characters can be received as a result of name resoving.

## 設定

## Setup

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

To use dnsproxy, the encoding and normalization method must be set up using a special configuration file. Refer to DNS Proxy Server Configuration for information on how to configure this file.

## 使用法

## Usage

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

Use of dnsproxy requires prior setup. Refer to DNS Proxy Server Configuration.

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

dnsproxy accepts the following command line options.

`-daemon`
  dnsproxy をデーモンとして起動します。
  Starts up dnsproxy as a daemon.
`-config` config-file
  config-file をコンフィギュレーションファイルとして使用します。 このオプションを指定しなかった場合にはデフォルトのコンフィギュレーション ファイル (通常は `/usr/local/etc/dnsproxy.conf`) が使用されます。
  Uses config-file as a configuration file. When this option is not specified, the default configuration file (usually, `/usr/local/etc/dnsproxy.conf`) is used.
`-logfile` log-file
  ログをファイル log-file に出力します。このオプションが 指定されなかった場合にはコンフィギュレーションファイルで指定された ログファイル、またはデフォルトのログファイルに出力されます。
  Outputs the log to log-file. When this option is not specified, the log is output to the file specified by the configuration file or to the default log file.

## 制限事項

## Limitations

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

dnsproxy enables ordinary clients without encoding conversion and normalization functions to handle multilingual domain names. Clients can use domain names in local codes as multilingual domain names.

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

However, this is on condition that the client does not check or convert the domain names. This is a problem since some clients make strict checks of domain name syntax or use proprietary methods to perform partial multilingual encoding. Multilingual domain names cannot be handled by such clients through dnsproxy.

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

UNIX usually sends DNS queries to the resolver library and current resolvers checks the syntax of domain names and rejects non-ASCII code as an error. To cope with this problem, the bind8 resolver library in mDNkit has been provided with an 8-bit through patch. By installing a resolver library with this patch the local encoding of multilingual domain names handled by clients is submitted to dnsproxy and can be used with multilingual DNS servers. The Windows resolver (WINSOCK) is already 8-bit through so this is not a problem.

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

The remaining problem, i.e. checks and conversions performed by the application, a problem that affects many clients and which little can be done about when sources are not made public. Functions are not provided in mDNkit to handle this issue. However, a patch that removes the check of domain names from nslookup(in bind8), an often used DNS check tool, and squid, an often used as a general-purpose proxy, are included.

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

Refer to document for information on which applications dnsproxy can enable to handle multilingual domain names.