メインコンテンツへジャンプする

JPNICはインターネットの円滑な運営を支えるための組織です

ロゴ:JPNIC

WHOIS 検索 サイト内検索 WHOISとは? JPNIC WHOIS Gateway
WHOIS検索 サイト内検索

bind9 パッチ


概要

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

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

  • bind9 の DNS サーバ (named) において、ドメイン名をテキストに 変換する際にUTF-8 文字がそのまま通るようになります。
  • bind9 のリゾルバ (lightweight resolver) の提供する名前解決用の API 関数に、ホスト名としてローカルエンコーディングで表現されたホスト名を 指定できるようになります。
  • 同じく名前解決結果として、ローカルエンコーディングで表現された ホスト名が返されるようになります。
  • dig、host、nslookup コマンドがローカルエンコーディングのドメイン名を 受け付け、また問い合わせ結果に含まれるドメイン名をローカルエンコーディングで 表示するようになります。

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


named

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

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

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

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

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

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


リゾルバ

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

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

  • 多言語ホスト名の指定
    リゾルバライブラリが提供する名前解決用の API 関数に対して、 ホスト名引数にローカルエンコーディングで表されたホスト名を指定することが できるようになります。 ローカルエンコーディングで入力されたこれらのドメイン名は 自動的に DNS プロトコル上で用いられるエンコーディングに変換され、 DNS サーバへの問い合わせが行われます。エンコーディングの変換の際には 同時に正規化も行われます。
  • 多言語ドメイン名の返却
    リゾルバライブラリが提供する名前解決用の API 関数が、 名前解決結果のデータとしてローカルエンコーディングで表されたホスト名を 返すことができるようになります。

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

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

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

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

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


dig/host/nslookup

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

  • 多言語ドメイン名の入力
    コマンド引数、あるいは標準入力で、ローカルエンコーディングで 表現された非 ASCII のドメイン名を指定することができるようになります。 ローカルエンコーディングで入力されたこれらのドメイン名は 自動的に DNS プロトコル上で用いられるエンコーディングに変換され、 DNS サーバへの問い合わせが行われます。エンコーディングの変換の際には 同時に正規化も行われます。
  • 多言語ドメイン名の表示
    DNS サーバからの返答に含まれる多言語ドメイン名がローカルエンコーディングに 変換され、表示されるようになります。

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

このページを評価してください

このWebページは役に立ちましたか?
よろしければ回答の理由をご記入ください

それ以外にも、ページの改良点等がございましたら自由にご記入ください。

回答が必要な場合は、お問い合わせ先をご利用ください。

ロゴ:JPNIC

Copyright© 1996-2024 Japan Network Information Center. All Rights Reserved.