Tips

2015.03.31

Linux BIND 第1回

ゾーンについて

ゾーンとは /etc/named.conf の zone で記述されるゾーンファイルで管理される単位をさす。

1つのゾーンの中に複数のサブドメインを含む場合もあるため
1つのゾーン=1つのドメインともいえない。

また1台のサーバで複数のゾーンを管理することももちろんある。(複数のゾーンファイルを持つ)

SOAレコードについて

SOAレコードのMNAME

そのゾーンのマスター(プライマリ)となるDNSサーバを記述する。
/etc/named.conf の zone の type master と合わせておかないと
うまくゾーン転送できない恐れあり。

リフレッシュ、リトライについて

基本的にリフレッシュタイムよりもリトライのタイムは短くする。
そうしないとリトライが経過する前にリフレッシュしに行く恐れあり。

NSレコードについて

NSレコードを複数書いた場合は冗長化や負荷分散になるが、
基本的に書いた先の Aレコードは当然マスタースレーブ構成などにして、
ゾーン転送していないといけない。
そうしないとレコードの不整合がおきて、
親ドメインは単純にNSレコードに記述されたそれぞれのドメインに対して
ラウンドロビンするだけなので、
片方のNSレコードにクエリを投げてIPが引けたらクライアントにIPを返したり、
もう片方のNSレコードにクエリを投げてIPが引けなかったらクライアントに見つかりませんでしたという動きをする。
つまりクライアントからすると引けたり引けなかったりが起こる。

BINDの内部の動き

BINDに入ってきたデータは以下のような順で参照される。
1./etc/named.conf の中のドメイン名にマッチする zone が参照される。
2.zone のなかの file にあるゾーンファイルを参照しに行く。
3.ゾーンファイルの中の NSレコードに記述してあるDNSサーバ名を確認する。
4.3のDNSサーバ名にマッチするAレコードを探す
5.DNSサーバのAレコードが見つかったらそのサーバにクエリ(クライアントからのクエリ)を転送する
6.5で見つかったDNSサーバが自分自身だったらクライアントからのクエリに対する Aレコードに該当するものがあるかを探す。
  もし5で見つかったDNSサーバが自分自身ではなかった場合はそのDNSサーバにクエリを転送する。
7.Aレコードが見つかればクエリに対する解答を送ってきたクライアントもしくは別のDNSサーバに返す。※これ以降は転送先のサーバで1からの繰り返し。
  もしここで名前に対して見つかったものがAレコードではなくNSレコードだったらそのNSレコードの記述されているDNSサーバ名を確認する。
8.7のDNSサーバ名にマッチするAレコードを探す
9.DNSサーバのAレコードが見つかったらそのサーバにクエリを転送する。※これ以降は転送先のサーバで1からの繰り返し。

BINDでキャッシュしたレコードの情報の消去

たとえば委任などで親ドメインのサーバが子ドメインのレコードをキャッシュしている場合は
親ドメインのDNSサーバが自分でクライアントに子ドメインのDNSサーバのレコードを返してしまう。

(子のレコードのキャッシュを保持)
DNSクライアント ————→ 親ドメインDNSサーバ ————→ 子ドメインDNSサーバ

親ドメインDNSサーバ上で以下のコマンドを実行するとキャッシュを削除できる。

# rndc flush

削除されたかどうかは以下のようにすると確認ができる。
以下のようにすると現在BINDの中でキャッシュしているレコードの情報をダンプする。

# rndc dumpdb

上記のコマンドを実行するとキャッシュされたデータは以下のファイルに保存される。

# vi /var/named/data/cache_dump.db

ダンプファイルの中身を確認した際にNSレコードに対するIPアドレスが誤って載っていた場合は
ネガティブキャッシュである。

※ネガティブキャッシュが親ドメインのDNSサーバ上に残っていると
 設定が正しくても子ドメインのレコードの情報が正しく引けなかったりするので注意
 反対に設定が誤っていてもポジティブキャッシュが親ドメインのサーバ上に残っていれば
 そのサーバに転送できるのでIPが引けてしまったりもする。

Linux認定資格 LPICを取るなら・・

Linux資格 「LPIC Lv1」徹底解説 連載目次

Recent News

Recent Tips

Tag Search