DNS逆引きの基本について

逆引き設定するということをやろうとしたが、逆引き(DNS)について知らなすぎるので調べてみました。

目次

体系的な知識・技術を身につけるための学習法について - Kentaro Kuribayashi's blog
にならって、目次形式で調べてみようと思います。

  • 1. 基本
    • 1. 逆引きってなんだろう
    • 2. in-addr.arpa ドメインって何?
    • 3. 逆引きしてみよう
    • 4. 逆引き設定(ゾーンファイルの編集を行って正引き・逆引きが行えるようにする)
  • 2. 応用
    • 1. 逆引き設定はするべき?設定しないと何か不便なの?メールでSPAM扱いされる?
    • 2. 逆引きの信頼性について
  • 3. 付録
    • 1. DNSサーバ(BIND)のインストール

1. 基本

1. 逆引き(DNS)ってなんだろう

逆引き - Wikipedia

逆引き(reverse lookup,reverse DNS lookup)とは、DNSを使って、IPアドレスからドメイン名に変換する行為や、結果を言う。

IPアドレスからドメイン名に変換する」というのがポイントですね。

2. in-addr.arpa ドメインって何?

逆引き - Wikipedia

IPv4の場合、in-addr.arpa ドメインを使って逆引きが行なわれる。

「in-addr.arpa ドメインを使って」と書いてありますが、in-addr.arpa ドメインとはなんでしょう。

http://itpro.nikkeibp.co.jp/word/page/10009069/

DNS(domain name system)上で逆引きを実現する仕組み。
<略>
ホスト名-IPアドレス変換の仕組みと同様に,IPアドレスに名前を付けたものがin-addr.arpaアドレスである。例えば192.168.0.1は1.0.168.192.in-addr.arpaと表記する。

なるほど、逆引きを実現する仕組みがin-addr.arpa ドメインなのですね。

正引きの場合は、以下のようにまず「ルートネームサーバ」へ問い合わせて、どんどん問い合わせていき IPアドレスをしっているサーバにたどり着きます。

逆引きの場合は以下のようになります。


