内部DNSサーバ(BIND)の構築


今回はDNSサーバとしてメジャーなBINDをAmazon Linux2023にインストールしてみます。
BINDはオープンソースソフトウェアで無料で使用することのできるDNSサーバです。
内部DNSとしても外部DNSとしても使用できるため、DNSとして十分な機能を持っています。
実際にはADを導入している企業が多いため、ADに導入されるDNSサーバで名前解決することも多いですが、特定システム用の個別DNSを建てることもあるので、そういった時には便利なソフトウェアです。
BINDはオープンソースソフトウェアで無料で使用することのできるDNSサーバです。
内部DNSとしても外部DNSとしても使用できるため、DNSとして十分な機能を持っています。
実際にはADを導入している企業が多いため、ADに導入されるDNSサーバで名前解決することも多いですが、特定システム用の個別DNSを建てることもあるので、そういった時には便利なソフトウェアです。
作業環境
導入サーバとしてAmazon Linux2023を用意してログインできるようにしておいてください。
また、導入対象のサーバはインターネットアクセスが可能である必要があります。
対象サーバに直接グローバルIPを設定しても良いですし、NATを経由したアクセスでも構いません。
また、導入対象のサーバはインターネットアクセスが可能である必要があります。
対象サーバに直接グローバルIPを設定しても良いですし、NATを経由したアクセスでも構いません。
設計要素
設計項目 | 手順No | 内容 |
---|---|---|
ドメイン名 | 構築手順④ |
BIND導入対象で管理するドメイン名を事前に検討して決定しておきましょう。 今回は内部DNS想定なので、どのようなドメイン名でも大丈夫です。 ここで決めたドメイン名は、名前解決の時に<レコード名>.<ドメイン名>という名前で問い合わせすることになります。 |
レコード | 構築手順④ |
DNSで名前解決させるレコードを洗い出します。 DNSのレコードは基本的にシステムを運用しているうちに追加されていくものです。 最初から今後必要になる全てのレコードを洗い出すのは不可能なので、現時点で必要とわかるものを入れるイメージです。 |
構築手順
①BIND導入対象サーバにログインし、まずは準備として既存パッケージのアップデートをしておきます。

②bindとbind-utilsをインストールします。

③bindの設定ファイルを編集し、DNSサーバの設定を行っていきます。

変更する内容を赤太字で表記します。
④続いて同じファイルを編集して、Zoneの設定を行っていきます。

変更する内容を赤太字で表記します。
⑤前方参照ゾーンのレコードファイルを作成します。

レコードファイルは新規作成になるので、以下のように記載しましょう。
⑥逆引き参照ゾーンのレコードファイルを作成します。

レコードファイルは新規作成になるので、以下のように記載しましょう。
⑦作成した前方参照ゾーンと逆引き参照ゾーンのファイル権限を変更します。

⑧作成した設定ファイルやゾーンファイルに構文エラーがないかをチェックします。

⑨設定ファイルの準備ができたので、BINDサービスを起動します。

以上でDNS(BIND)のインストール作業は完了です!
# dnf update

②bindとbind-utilsをインストールします。
# dnf install -y bind bind-utils

③bindの設定ファイルを編集し、DNSサーバの設定を行っていきます。
# vi /etc/named.conf

