# bind9 パッチ

# bind9 patch

- 概要
- Overview
- named
- named
- リゾルバ
- Resolver
- dig/host/nslookup
- dig/host/nslookup

## 概要

## Overview

mDNkit では bind9 用のパッチファイルを提供しています。 このパッチを適用することにより、 bind9 において多言語ドメイン名を扱うことが可能になります。

The mDNkit provides a patch file for bind9. This patch file enables bind9 to support multilingual domain names.

具体的には、このパッチは bind9 に次のような機能を追加します。

The patch adds the following functionality to bind9.

- bind9 の DNS サーバ (named) において、ドメイン名をテキストに 変換する際にUTF-8 文字がそのまま通るようになります。
- When a domain name is converted to text in bind9 DNS servers (named), UTF-8 characters will be allowed to pass.
- bind9 のリゾルバ (lightweight resolver) の提供する名前解決用の API 関数に、ホスト名としてローカルエンコーディングで表現されたホスト名を 指定できるようになります。
- It will enable the name resolving API function provided with the bind9 resolver (a lightweight resolver) to denote host names in local encoding to be specified as host names.
- 同じく名前解決結果として、ローカルエンコーディングで表現された ホスト名が返されるようになります。
- Host names denoted in local encoding can be returned as a result of name resolution.
- dig、host、nslookup コマンドがローカルエンコーディングのドメイン名を 受け付け、また問い合わせ結果に含まれるドメイン名をローカルエンコーディングで 表示するようになります。
- The dig, host and nslookup commands will accept locally encoded domain names and display domain names included in the result of a query in local encoding.

bind9 へのパッチの適用方法は、パッチファイルの先頭に記載してあります。 インストールガイドの bind9 用パッチの適用とインストールも ご覧ください。

Instructions for how to install this patch to bind9 are given at the beginning of the patch file. Refer also to the section "Adding and installing the bind9 patch"in the Installation guide.

## named

このパッチの適用により、DNS サーバである named に対して、 UTF-8 文字の透過機能が追加されます。

A UTF-8 character pass function★(透過機能)★ will be added to the named DNS server by installing this patch.

bind9 の named ではドメイン名の処理はほとんど8ビットスルーになって いるのですが、named 内のドメイン名の内部表現からテキスト表現への 変換部分は8ビットスルーになっておらず、ASCII 文字以外 はバックスラッシュでクォートされ、`\DDD` という形式の表現に 変換されてしまいます。

Although most domain name processing under bind9 named is 8-bit through, the conversion of the internal expression of domain names to text in named is not 8-bit through. Therefore, non-ASCII characters are quoted with backslashes as `\DDD`.

これは DNS プロトコル上で用いられるエンコーディングとして UTF-8 を 使用する場合に問題となります。

This makes it difficult to use UTF-8 for encoding DNS protocols.

本パッチでは、変換しようとする文字がUTF-8 文字の 場合にはバックスラッシュによるクォートをせずそのまま透過させる機能を 追加しました。 この動作は named の設定ファイル (named.conf) で切り替えることができます。 デフォルトは互換性のため透過しない設定になっています。 もしDNS プロトコル上で用いるエンコーディングとして UTF-8 を用いる場合には、 設定ファイルの options セクションの `allow-utf8` パラメータを 次のように指定してください。

This patch contains a function that allow UTF-8 characters to pass through, so that they are not converted and quoted with backslashes. This function can be turned on or off in the named configuration file (named.conf). For the sake of compatibility, in the default setting UTF-8 characters are not let through. When UTF-8 characters are to be used as encoding in a DNS protocol, change the options section `allow-utf8` parameter in the configuration file as follows:

>     options {
>         ...
>         allow-utf8 yes;
>         ...
>     };

DNS プロトコル上で用いられるエンコーディングとして RACE 等の ASCII 互換エンコーディングを 使用する場合には、この設定は不要です。

This setting is not required when RACE or other ASCII compatible encoding is used as encoding in a DNS protocol.

## リゾルバ

## Resolver

bind9 のリゾルバは、bind8 までのものとは全く異なり、 lightweight resolver ライブラリと呼ばれるアプリケーションに リンクされるライブラリと、lightweight resolver デーモンと呼ばれる サーバから構成されています。

The bind9 resolver differs greatly from any resolver up to bind8, in that it is comprised of a library, linked to an application referred to as a lightweight resolver library, and a server called a lightweight resolver daemon.

本パッチを適用することにより、このリゾルバに多言語ドメイン名の 処理機能が加わります。具体的には次のような機能が追加されます。

The use of this patch enables the resolver to handle multilingual domain names. It specifically adds the following functions.

