DNSサーバ BIND
動作確認済みシステム Debian 12
DNSは、ホスト名とIPアドレスを対応付けます。DNSを使って、ホスト名からIPアドレスを取得(正引き)したり、IPアドレスからホスト名を取得したり(逆引き)します。
DNSサーバを、BINDを使って構築します。外部からDNSのお問い合わせができるように設定します。
ここでは、ドメイン名をexample.com、ネームサーバ名をns.exmaple.com、IPアドレスを203.0.113.123とします。また、ネームサーバは1台のみで構築し、セカンダリサーバは、お名前.comのセカンダリDNS(Slave)を利用します。
BINDをインストールします。
apt install bind9 bind9-utils
インストールした後はBINDが起動しているので、止めます。
systemctl stop named.service
内部向けゾーンファイルを作成します。
vi /etc/bind/named.conf.internal-zones
view "internal" {
# 内部向けの対象範囲定義
match-clients {
localhost;
};
# 再帰検索を受け付ける
recursion yes;
# 正引きゾーン定義
zone "example.com" {
type master;
file "/etc/bind/example.com.zone";
allow-update { none; };
};
# 逆引きゾーン定義
zone "123.113.0.in-addr.arpa" {
type master;
file "/etc/bind/123.113.0.in-addr.arpa.zone";
allow-update { none; };
};
include "/etc/bind/named.conf.default-zones";
empty-zones-enable no;
};
外部向けゾーンファイルを作成します。
vi /etc/bind/named.conf.external-zones
view "external" {
# 外部向けの対象範囲定義
match-clients { any; }; # 全てを対象
# 再帰検索を受け付けない
recursion no;
# 正引きゾーン定義
zone "example.com" {
type master;
file "/etc/bind/example.com.zone";
allow-update { none; };
};
# 逆引きゾーン定義
zone "123.113.0.in-addr.arpa" {
type master;
file "/etc/bind/123.113.0.in-addr.arpa.zone";
allow-update { none; };
};
};
オプション設定ファイルを編集します。
vi /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
# 問合わせを受け付ける範囲
# どこからも受け付ける
allow-query { any; };
# ゾーン情報の転送を許可する範囲
# ローカルホストやローカルネットワーク内のホストへのみ許可する
allow-transfer { localhost; localnets; };
# BINDのバージョン情報を公開しない
version "unknown";
dnssec-validation auto;
auth-nxdomain no;
listen-on-v6 { any; };
};
# "error (unexpected RCODE REFUSED) ..." 出力抑止
server 0.0.0.0 {
edns no;
};
# "DNS format error ... invalid response" 出力抑止
logging {
category resolver { null; };
};
正引きゾーン定義ファイルを作成します。
vi /etc/bind/example.com.zone
$TTL 86400
$ORIGIN example.com
@ IN SOA ns.example.com. administrator.example.com. (
2021112103 ; Serial
3600 ; Refresh
900 ; Retry
604800 ; Expire
300 ; Minimum
)
3600 IN NS ns.example.com.
3600 IN A 203.0.113.123
ns 3600 IN A 203.0.113.123
www 3600 IN A 203.0.113.123
@ 3600 IN MX 10 mail.example.com.
逆引きゾーン定義ファイルを作成します。
vi /etc/bind/123.113.0.in-addr.arpa.zone
$TTL 86400
@ IN SOA ns.example.com. administrator.example.com. (
2021112101 ; Serial
3600 ; Refresh
900 ; Retry
604800 ; Expire
300 ; Minimum
)
IN NS ns.example.com.
IN PTR example.com.
- $TTL
- 再帰問い合わせを行った際にキャッシングする時間。
- $ORIGIN
- ドメイン名が明示されていないレコードで補完するドメイン名を記述。
- SOAレコード
- DNSサーバ名と管理者のメールアドレス、DNSサーバの各種設定を記述。 DNSサーバ名は、NSレコードで定義したもの。メールアドレスは、@は使えないため、その代わりにピリオドで記述。
- SOA 内のパラメータ
-
- Serial
- 10桁のシリアルナンバー。
- Refresh
- リフレッシュ値。セカンダリサーバへのゾーン情報の転送間隔。
- Retry
- リフレッシュが失敗したときの再送間隔。
- Expire
- リフレッシュが失敗しているときのセカンダリサーバの有効期間。
- Minimum
- 存在しないドメイン名に対して「存在しない」という情報(=ネガティブキャッシュ)を保持する時間。
- NSレコード
- このゾーンを管理するDNSサーバ。セカンダリサーバを定義するときは、追加でNSレコードを定義。
- Aレコード
- IPv4でホスト名とIPアドレスの関連付けを定義。
- AAAAレコード
- IPv6でホスト名とIPアドレスの関連付けを定義。
- CNAMEレコード
- 正規ホスト名に対する別名を定義。
- MXレコード
- 対象ドメイン宛てのメールの配送先(メールサーバ)のホスト名を定義。
- TXTレコード
- ホスト名に関連付けるテキスト情報(文字列)を定義。
- PTRレコード
- IPアドレスに対応するホスト名を定義。1IPアドレスに対し、1レコード。
設定ファイルを編集し、作成した内部向けゾーンファイル、外部向けゾーンファイルを読み込むようにします。
vi /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
# コメント化
#include "/etc/bind/named.conf.default-zones";
# 追記
include "/etc/bind/named.conf.internal-zones";
include "/etc/bind/named.conf.external-zones";
OSのネームサーバ設定を編集します。
vi /etc/resolv.conf
domain example.com
search example.com
nameserver 127.0.0.1
nameserver xxx.xxx.xxx.xxx # (別のDNSサーバ1)
nameserver xxx.xxx.xxx.xxx # (別のDNSサーバ2)
nameserverの1個目が今回構築したネームサーバを指すようにします。
設定ファイルの文法チェックをします。
named-checkconf
BINDを起動します。
systemctl start named.service
ファイアウォールを設定します。
ufw allow 'DNS'
ufw reload
お名前.comで、セカンダリDNS(Slave)の設定を行い、プライマリネームサーバ IPアドレスを、今回構築したネームサーバのIPアドレスにします。
また、ネームサーバの変更を行い、ネームサーバ1を今回構築したネームサーバのIPアドレス、ネームサーバ2を2nd.dnsv.jp(お名前.comが指定しているもの)に変更します。
しばらく時間を置けば、ネームサーバの変更が反映されます。
レコードの追加などの変更を行った場合、以下のコマンドを実行します。
systemctl reload named.service