図参照( http://www.atmarkit.co.jp/flinux/rensai/bind02/bind02.html

3. 逆引きしてみよう

どうやって逆引きされるかはわかりましたので、逆引きしてみましょう。DNSサーバを自分で立ち上げて実験してみました。
dig コマンドを利用します。 -x というオプションを利用すれば逆引きできます。

# dig @localhost -x 10.20.138.22

; <<>> DiG 9.3.4-P1 <<>> @localhost -x 10.20.138.22
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42006
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;22.138.20.10.in-addr.arpa.     IN      PTR

;; ANSWER SECTION:
22.138.20.10.in-addr.arpa. 86400 IN     PTR     hogehoge.fugafuga.com.

;; AUTHORITY SECTION:
22.138.20.10.in-addr.arpa. 86400 IN     NS      10.20.138.22.22.138.20.10.in-addr.arpa.

;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jun  2 21:22:09 2009
;; MSG SIZE  rcvd: 105

hogehoge.fugafuga.com というドメインが帰ってきました。

こんどは、どのように逆引き設定されているのか見てみましょう。


ちなみに、正引きすると以下のようになります。

# dig @localhost hogehoge.fugafuga.com 

; <<>> DiG 9.3.4-P1 <<>> @localhost hogehoge.fugafuga.com
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10957
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;hogehoge.fugafuga.com.         IN      A

;; ANSWER SECTION:
hogehoge.fugafuga.com.  86400   IN      A       10.20.138.22

;; AUTHORITY SECTION:
hogehoge.fugafuga.com.  86400   IN      NS      ns.fukushige.localhost.com.

;; ADDITIONAL SECTION:
ns.fukushige.localhost.com. 86400 IN    A       10.20.138.21

;; Query time: 215 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jun  2 19:33:44 2009
;; MSG SIZE  rcvd: 108
4. 逆引き設定(ゾーンファイルの編集を行って正引き・逆引きが行えるようにする)

まず、named.conf は以下のようになっています。


/var/named/chroot/etc/named.conf

controls {
        inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

include "/etc/rndc.key";

options {
        directory "/var/named/";
};

zone  "ns.fukushige.localhost.com" {
        type master;
        file  "ns.fukushige.localhost.com.zone";
};

zone  "hogehoge.fugafuga.com" {
        type master;
        file  "hogehoge.fugafuga.com.zone";
};

zone "22.138.20.10.in-addr.arpa" IN {
        type master;
        file "22.138.20.10.in-addr.arpa.zone";
        allow-update { none; };
};

zoneファイルは以下のようになっています。


/var/named/chroot/var/named/ns.fukushige.localhost.com.zone

$TTL    86400
@               IN      SOA     ns.fukushige.localhost.com. root.ns.fukushige.localhost.com. (
                                2009060201 ; Serial
                                10800      ; Refresh after 1 hour
                                3600       ; Retry after 5 minutes
                                604800     ; Expire after 1 week
                                86400)     ; Minimum TTL of 4 hour

                IN      A       10.20.138.21
                IN      NS      ns.fukushige.localhost.com.


/var/named/chroot/var/named/22.138.20.10.in-addr.arpa.zone

$TTL    86400
@               IN      SOA     hogehoge.fugafuga.com. root.hogehoge.fugafuga.com. (
                                2009060202 ; Serial
                                10800      ; Refresh after 1 hour
                                3600       ; Retry after 5 minutes
                                604800     ; Expire after 1 week
                                86400)     ; Minimum TTL of 4 hour

                IN      NS      10.20.138.22
                IN      PTR     hogehoge.fugafuga.com.

/var/named/chroot/var/named/hogehoge.fugafuga.com.zone

$TTL    86400
@               IN      SOA     hogehoge.fugafuga.com. root.hogehoge.fugafuga.com. (
                                2009060202 ; Serial
                                10800      ; Refresh after 1 hour
                                3600       ; Retry after 5 minutes
                                604800     ; Expire after 1 week
                                86400)     ; Minimum TTL of 4 hour

                IN      A       10.20.138.22
                IN      MX      10 hogehoge.fugafuga.com.
                IN      NS      ns.fukushige.localhost.com.

2. 応用

1. 逆引き設定はするべき?設定しないと何か不便なの?メールでSPAM扱いされる?

個人的な見解では「しておいて損はない」というところでしょうか。

最近でも、逆引きできないIPからのアクセスに対するメールはスパム扱いされたりして、メールが届かないプロバイダなどがあるようです。


http://neta.ywcafe.net/000395.html
にも書いてありますが、逆引きできない状態(レンタルサーバでIP共有しているなど)もありますので、メールのフィルターも考えないと、
大切なメールが届かないなんてことにもなりそうですよね。

2. 逆引きの信頼性について

逆引き - Wikipedia
にも書いてありますが、

# 逆引きを設定していないIPアドレスも存在する。
# 逆引きで返ってくる結果は所詮は自称にすぎないので、信頼性をそれなりにでも確保するためには、得られた結果をもう一度正引きして、元のIPアドレスと合致するか確かめる必要があるだろう。
  * つまりドメイン名を正引きして得たIPアドレスに対して、逆引きして得たドメイン名は一致しないこともある。
# ISP等によっては、クライアントホストのIPアドレスの逆引きに、アクセスポイント名が含まれるドメイン名を設定しているところもある。

つまり、正引きデータをもとに、逆引きが帰ってきているわけではないので、そもそも信頼性は低い。

逆引きで正しくないドメインが帰ってきたとしても、正引きのドメインが怪しいかどうかも不明。
そもそも逆引きを設定していないIPも存在するわけで、逆引きの意味はなんなのかと思うが、メールフィルターで逆引きしていないとメールをSPAM扱いするというメールサーバ向けの設定みたいな位置になっているような気がする・・・。

3. 付録

1. DNSサーバ(BIND)のインストール

DNSサーバにはBINDを利用します。

# yum -y install bind caching-nameserver bind-chroot

環境

# cat /etc/redhat-release 
CentOS release 5 (Final)
[root@DNS_Server named]# rpm -qa | grep bind
bind-utils-9.3.4-10.P1.el5
bind-libs-9.3.4-10.P1.el5
ypbind-1.19-8.el5
bind-chroot-9.3.4-10.P1.el5
bind-9.3.4-10.P1.el5
# rpm -qa | grep nameserver
caching-nameserver-9.3.4-10.P1.el5