- 多言語ホスト名の指定
  リゾルバライブラリが提供する名前解決用の API 関数に対して、 ホスト名引数にローカルエンコーディングで表されたホスト名を指定することが できるようになります。 ローカルエンコーディングで入力されたこれらのドメイン名は 自動的に DNS プロトコル上で用いられるエンコーディングに変換され、 DNS サーバへの問い合わせが行われます。エンコーディングの変換の際には 同時に正規化も行われます。
- Specifying Multilingual host name
  It allows the name resolving API function provided by the resolver library to specify host names whose host name argument contains local encoding. Locally encoded domain names can automatically be converted to the encoding used in a DNS protocol and be used for querying DNS servers. The encoding is normalized when it is converted.

- 多言語ドメイン名の返却
  リゾルバライブラリが提供する名前解決用の API 関数が、 名前解決結果のデータとしてローカルエンコーディングで表されたホスト名を 返すことができるようになります。
- Multilingual domain names returned
  The name resolving API function provided by the resolver library can return host names denoted in local encoding as a result of the resolved data.

DNS プロトコル上で用いられるエンコーディングや使用する正規化方式の指定は あらかじめコンフィギュレーションファイルで設定しておきます。 このファイルの設定方法については mDNkit リゾルバのコンフィギュレーション をご覧ください。

The encoding and the normalization scheme to be used in DNS protocol should first be set in the configuration file. Refer to the mDNkit resolver configuration for information on how to set up this file.

以下に、パッチによって多言語化される名前解決用 API 関数の一覧を示します。 多言語化された API 関数は、従来の ASCII ドメイン名に加え、 非 ASCII ドメイン名を扱うことができます。

Name-resolving API functions that the patch enables to handle multilingual domain names are listed below. Multilingual API functions can handle non-ASCII domain names in addition to traditional ASCII domain names.

- lwres_getaddrinfo()
- lwres_getnameinfo()
- lwres_gethostbyname()
- lwres_gethostbyname2()
- lwres_gethostbyname_r()
- lwres_gethostbyaddr()
- lwres_gethostbyaddr_r()
- lwres_getipnodebyname()
- lwres_getipnodebyaddr()

引数の型や返り値の型に変更はありません。 パッチを当てる前と同様の呼び出し方法で、従来の ASCII ドメイン名と、 非 ASCII ドメイン名の両方を扱うことができます。

Argument types and returned value types do not change. Both regular ASCII domain names and non-ASCII domain names can be handled through the call up methods used prior to patch installation.

本パッチを適用した bind9 リゾルバは MDN ライブラリ を利用してエンコーディング 変換や正規化を行います。従って bind9 リゾルバを使用したクライアントを コンパイルする場合、MDN のライブラリ libmdn をリンクする必要が あります。もしあなたのシステムが iconv() をサポートしていない 場合には、iconv() のライブラリも合わせてリンクする必要があります。

A bind9 resolver with this patch installed utilizes the MDN library for encoding, conversion and normalization. Thus when compiling clients that use the bind9 resolver, the MDN library libmdn must be linked. If your system does not support iconv(), the iconv() library must also be linked.

## dig/host/nslookup

bind9 には DNS の問い合わせツールとして dig、host、nslookup という コマンドが付属します。bind9 パッチを適用することにより、これらはいずれも 多言語ドメイン名が扱えるようになります。具体的には以下の機能が 付加されます。

Included within bind9 are the dig, host and nslookup commands for querying DNS. These commands can support multilingual domain names when the bind9 patch is installed. The following functions have been added.

- 多言語ドメイン名の入力
  コマンド引数、あるいは標準入力で、ローカルエンコーディングで 表現された非 ASCII のドメイン名を指定することができるようになります。 ローカルエンコーディングで入力されたこれらのドメイン名は 自動的に DNS プロトコル上で用いられるエンコーディングに変換され、 DNS サーバへの問い合わせが行われます。エンコーディングの変換の際には 同時に正規化も行われます。
- Entry of multilingual domain names
  Non-ASCII domain names in local encoding can be specified by command arguments and standard input. Locally encoded domain names are automatically converted to encoding used in a DNS protocol and are used for querying DNS servers. The encoding is normalized as it is converted.

- 多言語ドメイン名の表示
  DNS サーバからの返答に含まれる多言語ドメイン名がローカルエンコーディングに 変換され、表示されるようになります。
- Display of multilingual domain names
  Multilingual domain names that are part of a response from a DNS server are converted to local encoding before being displayed.

DNS プロトコル上で用いられるエンコーディングや使用する正規化方式の指定は あらかじめコンフィギュレーションファイルで設定しておきます。 このファイルの設定方法については mDNkit リゾルバのコンフィギュレーション をご覧ください。

The encoding and the normalization scheme to be used in a DNS protocol shoud first be set in the configuration file. Refer to the mDNkit resolver configuration for information on how to configure this file.