DNSサーバが使用するメモリ量を制限するには以下、3つの方法があります。


1 キャッシュに利用するメモリ量を制限する。

named.confファイルのoptionステートメントに「max-cache-size」を指定します。
キャッシュされたデータ量が指定した値に達すると、新旧問わずキャッシュされたTTLを強制的にゼロ(消去)します。

options {
(省略)
    max-cache-size      60M;
(省略)
};


上記ではキャッシュに利用するメモリサイズを60Mに制限しています。デフォルトでは無制限となっています。



2 キャッシュに残すレコードのTTLを短くする。
TTLの値はそもそもレコード側で記述されていますが、キャッシュ側でレコードの値を書き換えます。
max-cache-sizeで制限すると新旧問わずレコードが消去されてしまいますが、メモリに限界があるときにはTTLで制限するという手法が好まれます。

TTLを制限するには、named.confのoptionステートメントに
「max-cache-ttl(キャッシュのTTLの最大値)」
「max-ncache-ttl(ネガティブキャッシュのTTLの最大値)」
「cleaning-interval(TTLが切れたレコードを完全に削除する)」
を設定します。

options {
(省略)
    max-ncache-ttl      300; ネガティブキャッシュのTTLを5分にする
    max-cache-ttl       600;  レコードのTTLを10分にする
    cleaning-interval       15;  キャッシュのクリーニングを15分間隔で行なう
(省略)
};


デフォルト値は、max-cache-ttl が 604800(1週間)、max-ncache-ttl が10800(3時間)です。
キャッシュしたレコードのTTLが設定した値よりもともと短かった場合はそちらが適用されます。


3 同時に再起問い合わせを受け付けるクライアント数を制限する
同時に多数の再起問い合わせを受け付けると、DNSサーバはそれだけ多くのメモリを消費することになります。同時に再起問い合わせを受け付けるクライアント数を制限するには、named.conf のoption ステートメントに「recursive-clients」を指定します。

options {
(省略)
    recursive-clients   400;
(省略)
};



デフォルト値は1000です。つまりデフォルトでも同時に1000を上回るクライアントからの再起問い合わせは受け付けないようになっています。大規模なDNSサーバでもなければそれほど多くのクライアントから同時に再起問い合わせを受ける事は無いと思われますが、ワーム攻撃によって問い合わせが急増するケースもあります。また、再起問い合わせは意外と多くのメモリを消費します。

例えば、1000のクライアントから同時に再起問い合わせを受け付けた場合、約20Mバイトのメモリを消費すると言われています。



本日はココまで!
今日覚えておいてもらいたい事項は以下のとおり!

・DNSのメモリ消費量を制限する方法は以下の3通りある。
①「max-cache-size」でキャッシュの最大値を指定できる。キャッシュされたデータ量が指定した値に達すると、新旧問わずキャッシュされたTTLを強制的にゼロ(消去)になる。
②「max-cache-ttl」でキャッシュに残すレコードのTTLを短く出来る。
③「recursive-clients」で同時に再起問い合わせを受け付けるクライアント数を制限できる。