現在位置: ホーム 技術ノート 強いBIND DNSサーバを構築する 第六回 - 安全なゾーン転送設定

強いBIND DNSサーバを構築する 第六回 - 安全なゾーン転送設定

前回は、ISC BIND DNSサーバについて、SOAレコードの書き方を中心に解説しました。今回は、SOAレコードの主要なパラメータに関連してゾーン転送設定をまとめます。

前回は、マスター側で、SOAレコードのゾーン転送関連パラメータの最適値を検討しました。

しかし、マスターがSOAレコードでスレーブサーバに提示する値が、必ずスレーブサーバに都合の良いものであるとは限りません。

前回述べたように、ゾーン転送のタイミングは、マスター/スレーブ相互の都合を検討して決定されるべきもので、マスターの一方的な都合をスレーブサーバに強制した場合、数1000個のゾーンのスレーブを務めるサーバなどでは、最悪、スレーブサーバ側で処理しきれなくなります。

多数のユーザ企業にセカンダリサーバサービスを提供するISPの場合、各ユーザ企業の担当者とゾーン転送のタイミングを協議するのは事実上不可能です。

BINDには、ゾーン転送のタイミング等にスレーブ側で制限を加えるための設定項目が提供されています。今回は、マスター/スレーブ双方について、ゾーン転送の安全性に拘わる設定項目を検討してみます。

スレーブサーバ側でゾーン転送タイミングを制限する

  • min-refresh-time, max-refresh-time
    REFRESHの値の範囲を制限するパラメータです。min-refresh-timeが下限、max-refresh-timeが上限を定めます。スレーブサーバでこれらの値が設定されている場合、マスターサーバがSOAレコードで指定したREFRESH値が制限範囲を超えた場合、スレーブサーバは、強制的に上限値あるいは下限値にてREFRESHを行います。
  •  min-retry-time, max-retry-time
    RETRYの値の範囲を制限するパラメータです。min-retry-timeが下限、max-retry-timeが上限を定めます。SOAレコードでの設定同様、それぞれmin-refresh-time, max-refresh-timeで指定した値の整数分の一の値を設定します。

 これらのパラメータは、options部、ゾーン定義部いずれでも設定可能です。

  • max-transfer-time-in
    一回のゾーン転送の継続時間の最大値です(分単位)。指定した時間を経過してもゾーン転送が終了しない場合、そのゾーン転送はその時点で中止されます。省略時の規定値は120(分)です。サーバ数台程度の小規模なサイトのひとつのゾーンの転送にかかわる時間は、WAN経由でも10ms前後で終了します。多数のゾーンを転送する場合は、実際にすべてのゾーンの転送が終了するまでの所要時間をnamedのログで確認した後、すべてのゾーンを転送するのに十分な値を設定します。
    論理的に設定可能な最大値は40320分(28日)ですが、ゾーン転送が10時間以上に及ぶなどという場合は、この値を変更して対応するよりも、複数のネームサーバに分散させるなど、合理的な対策を講じるべきです。

    これらのパラメータは、options部、ゾーン定義部いずれでも設定可能です。
  • transfer-format  ( one-answer|manyanswers )
    マスターからゾーン転送する際に、複数のレコードをパケットのサイズが許す範囲でまとめて転送する("manyanswers")か、一回に1レコード("one-answer")とするかを指定します。このパラメータは、ゾーン単位で指定することはできません。named.confのグローバル部分または、options{}, server{}, view{}いずれかの内部で指定します。特定のマスターサーバに固有の値を指定する場合は、口述のserver{}を利用しることができます。
  • transfers-in
    並列処理可能なゾーン転送の最大数を規定します。省略時の規定値は10です。
  • transfer-per-ns
    マスターサーバ毎に並列処理可能なゾーン転送の最大数を規定します。省略時の規定値は2です。

以下は、これらのパラメータを指定したスレーブサーバのnamed.confの記述例です。

ゾーン転送関連パラメータを指定したスレーブサーバのnamed.conf

options {
     version "unknown"
     hostname "somehost.some.domain";
     directory "/var/named/";
     dump-file "/var/named/data/cache_dump.db";
     statistics-file "/var/named/data/named_stats.txt";
     pid-file "/var/run/named/named.pid";
     // 
            listen-on port 53 {
            127.0.0.1;
            192.168.0.2;
      };    
      auth-nxdomain yes;
      // Zone transfer specifications
      notify no;
      // Zone transfer parameters for SLAVE zone(s)
      max-refresh-time 86400;
      min-refresh-time 3600;
max-retry-time 3600;
min-retry-time 900; max-transfer-time-in 60; transfer-in 10; transfer-per-ns 2; // allow-transfer { none; }; allow-query-cache { none; }; allow-query { any; }; // recursion no; }; include "/etc/myzones.zones";

次回は、ゾーンファイルにホストを登録してみます。

次回に続く

ドキュメントアクション