View on GitHub

technote

✅ DNS サーバーを BIND を使って構築する手順

前提:


1. 前提条件と準備


2. BINDのインストール

sudo dnf install -y bind bind-utils

3. BINDの設定ファイル編集

BINDの主要な設定ファイルは /etc/named.conf です。ゾーンファイルは /var/named/ ディレクトリに配置します。

3.1. /etc/named.conf の編集

以下の内容に修正または追加します。

sudo cp /etc/named.conf /etc/named.conf.bak # バックアップ
sudo vi /etc/named.conf

options ブロックを以下のように編集。

options {
    listen-on port 53 { any; }; # 全てのIPアドレスからの接続を許可(LAN内のみなので問題なし)
    # listen-on port 53 { 127.0.0.1; 192.168.1.100; }; # 特定のIPアドレスのみ許可する場合はこちら
    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     { localhost; 192.168.1.0/24; }; # クエリを許可するネットワーク(例: 192.168.1.0/24)
    # allow-recursion { localhost; 192.168.1.0/24; }; # 外部への再帰問い合わせを許可するネットワーク(必要に応じて)

    # 上位DNSサーバーへの転送設定(必要であれば、コメントを外して設定)
    # forwarders {
    #     8.8.8.8; # Google Public DNS
    #     8.8.4.4;
    # };
    # forward only; # 転送のみ行う場合

    dnssec-validation auto;

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

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

logging {
    channel default_log {
        file "/var/log/named/named.log" versions 3 size 5m;
        severity info;
        print-time yes;
    };
    category default { default_log; };
    category queries { default_log; };
};

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

# mydomain.local の正引きゾーン
zone "mydomain.local" IN {
    type master;
    file "mydomain.local.zone"; # 後で作成するゾーンファイル名
    allow-update { none; };
};

# mydomain.local の逆引きゾーン (例: 192.168.1.x の場合)
zone "1.168.192.in-addr.arpa" IN {
    type master;
    file "mydomain.local.rev"; # 後で作成する逆引きゾーンファイル名
    allow-update { none; };
};

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

ポイント:

3.2. ゾーンファイルの作成

BINDのゾーンファイルは /var/named/ ディレクトリに置くのが一般的です。SELinuxの制約もあるため、このディレクトリを使用してください。

/var/named/mydomain.local.zone (正引きゾーンファイル)

sudo vi /var/named/mydomain.local.zone
$TTL 86400
@ IN SOA ns.mydomain.local. admin.mydomain.local. (
                                2024072001 ; Serial
                                3H         ; Refresh
                                1H         ; Retry
                                1W         ; Expire
                                1D )       ; Minimum TTL
@               IN      NS      ns.mydomain.local.
ns              IN      A       192.168.1.100
server1         IN      A       192.168.1.101
client1         IN      A       192.168.1.102

説明:


/var/named/mydomain.local.rev (逆引きゾーンファイル)

sudo vi /var/named/mydomain.local.rev
$TTL 86400
@ IN SOA ns.mydomain.local. admin.mydomain.local. (
                                2024072001 ; Serial
                                3H         ; Refresh
                                1H         ; Retry
                                1W         ; Expire
                                1D )       ; Minimum TTL
@               IN      NS      ns.mydomain.local.
100             IN      PTR     ns.mydomain.local.
101             IN      PTR     server1.mydomain.local.
102             IN      PTR     client1.mydomain.local.

説明:

100 IN PTR ns.mydomain.local.: IPアドレスの最後のオクテット (100) が ns.mydomain.local であることを示す。


3.3. ゾーンファイルの所有者とパーミッションの変更

ゾーンファイルが BIND ユーザー (named) によって読み取れるようにします。

sudo chown named:named /var/named/mydomain.local.zone
sudo chown named:named /var/named/mydomain.local.rev
sudo chmod 640 /var/named/mydomain.local.zone
sudo chmod 640 /var/named/mydomain.local.rev

4. SELinuxの設定

BINDがゾーンファイルを読み書きできるように、SELinuxのコンテキストを設定します。

sudo semanage fcontext -a -t named_zone_t "/var/named/mydomain.local.zone"
sudo semanage fcontext -a -t named_zone_t "/var/named/mydomain.local.rev"
sudo restorecon -Rv /var/named/

もし、semanage コマンドが見つからない場合は、policycoreutils-python-utils パッケージをインストール。

sudo dnf install -y policycoreutils-python-utils

5. ファイアウォールの設定

DNSポート(UDP 53, TCP 53)を開放します。

sudo firewall-cmd --permanent --add-service=dns
sudo firewall-cmd --reload

6. BINDの設定テストと起動

設定ファイルの構文チェックを行います。

sudo named-checkconf
sudo named-checkzone mydomain.local /var/named/mydomain.local.zone
sudo named-checkzone 1.168.192.in-addr.arpa /var/named/mydomain.local.rev

エラーがなければ、BINDサービスを有効化して起動します。

sudo systemctl enable named
sudo systemctl start named
sudo systemctl status named

Active: active (running) となっていれば成功。


7. クライアントからのテスト

クライアントPC(Windows, Linuxなど)のDNS設定を、構築したDNSサーバーのIPアドレス(例: 192.168.1.100)に変更します。

Linuxクライアントの場合 /etc/resolv.conf を編集します。
(再起動やDHCPクライアントによっては上書きされるため、永続化の方法は別途検討してください)

sudo vi /etc/resolv.conf
nameserver 192.168.1.100
search mydomain.local # 必要であれば追加

または、NetworkManagerを使用している場合は、GUIまたはnmcliで設定します。

Windowsクライアントの場合 ネットワークアダプターの設定から、IPv4のDNSサーバーを手動で設定します。

テスト クライアントから nslookup または dig コマンドで確認します。

# 正引きテスト
nslookup server1.mydomain.local
dig server1.mydomain.local

# 逆引きテスト
nslookup 192.168.1.101
dig -x 192.168.1.101

上記で、設定したIPアドレスとホスト名が正しく解決されれば成功。


注意事項