【入門】CentOS7 BINDを使ったDNSサーバー構築

【入門】CentOS7 BINDを使ったDNSサーバー構築

みなさんこんにちは さくちゃん です。

本日はBINDを使ってDNSサーバーを構築していきます。
では早速やっていきましょう。

【復習】DNSサーバーの仕組み

DNSサーバを構築するにあたり、DNSサーバーの仕組みの理解は必須になります。

また、DNSサーバーの流れがイメージ出来ていないと、後々修正が出来なくなってしまいます。

まだDNSサーバーの仕組みを理解出来ていないという方は、まずここから学びましょう!

BINDのインストール

ではやっていきましょう。
まずはBINDのインストールです。

下のコマンドでBINDをインストールします。

yum -y install bind  // インストールコマンド

設定ファイルの編集

インストールが出来たら、次はBINDの設定ファイルを編集していきます。
BINDの設定を変更する場合は「named.conf」を編集していきます。

vi /etc/named.conf  # 設定ファイルを開く

※基本設定ファイルは「etc」に保存されます。
※viコマンドの使い方はこちらを参照

設定ファイル(named.conf)を開くとデフォルトはこのようになっています。

options { 
    listen on port 53 { 127.0.0.1; };
    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.
    secroots file “/var/named/data/named.secroots”;
    allow query {localhost; };

    recursion.
    cause your server to become part of large scale DNS amplification
    attacks. Implementing BCP38 within your network would greatly
    reduce such attack surface

    recursion yes;

    dnssec enable yes;
    dnssec validation yes;
    /* Path to ISC DLV key
    bind keys file “/etc/named.iscdlv.key”;
    managed keys directory “/var/named/dynamic”;
    pid file “/run/named/named.pid”;
    sessionsession–keyfile “/run/named/session.key”;keyfile “/run/named/session.key”;
};

logging {
    channel default_debug {
        file “data/na med.run”;
        severity dynamic;
    };
};

zone ” . ” IN {
    type hint;
    file “name.ca”;
};

include “/etc/named.rfc1912.zones”;
include “/etc/named.root.key”;

では実際に編集していきましょう!
編集する箇所は、下のようになります。

options {
    listen on port 53 { 127.0.0.1; };   # サーバーのIPアドレスを指定。ポート53はDNSが使用するポート番号
    listen on v6 port 53 { ::1; };   # 上と同様で、IPv6を使用する場合に使用
    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.
    secroots file "/var/named/data/named.secroots";
    allow query { XXX.XXX.XXX.XXX; };   # 問い合わせを許可するIPアドレス。
    allow query { any; };   # 全てのIPアドレスから許可する場合は「any」を指定

    recursion.
    cause your server to become part of large scale DNS amplification
    attacks. Implementing BCP38 within your network would greatly
    reduce such attack surface<br>

    recursion yes;   # *1再帰的な問い合わせを許可する。許可しない場合はno
    forwarders{ 8.8.8.8; };   # *2 自身で名前解決できない場合に問い合わせを転送するDNSサーバーのIPアドレス

    dnssec enable yes;
    dnssec validation yes;
    /* Path to ISC DLV key
    bind keys file "/etc/named.iscdlv.key";
    managed keys directory "/var/named/dynamic";
    pid file "/run/named/named.pid";

    sessionsession--keyfile "/run/named/session.key";keyfile "/run/named/session.key";
};

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

# ↓デフォルトで設定されている、rootDNSサーバー
zone " . " IN {
    type hint;
    file "name.ca";
};

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

※1 キャッシュサーバーとして利用する場合は、「yes」と指定
※2 「8.8.8.8」はgoogleが提供しているパブリックDNS。

BINDの起動

設定ファイルの編集が終えたら、BINDを起動させます。
起動させるには、下のコマンドを使います。

systemctl start named    # BINDの起動

その他のコマンド

ステータスの確認

BINDが稼働(active)、停止(stop)しているか確認するコマンドです。

systemctl status named    # ステータスの確認

再起動

BINDを起動した後に、BINDの設定ファイル(named.conf)を編集した場合は、設定を反映させるために、必ずBINDの再起動を行います。

systemctl restart named    # BINDの再起動

BINDの自動起動設定 

サーバーを停止、再起動した後に、BINDが自動で起動するようにするコマンドです。

systemctl enable named     # BINDの自動起動

注意点

BINDの起動、再起動時に多いのですが、起動、再起動をした後に下のようなエラーができることが多いです。

systemctl restart named

# error
Job for named.service failed because the control process exited with error code. See "systemctl status named.service" and "journalctl -xe" for details.

これは、先ほど設定したBINDの設定ファイル(named.conf)の構文にミスがある時に起こるものです。

この場合は、エラーを修正する必要があります。修正しないとうまく起動しません。

まずはエラーの原因を探します。

エラーの原因は、下のコマンドのどちらかを実行するとエラーがわかります。
どちらでもいいのですが、個人的には「journalctl -xe」をよく使います。

journalctl -xe
systemctl status named

上のコマンドを実行すると、エラー内容が返ってきます。
エラーの原因はいくつかあるのですが、今回は一例として、下のエラー内容を紹介します。

11月 01 14:31:52 xxx.xxx.xxx.xxx bash[23841]: /etc/named.conf:78: '}'
expected near end of file

このエラー内容は、「named.confの78行目に構文ミスがあります」という意味を指します。

エラー内容は英語で表示されるため、少し面倒ですが、必ずヒントがあるのでめげずに読み解きましょう!

「Google翻訳」などを使い、翻訳するのも一つの手です。

もっと詳しく知りたい方は、以下の記事も合わせて読んでみるといいですよ。