変更する内容を赤太字で表記します。
options {
listen-on port 53 { 127.0.0.1; <BIND導入サーバのIP>; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { localhost; };
forwarders {
8.8.8.8;
8.8.4.4;
1.1.1.1;
1.0.0.1;
};
forward only;
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
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;
④続いて同じファイルを編集して、Zoneの設定を行っていきます。

変更する内容を赤太字で表記します。
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "<ドメイン名>" IN {
type master;
file "<ドメイン名>.zone";
allow-update { none; };
};
zone "<逆引きIP>.in-addr.arpa" IN {
type master;
file "<逆引きIP>.rev";
allow-update { none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
⑤前方参照ゾーンのレコードファイルを作成します。
# vi /var/named/example.local.zone

レコードファイルは新規作成になるので、以下のように記載しましょう。
$TTL 86400
@ IN SOA ns1.<ドメイン名>. admin.<ドメイン名>. (
2024010101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
@ IN NS ns1.<ドメイン名>.
ns1.<ドメイン名>. IN A <BIND導入サーバのIP>
<レコード> IN A <IPアドレス>
<レコード> IN A <IPアドレス>
<レコード> IN A <IPアドレス>
⑥逆引き参照ゾーンのレコードファイルを作成します。
# vi /var/named/<逆引きIP>.rev

レコードファイルは新規作成になるので、以下のように記載しましょう。
$TTL 86400
@ IN SOA ns1.<ドメイン名>. admin.<ドメイン名>. (
2024010101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns1.<ドメイン名>
<IPアドレスの末尾> IN PTR <レコード>
<IPアドレスの末尾> IN PTR <レコード>
<IPアドレスの末尾> IN PTR <レコード>
⑦作成した前方参照ゾーンと逆引き参照ゾーンのファイル権限を変更します。
# chown named:named /var/named/<ドメイン名>.zone
# chown named:named /var/named/<逆引きIP>.rev
# chmod 640 /var/named/<ドメイン名>.zone
# chmod 640 /var/named/<逆引きIP>.rev

⑧作成した設定ファイルやゾーンファイルに構文エラーがないかをチェックします。
# named-checkconf
# named-checkzone <ドメイン名> /var/named/<ドメイン名>.zone
# named-checkzone <逆引きIP>.in-addr.arpa /var/named/<逆引きIP>.rev

⑨設定ファイルの準備ができたので、BINDサービスを起動します。
# systemctl status named
# systemctl enable named
# systemctl start named
# systemctl status named

以上でDNS(BIND)のインストール作業は完了です!
動作テスト
続いてインストールしたDNS(BIND)サーバの動作を確認してみましょう。
①まずは、BINDを導入したサーバにログインし、自身で名前解決ができるか確認します。
前方参照ゾーンに設定したレコードとインターネット上に公開されているドメインの両方を試してみましょう。

②BINDを導入したサーバで逆引きも試してみましょう。
逆引き参照ゾーンに設定したIPアドレスを名前解決して、サーバのFQDNが返ってくれば成功です。

③今度は、別のサーバから名前解決を試してみましょう。

④別のサーバから逆引きも試してみます。

localhostでも、別サーバからでも正常に名前解決も逆引きもできていることが確認できればOKです。
これでDNS(BIND)サーバの動作確認も完了です。
①まずは、BINDを導入したサーバにログインし、自身で名前解決ができるか確認します。
前方参照ゾーンに設定したレコードとインターネット上に公開されているドメインの両方を試してみましょう。
# nslookup <レコード> localhost
# nslookup www.google.com localhost

②BINDを導入したサーバで逆引きも試してみましょう。
逆引き参照ゾーンに設定したIPアドレスを名前解決して、サーバのFQDNが返ってくれば成功です。
# nslookup <IPアドレス> localhost

③今度は、別のサーバから名前解決を試してみましょう。
# nslookup <レコード> <BIND導入サーバのIP>
# nslookup www.google.com <BIND導入サーバのIP>

④別のサーバから逆引きも試してみます。
# nslookup <IPアドレス> <BIND導入サーバのIP>

localhostでも、別サーバからでも正常に名前解決も逆引きもできていることが確認できればOKです。
これでDNS(BIND)サーバの動作確認も完了です。
まとめ
BINDをインストールして、内部DNSサーバの構築手順を紹介しました。
一番躓きやすいのは、Zoneファイルの作成かと思います。
独特な構文を使いますので、ここは調べながら書いていくしかありません。
ただ、親切なことに構文チェックのコマンドが用意されているので、自分が書いたZoneファイルがあっているかどうかはすぐに確認できます。
そういった面でもBINDは使いやすいソフトウェアになるので、自身でもDNSサーバを建てて遊んでみてください。
一番躓きやすいのは、Zoneファイルの作成かと思います。
独特な構文を使いますので、ここは調べながら書いていくしかありません。
ただ、親切なことに構文チェックのコマンドが用意されているので、自分が書いたZoneファイルがあっているかどうかはすぐに確認できます。
そういった面でもBINDは使いやすいソフトウェアになるので、自身でもDNSサーバを建てて遊んでみてください。