【入門】BIND で DNS サーバーを構築

スポンサーリンク

BIND (Berkeley Internet Name Domain) とは

BIND とは、DNS 権威サーバー、もしくは キャッシュ DNS サーバーとして機能するソフトウェアです。

DNS 名前解決の基本的な概念を知らない方については、最初に以下の記事からご覧ください。

スポンサーリンク

BIND の使い方

具体的な BIND の使い方を紹介します。各設定の詳細は後述します。

BIND をインストール

sudo yum install -y bind

BIND (named)の設定

sudo vim /etc/named.conf

以下の内容を追記します。

  • listen-onDNS: サーバーの IP アドレスを設定
  • allow-query:DNS リクエストを受け付ける IP レンジ
  • zone "hogetech.info" IN:hogetech.info ゾーンファイルを指定

赤線箇所が編集箇所です。

options {
        listen-on port 53 { 192.0.2.1;localhost; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { 192.0.2.0/24;localhost; };
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone "hogetech.info" IN{
        type master;
        file "hogetech.info.zones";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
sudo vim /var/named/hogetech.info.zones
$TTL    86400
@         IN       SOA     test.hogetech.info.  postmaster.hogetech.info.(
                                        1          ; Serial
                                        7200       ; Refresh
                                        900        ; Retry
                                        1209600    ; Expire
                                        86400 )    ; Minimum
        IN NS test.hogetech.info.
test    IN A 192.0.2.1
        IN AAAA ::ffff:c000:201
sudo named-checkconf -z
zone hogetech.info/IN: loaded serial 1
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0

上記のように表示されると構文エラーはありません。

「**** loaded serial *」以外のメッセージが表示された場合は構文エラーとなります。

sudo systemctl start named

BIND の動作確認

実際に BIND (127.0.0.1)に対して test.hogetech.info の名前解決をリクエストして、DNS サーバーとして正しく動作していることを確かめます。

dig test.hogetech.info @127.0.0.1
;; ANSWER SECTION:
test.hogetech.info.	86400	IN	A	192.0.2.1

;; AUTHORITY SECTION:
hogetech.info.		86400	IN	NS	test.hogetech.info.

;; ADDITIONAL SECTION:
test.hogetech.info.	86400	IN	AAAA	::ffff:192.0.2.1

上記のように表示されると成功です。以降では今まで設定した内容を詳しく説明します。

スポンサーリンク

BIND の設定の詳細

設定ファイル or ディレクトリファイル or ディレクトリパス
主要設定ファイル/etc/named.conf
RFC 1912 ゾーン設定ファイル
(localhost や 127.0.0.1 等の最小限の DNS レコードを設定)
/etc/named.rfc1912.zones
DNSSEC ルート鍵/etc/named.root.key
ゾーンディレクトリ(マスター)/var/named
ゾーンディレクトリ(セカンダリ)/var/named/slaves
データ用ディレクトリ/var/named/data

主要設定ファイル

ここでは主要設定ファイル /etc/named.conf について説明します。

named.conf の書式は以下のとおりです。

<ステートメント> [<パラメータ>] {
  <サブステートメント>
};

よく利用するステートメントは、以下の4種類です。

ステートメント説明
options ステートメントnamed の基本的な設定
logging ステートメントBIND のログ出力方法を設定
zone ステートメントゾーンデータベースの種類とゾーンファイルを設定
include ステートメント指定したファイルを追加の設定ファイルとして読み込む
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/networking_guide/sec-bind-namedconf-state

options ステートメント

options ステートメントには、以下のサブステートメントがあります。

サブステートメント
listen-onlisten するポートと IP アドレス
listen-on-v6listen するポートと IPv6 アドレス
directoryマスターのゾーンディレクトリ
dump-filerndc コマンドの dumpdb 命令で、named がキャッシュしているデータのダンプ先
statics-filerndc コマンドの stats 命令で、統計情報の出力先
memstatistics-filenamed が終了時に、メモリの使用統計の出力先
allow-queryDNS サーバーに問い合わせ可能なクライアントの許可
recursing再帰的な問い合わせが可能か
dnssec-enableDNSSEC が有効か
dnssec-validation問い合わせの結果を DNSSEC を使って検証するか
managed-keys-directoryRFC5011 で定義された DNSSEC トラストアンカーの自動更新のためのファイルを指定
pid-filePID 情報の出力先
session-keyfileTSIG セッションキーの保存先

以下のような設定をする場合の設定例を示します。

  • IP アドレス 192.0.2.1、ポート 53 で listen
  • 192.0.2.1/24 のホストから DNS 問い合わせ
options {
        listen-on port 53 { 192.0.2.1;localhost; };
        allow-query     { 192.0.2.0/24;localhost; };
};

logging ステートメント

logging ステートメントでよく利用するサブステートメントは以下のとおりです。

サブステートメント説明
categoryログのカテゴリをどの channel に出力するか指定
channelログの書き出し場所を指定

category には主に以下の値があります。

category説明
defaultデフォルトのカテゴリ。channel を指定しなかった場合はこれ
generalすべてのカテゴリを表す。
databaseデータベース操作を行ったときのログメッセージ
security許可/不許可となったリクエストのログメッセージ
config設定ファイルに処理を行った際のログメッセージ

channel には主に以下の値があります。

channel説明
fileログの出力先
sizeサイズ制限
severity重要度
versionバージョン

以下のような設定をする場合の設定例を示します。

  • category が security のログは default_security の channel を利用
  • default_security の channel は /var/named/data/security.log に保存
logging {
        category "security" {
                "default_security";
        };
        channel default_security {
                file "data/security.log";
                severity dynamic;
        };
};

zone ステートメント

zone ステートメントでよく利用するサブステートメントは以下のとおりです。

サブステートメント説明
typeゾーンデータベースの種類
・hint (ルートドメインの情報が格納された場所)
・master (マスターサーバー)
・slave (スレーブサーバー)
・stub (スタブサーバー)
・foward (フォワーディングサーバー)
fileゾーンファイルのパス
allow-update動的な情報更新を許可するか

その他のサブステートメントは以下をご覧ください。

15.2.2.2. 一般的なステートメントのタイプ Red Hat Enterprise Linux 7 | Red Hat Customer Portal
The Red Hat Customer Portal delivers the knowledge, expertise, and guidance available through your Red Hat subscription.

以下のような設定をする場合の設定例を示します。

  • hogetech.info ゾーンを管理
  • クラスは IN
  • ゾーンデータベースはマスターサーバー
  • マスターのゾーンファイルは /var/named/hogetech.info.zones にある
zone "hogetech.info" IN{
        type master;
        file "hogetech.info.zones";
};

include ステートメント

include ステートメントはファイルのパスを指定することで追加の設定を読み込みます。

include "/etc/named.rfc1912.zones";

ゾーンファイル

ゾーンファイルには以下の2つを記載します。

項目説明
マスターファイルディレクティブリソースレコードの共通設定を記載
リソースレコードディレクティブゾーン情報を持つリソースレコードを設定

 リソースレコードの詳細については以下の記事をご覧ください。

マスターファイルディレクティブ

マスターファイルディレクティブには、以下の項目が設定可能です。

項目説明
$ORIGINゾーンの基点名。
デフォルト値は主要設定ファイルにある zone ステートメントの引数
$INCLUDE追加のファイルを include
$TTLデフォルトの TTL を設定

すべてのリソースレコードで TTL を 86400 とする場合、マスターファイルディレクティブを以下のように設定します。

$TTL          86400

リソースレコードディレクティブ

リソースレコードディレクティブは、以下のフォーマットでリソースレコード記載します。

<owner> [period] <class> <type> <value>

以下のような設定をする場合のリソースレコードの設定例を示します。

  • $ORIGIN は hogetech.info とします
  • hogetech.info のプライマリーサーバーは hogetech.info
  • hogetech.info のドメイン管理者のメールアドレスは postmaster@hogetech.info
  • test.hogetech.info の A レコードは 192.0.2.1
  • test.hogetech.info の AAAA レコードは ::ffff:c000:201
@         IN       SOA     test.hogetech.info.  postmaster.hogetech.info.(
                                        1          ; Serial
                                        7200       ; Refresh
                                        900        ; Retry
                                        1209600    ; Expire
                                        86400 )    ; Minimum
        IN NS test.hogetech.info.
test    IN A 192.0.2.1
        IN AAAA ::ffff:c000:201
  • 「@」 は 基点名「$ORIGIN」 を表します。
    • 「@ IN SOA」は「hogetech.info IN SOA」を表します。
  • <owner> は基点名と連結してドメインを表します
    • 「test IN A 192.0.2.1」は「test.hogetech.info IN A 192.0.2.1」を表します
  • <owner> に何も記載しない場合は直前の <owner> と同じです
    • 「IN AAAA ::ffff:c000:201」は「test.hogetech.info IN AAAA ::ffff:c000:201」を表します

参考資料

コメント