プログラマ 福重 伸太朗 〜基本へ帰ろう〜 このページをアンテナに追加 RSSフィード

2009-06-02

DNS逆引きの基本について

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

目次

体系的な知識・技術を身につけるための学習法について - antipop

にならって、目次形式で調べてみようと思います。

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

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 ドメインとはなんでしょう。

「in-addr.arpaドメイン」とは:ITpro

DNS(domain name system)上で逆引きを実現する仕組み。

<略>

ホスト名-IPアドレス変換の仕組みと同様に,IPアドレスに名前を付けたものがin-addr.arpaアドレスである。例えば192.168.0.1は1.0.168.192.in-addr.arpaと表記する。

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

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

f:id:japanrock_pg:20090602203200p:image

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

f:id:japanrock_pg:20090602203159g:image

図参照( 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からのアクセスに対するメールはスパム扱いされたりして、メールが届かないプロバイダなどがあるようです。


DNS逆引きチェックによるスパム対策は百害あって一利無し

にも書いてありますが、逆引きできない状態(レンタルサーバ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

参考

逆引きとは【reverse lookup】(DNSリバースルックアップ) - 意味/解説/説明/定義 : IT用語辞典

@IT:DNS Tips:逆引きが使われるのはどんな時か

@IT:DNS Tips:1つのIPアドレスに複数のホスト名を付けている場合の逆引きとは

MTA のアクセス制御

hi-ho、DNS逆引きによるメール送信制限を撤回

mnx.ne.jpとzero.ad.jpがDNS逆引き設定の無いメールサーバからのメールをspam扱いしはじめた件

reject_unknown_clientは迷惑メール対策としておすすめではない

◇逆引きゾーンファイルの作成◇初心者のためのLinuxサーバー構築講座(CentOS 自宅サーバー対応)☆お便利サーバー.com☆

DNSの仕組みの基本を理解しよう

no title

dig コマンドを理解する - プログラマ 福重 伸太朗 〜基本へ帰ろう〜

Value-Domain.comでのDNS逆引き設定について

ドメインValue-Domainで契約していて、サーバ自体は他のiDCにあり、専用のグローバルIPを持っており、Value-Domainの管理画面でできるDNS設定(正引き)で専用のグローバルIPに向けていました。

それで、逆引き設定もできないかな?と思い問い合わせたところ、この形態ではできない仕様になっていることがわかりました。


サポート様からは以下のように返答がありました。

大変申し訳ありませんが、弊社のサーバーでは逆引き設定は行えません。

ドメインの管理管轄は弊社

IPの管理管轄はISP

といった形になり、弊社が管理管轄権限のないIPアドレスに対して、逆引き機能の提供はできない仕様になっております。


すごいのが、サポートセンターにフォームで問い合わせてから、10分で回答があったこと。体制すごいですね。感謝です。

このこともサポートページに書いてあるといいですね。

権限委譲はされているので、逆引きはこちらでDNSサーバ立ててやるしかなさそうですね。