この記事では逆引きの設定方法を紹介するが、まずその前に、逆引きにおけるゾーンがどのように構成されているかを知っておく必要がある。なお、本説明ではIPv4のみを扱うものとする。
逆引きにおけるゾーンの構成
IPアドレスの表記は「192.0.2.100」のように、1オクテットごとに“.”(ピリオド)で区切られている。逆引きでは、この1オクテットをDNSにおける1つのサブドメインとし、IPアドレスとは反対の順番に並べ替え(100.2.0.192)、先頭に逆引きゾーンを表すドメイン名(in-addr.arpa)を付けて表記する。
このように逆引きは、見た目は反対に並んでいるように見えるが、DNSツリーをルートから順番にたどっていくことで、正引きと同じように名前解決をすることが可能となるように作られている。
BIND 9における逆引きの設定方法
では実際に、BINDにおける逆引きの設定方法について説明する。ここではプロバイダーから「192.0.2.0/24(192.0.2.0〜192.0.2.255)」というIPアドレスブロックが割り当てられ、逆引きのゾーンを委任されたと仮定する(注1)。named.confファイルに、このIPアドレスブロックを逆引き表記したゾーンを記述する(リスト1)。
注1:これよりも小さいIPアドレスブロック(256個未満)の逆引きの設定方法については、DNS Tips「/24よりも小さいアドレスブロックの逆引きはどう設定するのですか?」で説明する。
zone "2.0.192.in-addr.arpa" { ←逆引きの表記方法に従ったゾーンを記述する
type master;
file "192.0.2.rev"; ←ゾーンファイル名を指定する
};
次に、実際に逆引きを記述するゾーンファイルを作成する。ゾーンファイルの記述方法については、他のDNS Tips「権威DNSサーバーの作り方を教えてください」(今後公開予定)で示される正引きのゾーンファイルと基本的に同じである。設定例をリスト2に示す。
$ORIGIN 2.0.192.in-addr.arpa.
; default TTL, see RFC 2308
$TTL 3600 ; Default TTL
;
; @ entry, SOA, NS are here
;
@ IN SOA ns1.example.jp. postmaster.example.jp. (
2014121001 ; Serial, YYYYMMDDVV (VV: version)
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ; Negative cache TTL
)
IN NS ns1.example.jp. ←逆引きの委任を受けた権威DNSサーバーのホスト名を記述
IN NS ns2.example.jp. ←逆引きの委任を受けた権威DNSサーバーのホスト名を記述
IN NS ns3.example.jp. ←逆引きの委任を受けた権威DNSサーバーのホスト名を記述
;
100 IN PTR host1.example.jp.
レコードの内容 | IPアドレスの4オクテット目 | クラス | リソースレコードの種類 | ホスト名 |
---|---|---|---|---|
例 | 100 | IN | PTR | host1.example.jp. |
表1 PTRレコード |
ホスト名の部分で、最後のピリオドを付けるのを忘れないこと。ピリオドを付け忘れると、$ORIGINで指定した内容が付け加えられ、以下のように設定されてしまう。
host1.example.jp.2.0.192.in-addr.arpa.
named.confファイルとゾーンファイルの準備が完了したら、namedを再起動させるか、rndcコマンドで設定ファイルの再読み込みを行う。無事namedが起動できたら、digコマンドやdrillコマンドで確認を行う。
digコマンドを使って権威DNSサーバーを直接調べるときは、“+norec”と“-x”オプションを付ける。“+norec”は非再帰検索(注2)を実行し、“-x”は、逆引き検索でIPアドレスを直接指定できるようにするためのオプションである(注3)。
注2:キャッシュDNSサーバーが権威DNSサーバーに問い合わせるときに用いる。
注3:以降の例では権威DNSサーバーのホスト名として“localhost”を指定しているが、実際に使う場合には適切なものに変更すること。
dig +norec @localhost -x 192.0.2.100
drillコマンドを使って逆引きを調べるときは、“-o rd”と“-x”オプションを付ける。
drill -o rd @localhost -x 192.0.2.100
digコマンドを使った場合は、リスト3に示すような結果が得られる。
% dig +norec @localhost -x 192.0.2.100
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> +norec @localhost -x 192.0.2.100
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54363
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0
;; QUESTION SECTION:
;100.2.0.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
100.2.0.192.in-addr.arpa. 3600 IN PTR host1.example.jp.
;; AUTHORITY SECTION:
2.0.192.in-addr.arpa. 3600 IN NS ns1.example.jp.
2.0.192.in-addr.arpa. 3600 IN NS ns2.example.jp.
2.0.192.in-addr.arpa. 3600 IN NS ns3.example.jp.
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Wed Dec 10 21:37:25 2014
;; MSG SIZE rcvd: 126
digコマンド、drillコマンドで“-x”オプションを付けずに逆引きを調べるには、query-typeに“ptr”を指定し、IPアドレスを逆引きの表記方法にしたものを指定する。
% dig +norec @localhost ptr 100.2.0.192.in-addr.arpa.
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> +norec @localhost ptr 100.2.0.192.in-addr.arpa.
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10222
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0
;; QUESTION SECTION:
;100.2.0.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
100.2.0.192.in-addr.arpa. 3600 IN PTR host1.example.jp.
;; AUTHORITY SECTION:
2.0.192.in-addr.arpa. 3600 IN NS ns3.example.jp.
2.0.192.in-addr.arpa. 3600 IN NS ns2.example.jp.
2.0.192.in-addr.arpa. 3600 IN NS ns1.example.jp.
;; Query time: 1 msec
;; SERVER: ::1#53(::1)
;; WHEN: Wed Dec 10 21:40:02 2014
;; MSG SIZE rcvd: 126
Copyright © ITmedia, Inc. All Rights Reserved.