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

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

ロゴ:JPNIC

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

dnsproxy

概要

dnsproxyは、クライアントからのローカルコードベースの多言語ドメイン名を 含むDNS要求を受け取り、多言語化対応したDNSが受付けられるドメイン名に 変換し、また逆に、DNSからの応答の多言語ドメイン名を、 クライアント側で認識できる形式に戻します。

これによって、クライアントは何も改造することなく 各種の多言語ドメイン名を使うことができるようになります。 また、DNSサーバから見た場合には、クライアント+dnsproxyによって 多言語ドメイン名に対応したクライアントとして動作しているように 見えることになります。

ただし、dnsproxy が正しく動作するには、クライアントのリゾルバライブラリが ローカルエンコーディングのドメイン名をそのまま透過させ、エラーにならない ようになっている必要があります。残念ながら現在 UNIX のリゾルバライブラリの 多くは 8ビットスルーではないので、そのままでは dnsproxy を用いても 多言語ドメイン名を扱えるようにはなりません。この場合には

というような方法をとる必要があります。

起動

$ dnsproxy [オプション...]

オプション

-daemon

dnsproxyをデーモンとして起動します。

-config config-file

コンフィギュレーションファイルを指示します。 コマンドラインで指示しなかった場合には デフォルトのコンフィギュレーションファイルが使用されます。 詳しくはコンフィギュレーションの 項で説明します。

-logfile log-file

dnsproxyが実行ログを出力するファイル名を指定します。 特に指定されなかった場合には、コンフィギュレーションファイルで 指示されたログファイル、あるいはデフォルトのログファイルに 出力されます。

コンフィギュレーション

設定情報はコンフィギュレーションファイルに記載されます。 コンフィギュレーションファイルは、 dnsproxyの起動時にコマンドラインで指示することができます。

% dnsproxy -config <config-file>

コマンドラインで指示しなかった場合には デフォルトのコンフィギュレーションファイルが使用されます。 デフォルトのコンフィギュレーションファイルは、ディレクトリ

    /usr/local/etc

の下の

    dnsproxy.conf

です。ディレクトリは、mDNkit作成時に

    configure --sysconfdir=DIR

で指示することもできます。

コンフィギュレーションファイルはテキストファイルで、 以下のコンフィギュレーションデータを指定します。

listen
dnsproxyがクライアントからの要求を受付ける ネットワークアドレス、ポート番号を指定します。
    listen <address>
<address>は以下のいずれかの形式で指示します。
<IP address>:<port number>
:<port number>
<IP address>
省略された場合には
IP address 0.0.0.0 # INADDR_ANY
port number 53
が使用されます。

allow-access

アクセス制限を設けることにより、dnsproxy に接続可能なクライアントを制限します。

    allow-acccess <where>
<where>は次のいずれかの形式で指定します。
<IP address>
<IP address>/<prefix-length>
前者は特定の IP アドレスを持つホストからの接続を許可し、 後者は<IP address>と<prefix-length>で指定される アドレスプリフィックスを持つ任意のホストからの接続を許可します。

このエントリは複数指定することが可能で、複数指定した場合にはそのいずれか 1つでもマッチすれば接続が許可されます。

このエントリを指定しなかった場合にはすべてのホストからの接続が許可されます。

forward

dnsproxyが、DNS要求を転送し、応答を受け取る本来のDNSサーバの ネットワークアドレス、ポート番号を指定します。

    forward <address> [ bind4compat ]
<address>の形式は上のlistenのものと同じです。

オプションの bind4compatが指示された場合には、 UDPでリクエストを転送する時に、ソースアドレスとして、 listenで指示されたアドレス/ポートを使用します。

log-file

dnsproxyが実行ログを出力するファイル名を指定します。

    log-file <path>
ログファイル名は、 以下のコマンドラインオプションで指定することもできます。 両方指定した場合にはコマンドラインオプションの指定のほうが優先されます。
    dnsproxy -logfile <address>
指定されなかった場合には、
    /tmp/dnsproxy.log
に書き込まれます。

log-level

ログのレベルを設定します。

    log-level <level>
レベルとして指定できる値は次の通りです。
none
一切ログを記録しません。
fatal
致命的なエラーのみ記録します。
warn
警告メッセージも記録します
trace
実行トレースメッセージも記録します。

指定しなかった場合のデフォルトは warn です。

none を指定した場合、ログファイルは作成されません。

trace レベルを指定すると大量のログが出力されるので、短時間で ログファイルが巨大になる可能性があります。注意してください。

log-on-denied

アクセス制限で接続を拒否した場合に、それをログに記録するかどうかを 指定します。

    log-on-denied <yes-or-no>
指定できる値は yes または no です。 yes を指定した場合には接続拒否記録がログに残されます。

client-translation

クライアント側でのドメイン名のエンコーディングを指示します。

    client-translation <ZLD> <Encoding>
多言語ドメイン名に対応していないクライアントの場合には、 通常、クライアントのローカルエンコーディングになっています。 そのような場合には
    client-translation . Shift_JIS
という形で、<ZLD>無しで指示します。

多言語ドメイン名の手法によっては、 クライアント側で多言語ドメイン名を通常のDNSでも 受付けられる形式にエンコードして、それを通常のドメイン名と 区別するために ZLD (Zero Level Domain) を付加するものがあります。 そのような場合には、付加されるZLDとその時のドメイン名の エンコーディング方法とを対応付けることにより、 他の多言語ドメイン名の手法のDNSサーバを利用することが できるようになります。

    client-translation .i-dns.net UTF-5
