連載
» 2003年03月21日 00時00分 UPDATE

実用 BIND 9で作るDNSサーバ(4):キャッシュ/逆引きDNSの構築と運用 (2/2)

[鶴長鎮一,@IT]
前のページへ 1|2       

逆引きの仕組みと逆引きDNSの運用

 おろそかにされがちな逆引きサーバですが、その効果は意外に大きいものです。WebサーバにしてもFTPサーバにしても、そのサーバの運用者の意図次第で、接続元のIPからドメイン名を検索してログファイルに記録したり、場合によっては逆引きしたドメイン名からIPアドレスを正引きし、同一性を確認する場合があります。

 こうした機能はクライアントだけでなく、サービスを提供するサーバやネットワーク側にも多くのコストを要求します。運用側も十分に承知しており、こうした同一性の確認およびIPアドレスの逆引き結果をログファイルに記録するなどの行為は、多くのサイトでは行われていません。それでも接続元の身元を確実にとらえておきたいと意図する運営者や、ログファイルにはホスト名を残したいと思う管理者は少なからず存在します。そのようなサイトにアクセスした場合は、逆引きの効果が大きく左右します。

 効果があることは分かっていても、なかなか運用に至れない原因の1つに、割り振られるIPアドレスのレンジの問題があります。第2回で紹介した逆引きはクラスC()のアドレスに基づいたものでした。


 しかし、実際に手に入れることができる固定IPは、月に数万円のコストを支払ったとしても8〜16個程度で、クラスC未満のCIDR(Classless Inter-Domain Routing:コラム「CIDRとクラス」参照)でしか割り当てられません。クラスC未満の逆引き設定は、契約しているプロバイダやネットワーク事業者に依存するため、一概に論じることはできません。しかし、多くの場合はここで紹介する方法が適用できるはずです。

 また、どうしてプロバイダはそのような逆引き設定を強いるのかを知ることも重要です。まず、逆引きそのもののメカニズムを理解しましょう。

コラム CIDRとクラス

 IPアドレスをサブネットで分ける際は、従来クラスA、B、Cが用いられていました。しかし、たった3種類の分け方しかないようでは、きめ細かく分割することができず、無駄にアドレスを消費することになります。

 例えば、IPアドレスが1000個必要な組織があった場合、クラスの概念ではクラスBの6万5536個を割り出すことになります。クラスCの256個(ホストとしては254個)では足りないためです。しかし、クラスCを4個割り当てればIPアドレスの無駄をなくすことができます。

 上記の組織にクラスC:192.168.0.0〜192.168.3.0を割り当てたとします。この場合、IP付与先のルーティングはクラスC:192.168.0.0〜192.168.3.0までの4つのレンジを1つずつ指定しなければなりません。そこで、CIDR(Classless Inter-Domain Routing)を用います。いまではよく見かける表記法である192.168.0.0/22を用いることで、4つのレンジを一くくりにするのです。こうすることで、ルーティングに掛かるコストを抑えようというわけです。

  192.168.0.0/24
192.168.1.0/24
192.168.2.0/24
192.168.3.0/24
→ 192.168.0.0/22
  4行で表記していたものが1行で済み、
ルーティングテーブルも簡素化できる

 これによりクラスC未満のレンジに対しても、192.168.0.0/25や192.168.0.0/29などのようにサブネット化が可能となったわけです。


逆引きの仕組み

 逆引きに関するゾーンファイルの記述方法やnamed.confでの指定はすでに第2回で紹介したとおり、とりわけ難しいものではありません。

 192.168.10.0/24のIPレンジに対しては、named.conf中に「10.168.192.in-addr.arpa」ゾーンを設けます。上位3オクテットまでを逆に並べて、末尾に「.in-addr.arpa」を付けると機械的に覚えてもいいのですが、仕組みは実に単純です。結果からいってしまえば、逆引きにもちゃんとドメインツリーの仕組みが使われています。example.jp(図2)と192.168.10.0/24のドメインツリー(図3)を見比べてみましょう。

図2 example.jpのドメインツリー 図2 example.jpのドメインツリー
図3 192.168.10.0/24のドメインツリー 図3 192.168.10.0/24のドメインツリー

 正引きと同じように、「.」(ルート)を起点にドメインツリー検索が行われていることが分かるでしょう。「arpa(arpaTLD)」は、予約された特別なものですが、トップレベルドメイン(TLD)の1つにすぎません。その下にIPv4のアドレス体系を表す「in-addr」ドメインが続くわけです。

 IPv4のアドレス体系があるわけですから、当然IPv6も「ip6.arpa」として予約されています。ほかにもIP電話の番号管理を見据えた「e164.arpa」ドメインが定義されています(参考:「DNS導入に向けての予備知識」)。in-addrに続いて、IPアドレスの第1オクテット(この場合は192)、第2オクテット(168)と連なり、最後にホストのアドレスに到達します。ホストのIPアドレスを探し出すまでにたどる道筋は、まさにドメインツリーです。

クラスC未満での逆引き設定

 上記の逆引きドメインツリーでは、IPアドレスの第3オクテット以下を分割することはできません。1(または0)から255までを1つのゾーンファイルに収める必要があります。しかし、これではクラスC未満でIPアドレスを割り当てられた場合は、割り当てIPをクラスC単位で管理するネットワーク事業者にいちいち修正依頼することになります。

図4 クラスCの分割割り当て時の運用 図4 クラスCの分割割り当て時の運用

 そこで、クラスCの逆引きを管理するネットワーク事業者側の逆引きゾーン情報にサブドメインとCNAMEを用いることで、見かけ上はクラスC未満で割り振られた各契約者側で逆引き情報を管理できます。

 まず、ネットワーク事業者側のnamed.confファイルおよびゾーンファイルから見ていきましょう。

