Chapter8: DNS 3
この章ではルートネームサーバーとリゾルバについて学びます。
Lesson
リゾルバ
今までは手動で名前解決をしていましたが、普段インターネットを利用する際には「リゾルバ」がその役割を担ってくれます。 リゾルバは一般に「フルリゾルバ」と「スタブリゾルバ」の 2つで構成されています。
スタブリゾルバは各デバイスに存在し、フルリゾルバへ向けて「再帰問い合わせ」を投げ、その結果を受け取ります。
フルリゾルバは、スタブリゾルバから再帰問い合わせ(Recursive request)を受けてネームサーバーに反復問い合わせ(Iterative request)をし、ドメイン名を解決します。
反復問い合わせは、複数回の非再帰問い合わせ(Non-recursive request)をすることを指します。
非再帰問い合わせは、ネームサーバーのローカルにある情報だけで応答します。応答結果は次の 5 つのいずれかになります。
- 完全なドメイン名が存在するとき: ドメイン名の指定レコード
- そのドメインが別のネームサーバーに移譲されていることがわかっているとき: 移譲先のドメイン名(NS レコードの RDATA)
- そのドメインにエイリアス(CNAME レコード)が存在するとき: エイリアス元のドメイン名(CNAME レコードの RDATA)
- ドメイン名が存在しないとき: NXDOMAIN
- 完全なドメイン名が存在するが、指定レコードが存在しないとき: NODATA
フルリゾルバのアルゴリズムは次のようになります。
- キャッシュを確認し、もし存在したらその結果を返す。
- ローカルの情報から、問い合わせを投げるのに適切なネームサーバー群を選択する。
- 選択したネームサーバー群にそのうちのどれか 1 つが応答を返すまで問い合わせを投げる
- 応答結果を分析する
- ドメイン名の指定レコードが帰ってきたら、その結果をキャッシュし、スタブリゾルバに返す
- NS レコードが帰ってきたら、その結果をキャッシュし、2.に戻る
- CNAME レコードが帰ってきたら、その結果をキャッシュし、探索対称のドメイン名を変更したうえで 1.に戻る
- それ以外の結果(エラー)が帰ってきた場合、そのネームサーバーを選択したネームサーバー群から除外し、3.に戻る
このようにフルリゾルバとスタブリゾルバを分離することで、キャッシュを共有できるようになり、より効率的に名前解決ができます。
TIP
bind9 にはフルリゾルバの機能もあります
Assignment
1. ルートネームサーバーを設定してみよう
ルートネームサーバーに問い合わるように設定してみよう。
ヒント1
named.conf.default-zones
を見るといいでしょう
ヒント2
bind9 ルートネームサーバー 設定
などで調べるといいでしょう
答え
/usr/share/dns/root.hints
追記もしくは書き換える。
. 3600000 NS NS.ROOT.
NS.ROOT. 3600000 A {ルートネームサーバーの Global IP}
2. リゾルバを使って名前解決してみよう
1.で立てたフルリゾルバをつかって s1~s3 のサーバーのいずれかから名前解決をしてみて下さい。
ヒント
スタブリゾルバの設定は/etc/resolv.conf
に書くことができます。
答え
/etc/resolv.conf
nameserver {ルートネームサーバーの Global IP}