クライアント側のドメイン名のエンコーディングは、 ZLD が異なっていれば、複数指定することができます。

ただし、mDNkit のデフォルトの設定では ZLD の指定はできないように なっています。ZLD を使用するためには、mDNkit のコンパイルの際、 configure コマンドに --enable-zld を指定する必要があります。 この指定をせずに mDNkit をコンパイルした場合には、ZLD の指定は すべて無視されます。

クライアントから送られてきたDNS要求のドメイン名は、 ここで指示したエンコーディングから、内部的に使用される UTF-8エンコーディングに変換されます。 そして、後述の正規化、サーバ側エンコーディングへの変換が 行なわれてDNSサーバに送出されます。また、DNSサーバからの 応答は、逆に元のエンコデーィングに戻されてクライアントに 返されます。

ここで指定可能なエンコーディング名は、mDNkit付属のlibmdnおよび 使用するiconv ライブラリに依存します。 iconv ライブラリによって、エンコーディング名が異なっている ことがありますので、ライブラリのマニュアルをご覧になって 使用可能なエンコーディング名を確認してください。 付属のlibmdnでは、iconvが提供するエンコーディングの他に、 多言語化DNS用に提案されている

UTF-5 draft-jseng-utf5-01.txt
RACE draft-ietf-idn-race-03.txt
BRACE draft-ietf-idn-brace-00.txt
LACE draft-ietf-idn-lace-01.txt
DUDE draft-ietf-idn-dude-00.txt
UTF-6 draft-ietf-idn-utf6-00.txt
をサポートしています。

alternate-encoding

DNS サーバから返されたドメイン名がクライアントのローカルエンコーディングに 変換できない文字を含んでいた場合に、ローカルエンコーディングの代わりに使用する エンコーディングを指定します。

    alternate-encoding <Encoding>
指定するエンコーディングは必ず「ASCII互換エンコーディング (ACE)」と呼ばれる、 変換結果が従来のドメイン名として使用可能な文字 (英数字およびハイフン) だけ からなるエンコーディングでなければなりません。たとえば ASCII 互換 エンコーディングの一つである RACE を指定する場合には次のように指定します。
    alternate-encoding RACE

normalize

ドメイン名の正規化手法を指定します。

    normalize <scheme> ...
正規化手法は複数指定可能で、左側から順に適用されていきます。

クライアントから送られてきたDNS要求のドメイン名は、 内部的に使用されるUTF-8エンコーディングに変換された上で、 ここで指示した正規化が適用されます。

次に示す正規化手法を指定することができます。

  • ascii-uppercase
  • ascii-lowercase
  • unicode-uppercase
  • unicode-lowercase
  • unicode-form-c
  • unicode-form-kc
  • ja-kana-fullwidth
  • ja-alnum-halfwidth
  • ja-compose-voiced-sound
  • ja-minus-hack
  • ja-delimiter-hack

それぞれの内容については libmdnのマニュアルnormalizer モジュール を参照してください。

server-translation

DNSサーバ側のドメイン名エンコーディング方法を指示します。

    server-translation <ZLD> <Encoding>
ZLDが不要なエンコーディングであれば、<ZLD> の部分には '.' を指示します。
    server-translation . UTF-8
ZLDを必要するエンコーディングでは、ZLDとエンコーディング名の 両方を指定します。
    server-translation .i-dns.net UTF-5
ZLD の指定を有効にするには、mDNkit のコンパイル時の設定が必要です。 client-translationの項を ご覧ください。

指定可能なエンコーディングは、前出の client-translation でのものと同じです。

user-id

dnsproxy が動作するユーザを指定します。

    user-id <user>

通常、dnsproxy は特権ポートを使用するためルート権限で起動させる必要が ありますが、ルート権限のままで動作させるのはセキュリティ上好ましくありません。 この指定により、dnsproxy は特権ポートを作成したあとサービスを開始する前に 指定したユーザの権限で動くようになります。

<user> にはユーザ名あるいはユーザ ID 番号を指定することができます。

group-id

dnsproxy が動作するグループを指定します。

    group-id <user>
これは user-id エントリと似ていますが、ユーザの代わりにグループを 指定する点が異なります。

<group> にはグループ名あるいはグループ ID 番号を指定することが できます。

root-directory

dnsproxy が動作する際のルートディレクトリを指定します。

    root-directory <path>

これもセキュリティ対策の一つです。dnsproxy が動作する際のルートディレクトリ を指定することで、そのディレクトリの外にはアクセスできないようにします。 この指定により、dnsproxy はサービスを開始する前に、chroot() システムコールを用いて指定したディレクトリをルートディレクトリとして 設定します。

<path> にはルートとして設定したいディレクトリ名を指定します。

シグナル

dnsproxy に SIGHUP シグナルを送ると、ログファイルをいったん閉じ、 再度オープンするという動作を行います。これは次のような手順で ログをアーカイブできるようにするためです。

  1. mv コマンド等を用いてログファイルを別の名前にする。
  2. dnsproxy に SIGHUP を送り、新たなログファイルをオープンさせる。

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

このWebページは役に立ちましたか?
ページの改良点等がございましたら自由にご記入ください。

このフォームをご利用した場合、ご連絡先の記入がないと、 回答を差し上げられません。 回答が必要な場合は、お問い合わせ先をご利用ください。

ロゴ:JPNIC

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