zone "20.168.192.in-addr.arpa" {
        type master;
        file "example.rev"; ←ファイル名は何でも構わない
};
ネットワーク事業者のnamed.confに追加される記述

$TTL 86400
@            IN      SOA ns1.example.jp. root.example.jp. (
                     2002122001 ; serial
                     3600       ; refresh 1hr
                     900        ; retry 15min
                     604800     ; expire 1w
                     86400      ; min 24hr
)
         IN      NS      ns1.example.jp.
         IN      NS      ns2.example.or.jp.
;
; 一般的な逆引きの場合
101           IN      PTR   pc1.example.jp.
102           IN      PTR   pc2.example.jp.
103           IN      PTR   pc3.example.jp.
104           IN      PTR   pc4.example.jp.
105           IN      PTR   pc5.example.jp
;
;
; 顧客Aのための設定
sub-a IN    NS      ns.example-a.jp. ←「sub-a」はそれぞれのネットワーク事業者で決められる
1     IN    CNAME   1.sub-a.20.168.192.in-addr.arpa.
2     IN    CNAME   2.sub-a.20.168.192.in-addr.arpa.
3     IN    CNAME   3.sub-a.20.168.192.in-addr.arpa.
(省略)
;
; 顧客Bのための設定
sub-b  IN    NS      ns.example-b.jp.
8      IN    CNAME   8.sub-b.20.168.192.in-addr.arpa.
9      IN    CNAME   9.sub-b.20.168.192.in-addr.arpa.
(省略)
ネットワーク事業者のexample.rev

 named.confは、一般的なクラスCでの逆引き定義と変わりません。「file」には、それぞれのルールに合わせて任意のファイル名を指定します。

 ここで指定されたゾーンファイルexample.revを見てみると、IPアドレスに対するホスト名の指定に用いられるPTRの行があり、各顧客に割り当てているIPレンジにはCNAMEが使われています。そのCNAMEで指定された先に、IPアドレスの第4オクテット目「.sub-a.20.168.192.in-addr.arpa.」が指定されています。通常のin-addr.arpa.の使い方ではクラスCまでしか指定できないため、独自にサブドメインを設け、見かけ上クラスC未満のアドレスをそれぞれのIP割り当て先(この場合は顧客Aや顧客B、C)のDNSに委譲しています。その際、サブドメインに対する「NS」をそれぞれ顧客のDNSに向けているわけです。

図5 サブドメインによる分割 図5 サブドメインによる分割

 では、クラスC未満の逆引きを委譲された側(この場合は顧客A)のnamed.confや逆引きゾーンファイルを見てみましょう。

zone "sub-a.20.168.192.in-addr.arpa" {
        type master;
        file "example-a.rev"; ←ファイル名は何でも構わない
};
顧客Aのnamed.conf

$TTL 86400
@            IN      SOA ns.example-a.jp. root.example-a.jp. (
                     2002122001 ; serial
                     3600       ; refresh 1hr
                     900        ; retry 15min
                     604800     ; expire 1w
                     86400      ; min 24hr
)
         IN      NS      ns.example-a.jp.
;
; 一般的な逆引き
1           IN      PTR   sv1.example-a.jp.
2           IN      PTR   sv2.example-a.jp.
顧客Aのexample-a.rev

 named.confのゾーンの指定は、ネットワーク事業者が決めたサブドメイン(sub-a)付きのもので指定されています。逆引き用のゾーンファイル(example-a.rev)は至って一般的なものです。ここにきて、ようやく192.168.20.1のIPアドレスに対するホスト名が解決されるわけです。

 digコマンドを使って確認してみましょう。1.sub-a.20.168.192.in-addr.arpa.を経てsv1.example-a.jp.に到着することが分かります。

$ dig @127.0.0.1 -x 192.168.20.1

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

;; ANSWER SECTION:
1.20.168.192.in-addr.arpa. 86400 IN   CNAME   1.sub-a.20.168.192.in-addr.arpa.
1.sub-a.20.168.192.in-addr.arpa. 86400 IN PTR sv1.example-a.jp.

 皆さんが固定IPアドレスをレンジで取得する際は、ネットワーク事業者(ほとんどがプロバイダですが)から割り当てられるIPを使用し、逆引きDNSの作成方法もそれぞれのネットワーク事業者に従うことになります。とはいえ、多くはここで紹介した方法が取られています。サブドメインの命名規則が独特のものになっているため、ネットワーク事業者ごとにさまざまなルールが存在しているように見えますが、事業者側でどのようにやっているかが分かれば、理解が早くなると思います。


 今回はBIND 9をキャッシュサーバと逆引きDNSの2つの側面から紹介しました。キャッシュサーバの機能は、前回紹介した正引きゾーンサーバと今回の逆引きサーバとでは相反する用途で用いられるため、できればサーバそのものも分けて運用したいところです。しかし、リソースそのものに限りがある環境では、併用して運用せざるを得ないかもしれません。ですが、ゾーンサーバとキャッシュサーバはまったく異なる性質のものであることはよく覚えておきましょう。

参考資料
▼RFC2317 「Classless IN-ADDR.ARPA delegation」http://rfc-jp.nic.ad.jp/cgi-bin/direct.cgi?keyword=2317&language=eng&x=24&y=7
▼JPNIC公開文書「Class Cより小さなアドレス空間の割当(サブアロケーション)に関するパイロットプロジェクトについて」
ftp://ftp.nic.ad.jp/jpnic/ipaddress/archive/ip-addr-suballoc.txt.960108
すでにドキュメントの効力期限は過ぎていますが、クラスC未満の逆引きDNSについては現在でも参考になります。


前のページへ 1|2       

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。