BINDの基本設定メモ
DNS自体の仕組みとDNS構築時の設定について、細かく日本語で説明したページが見つからなかったので自分用にメモを作成しました。
バージョン
[root@dns named]# named -v
BIND 9.16.23-RH (Extended Support Version) <id:fde3b1f>
[root@dns etc]# cat oracle-release
Oracle Linux Server release 9.5
[root@dns etc]# dnf info bind
Last metadata expiration check: 1:15:51 ago on Mon 19 May 2025 10:43:32 PM JST.
Installed Packages
Name : bind
Epoch : 32
Version : 9.16.23
Release : 24.0.1.el9_5.3
Architecture : x86_64
Size : 1.4 M
Source : bind-9.16.23-24.0.1.el9_5.3.src.rpm
Repository : @System
From repo : ol9_appstream
[root@dns etc]# dnf info bind-utils
Last metadata expiration check: 1:17:03 ago on Mon 19 May 2025 10:43:32 PM JST.
Installed Packages
Name : bind-utils
Epoch : 32
Version : 9.16.23
Release : 24.0.1.el9_5.3
Architecture : x86_64
Size : 644 k
Source : bind-9.16.23-24.0.1.el9_5.3.src.rpm
Repository : @System
From repo : ol9_appstream
/etc/named.conf 設定例
◆全体
options {
listen-on port 53 { any; };
directory "/var/named";
allow-query { any; };
recursion yes;
forwarders { 8.8.8.8; 8.8.4.4; }; // Google Public DNS
};
//~~~~ 中略 ~~~~~
zone "." IN {
type hint;
file "named.ca";
};
zone "example123.com" IN {
type master;
file "example123.com.zone";
};
zone "179.168.192.in-addr.arpa" IN {
type master;
file "192.168.179.zone";
};
◆options ブロック
options {
listen-on port 53 { any; };
directory "/var/named";
allow-query { any; };
recursion yes;
forwarders { 8.8.8.8; 8.8.4.4; }; // Google Public DNS
};
-
listen-on port 53 { any; };
→ ポート 53 で任意のインターフェースからのクエリを受付ける -
directory "/var/named";
→ ゾーンファイルの保存ディレクトリ -
allow-query { any; };
→ すべてのクライアントからのクエリを許可 -
recursion yes;
→ 再帰的クエリを許可 -
forwarders
→ 外部DNSサーバへの転送先
■補足
【recursionとforwarders】
recursion yes; が設定されていると、BINDは「再帰的な名前解決を代行する」DNSリゾルバになる。
自分が権威を持たないドメイン(例:www.google.com)の問い合わせを受けたとき:
forwarders が設定されていれば、まずフォワーダーDNSに問い合わせる
forwarders のDNSが応答すれば、それをそのままクライアントに返す
forwarders のDNSが応答しなければ、BINDはルートDNSからたどって自力で解決を試みる(ただし forward only; がない場合)
◆zone 設定
zone "." IN {
type hint;
file "named.ca";
};
"." はルートゾーンを意味します。
type hint は、再帰的名前解決の出発点としてルートDNSの情報を使うという指定。
named.ca(または named.root)には、ルートDNSサーバの一覧(A〜Mなど)が記載されている。
「ルートDNS(ルートネームサーバ、root DNS server)」とは、インターネット全体の名前解決の最上位にあるDNSサーバ群のこと。世界でたった13か所だけある。
zone "example123.com" IN {
type master;
file "example123.com.zone";
};
このBINDサーバが example123.com の権威DNSサーバ(マスター)であることを意味する。
type master → ゾーンファイルをローカルで保持・管理する「マスターDNS」。
file "example123.com.zone" → /var/named/example123.com.zone にゾーンファイルがある前提。
★目的:example123.com および、そのゾーンに属するホスト名(FQDN)」の名前解決を提供する。
zone "179.168.192.in-addr.arpa" IN {
type master;
file "192.168.179.zone";
};
このサーバが 192.168.179.0/24 の逆引きゾーンの管理者であることを意味する。
type master → 逆引き情報もローカルで持っている。
file "192.168.179.zone" → /var/named/192.168.179.zone に PTR レコード(後で説明)が記載されている。
★目的:クライアントや他のDNSサーバが 192.168.179.31 のようなIPを逆引きしたときに、
→ ns1.example123.com. のようなFQDNを返す。
■補足
【逆引きゾーン名】
逆引きゾーン名では「IPアドレスのネットワーク部分だけを使い、ホスト部分(最後のオクテット)を取り除く」。最後に in-addr.arpa
を付加する。
179.168.192.in-addr.arpa は、192.168.179.0/24 の逆引きゾーンを意味し、ホスト部(最後のオクテット)は除かれている。
ゾーンファイル設定例
◆ゾーンファイル内の記号の意味
-
@
→ /etc/named.confで指定した「ゾーン名(origin)」を示す。- ゾーン名は正引きなら"example123.com"。逆引きなら"179.168.192.in-addr.arpa."。
-
;
→ これ以降をコメントアウト -
.
→ FQDNの後ろに付ける
◆正引き・逆引き 共通設定
1 $TTL 86400
2 @ IN SOA ns1.example123.com. admin.example.com. (
3 2023101301 ; Serial
4 3600 ; Refresh
5 1800 ; Retry
6 604800 ; Expire
7 86400 ; Minimum
8 )
■各行の意味
$TTL 86400
TTL(Time To Live)=キャッシュの有効期限(秒)
@ IN SOA ns1.example123.com. admin.example.com. (
「Start of Authority(SOA)=権威開始レコード」とは、そのDNSゾーンの基本情報を定義する最初のレコードである。
ns1.example123.com.
は、このゾーンのプライマリネームサーバーを示す。この例の場合、FQDNはこのDNS設定を行っているサーバ自身のIPアドレスを設定している。
admin.example.com.
は、管理者メールを示す。(. → @)と読み替える。
- プライマリDNSサーバ【プライマリネームサーバ】とは、あるドメイン名の情報を管理する権限を持つDNSサーバのうち、主系統 (メイン)のサーバのこと。
2023101301 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum
項目名 | 値 | 意味と用途 |
---|---|---|
Serial(シリアル番号) | 2023101301 |
ゾーンデータのバージョン番号。セカンダリDNSが変更を検知するために使用。 更新のたびにこの値を増やす必要がある。通常は YYYYMMDDnn の形式で管理される。 |
Refresh(リフレッシュ間隔) |
3600 秒(1時間) |
セカンダリDNSがマスターDNSに「更新ある?」と問い合わせる間隔。 |
Retry(再試行間隔) |
1800 秒(30分) |
Refresh に失敗したときに、再試行するまでの時間。 |
Expire(期限切れ) |
604800 秒(7日) |
マスターにずっと接続できなかった場合、セカンダリDNSがゾーン情報を破棄するまでの最大期間。 |
Minimum(ネガティブキャッシュTTL) |
86400 秒(1日) |
存在しないドメインのNXDOMAIN結果をキャッシュする時間(※古い仕様では全体のTTLとされていたが、今は主にネガティブTTLとして扱われる)。 |
@ IN NS ns1.example123.com.
NSレコード(Name Server Record)は、そのゾーンの「権威DNSサーバの名前」を他のDNSに知らせるためのもの。
SOA レコードで指定したプライマリネームサーバ(例:ns1.example123.com.)は、NSレコードとしても必ずゾーン内に定義するのが原則。
一つのゾーンに複数のNSレコードを定義して冗長化するのが一般的(ns1, ns2 など)。
この例の場合、このゾーン(@)の名前解決を担当するDNSサーバは ns1.example123.com.
であることを示す。
この ns1.example123.com. は、通常このゾーンファイル内か別のゾーンファイル内で A レコード(IPv4)や AAAA レコード(IPv6)としてIPアドレスに解決できるようにしておく必要がある。(逆引きも同様)
◆正引きゾーンファイル例
[root@dns ~]# cat -n /var/named/example123.com.zone
1 $TTL 86400
2 @ IN SOA ns1.example123.com. admin.example.com. (
3 2023101301 ; Serial
4 3600 ; Refresh
5 1800 ; Retry
6 604800 ; Expire
7 86400 ; Minimum
8 )
9 @ IN NS ns1.example123.com.
10 @ IN MX 10 mail.example123.com.
11
12 @ IN A 192.168.179.27
13 ns1 IN A 192.168.179.31
14 mail IN A 192.168.179.27
■各行の意味
@ IN MX 10 mail.example123.com.
MXレコード(Mail Exchange Record) は、DNSの中で メール配送の宛先を指定するためのレコード。「このゾーン宛のメールは mail.example123.com. に送ってくれ」というメール配送の経路情報を示す。
@ IN A 192.168.179.27
MXレコードがあっても、@(ゾーン名)にAレコードがなければ、逆引きや接続元ホスト名解決には使えない。
だから、@ IN A xxx.xxx.xxx.xxx は通常必要。Aレコードについては一つ下を参照。
ns1 IN A 192.168.179.31
mail IN A 192.168.179.27
Aレコード(Address Record) は、
ホスト名(FQDN)をIPv4アドレスに対応付けるためのDNSレコード。
◆逆引きゾーンファイル例
[root@dns ~]# cat -n /var/named/192.168.179.zone
1 $TTL 86400
2 @ IN SOA ns1.example123.com. admin.example.com. (
3 2023101301 ; Serial
4 3600 ; Refresh
5 1800 ; Retry
6 604800 ; Expire
7 86400 ; Minimum
8 )
9 @ IN NS ns1.example123.com.
10 31 IN PTR ns1.example123.com.
11 27 IN PTR mail.example123.com.
■各行の意味
31 IN PTR ns1.example123.com.
27 IN PTR mail.example123.com.
PTRレコード(Pointer Record) は、DNSにおける「逆引き(IPアドレス → ホスト名)」を実現するレコード。
クライアントからクエリ
◆正引きの問い合わせ
$ nslookup mail.example123.com
$ dig mail.example123.com
◆逆引きの問い合わせ
$ nslookup 192.168.179.27
$ dig -x 192.168.179.27