この記事の概要
DNS自体の仕組みとDNS構築時の設定について、細かく日本語で説明したページが見つからなかったのでメモを作成しました。
BINDとnamed
この二つの関係は、「ソフトウェア名」と「そのソフトウェアの実行プログラム名」の関係である
-
BIND (Berkeley Internet Name Domain):
- これは、DNS (Domain Name System) サービスを提供するソフトウェアの名称です。BINDは、インターネット上で最も広く使用されているDNSサーバーソフトウェアの一つです。
-
named:
- これは、BINDソフトウェアを構成する主要なデーモン(バックグラウンドで動作するプログラム)の名称です。つまり、BINDを実行すると、そのプロセスは通常 named という名前で実行されます。
構築例
バージョン
[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.local" IN {
type master;
file "example123.local.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;
→ 再帰的クエリを許可- 再帰的な名前解決とは、DNSサーバーがクライアントからの問い合わせに対して、自身の持つ情報で答えられない場合に、他のDNSサーバーに問い合わせを繰り返し、最終的な答えをクライアントに返す仕組みのこと
-
forwarders
→ 外部DNSサーバへの転送先
■補足
【recursionとforwarders】
recursion yes; が設定されていると、BINDは「再帰的な名前解決を代行する」DNSリゾルバになる。
自分が権威を持たないドメイン(例:www.google.com)の問い合わせを受けたとき:
forwarders が設定されていれば、まずフォワーダーDNSに問い合わせる
forwarders のDNSが応答すれば、それをそのままクライアントに返す
forwarders のDNSが応答しなければ、BINDはルートDNSからたどって自力で解決を試みる(ただし forward only; がない場合)
- DNSリゾルバ:
- キャッシュに無ければ、わからない名前を自分で権威DNSサーバを順番にたどって最終的な答えを取得する
- ルートDNS:
- インターネット全体の名前解決の最上位にあるDNSサーバ群のこと。世界でたった13か所だけある。
◆ルートヒントzone 設定
zone "." IN {
type hint;
file "named.ca";
};
ルートヒント (Root Hints) の設定部分。
ルートヒントとは、DNSリゾルバ(フルリゾルバ)が「名前解決をどこから始めればよいか」を知るための ルートDNSサーバのIPアドレス一覧 のこと。
"."
はルートゾーンを意味する。
type hint
は「これはヒントファイル(ルートヒント)です」という意味。
file
はルートヒントのファイル名。named.ca
(または named.root
)には、ルートDNSサーバの一覧(A〜Mなど)が記載されている。
◆正引きzone 設定
zone "example123.local" IN {
type master;
file "example123.local.zone";
};
このBINDサーバが example123.local の権威DNSサーバ(マスター)であることを意味する。
type master → ゾーンファイルをローカルで保持・管理する「マスターDNS」。
file "example123.local.zone" → /var/named/example123.local.zone にゾーンファイルがある前提。
★目的:example123.local および、そのゾーンに属するホスト名(FQDN)」の名前解決を提供する。
◆逆引きzone 設定
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.local. のようなFQDNを返す。
■補足
named.conf の逆引きゾーン設定について
オクテット単位以外(例: /12, /20)のサブネットをDNS逆引きゾーンに設定する場合。
ゾーンファイル設定例
◆ゾーンファイル内の記号の意味
-
@
→ /etc/named.confで指定した「ゾーン名(origin)」を示す。- ゾーン名は正引きなら"example123.local"。逆引きなら"179.168.192.in-addr.arpa."。
-
;
→ これ以降をコメントアウト -
.
→ FQDNの後ろに付ける
◆正引き・逆引き 共通設定
1 $TTL 86400
2 @ IN SOA ns1.example123.local. 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.local. admin.example.com. (
「Start of Authority(SOA)=権威開始レコード」とは、そのDNSゾーンの基本情報を定義する最初のレコードである。
ns1.example123.local.
は、このゾーンのプライマリネームサーバーを示す。この例の場合、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.local.
NSレコード(Name Server Record)は、そのゾーンの「権威DNSサーバの名前」を他のDNSに知らせるためのもの。
SOA レコードで指定したプライマリネームサーバ(例:ns1.example123.local.)は、NSレコードとしても必ずゾーン内に定義するのが原則。
一つのゾーンに複数のNSレコードを定義して冗長化するのが一般的(ns1, ns2 など)。
この例の場合、このゾーン(@)の名前解決を担当するDNSサーバは ns1.example123.local.
であることを示す。
この ns1.example123.local. は、通常このゾーンファイル内か別のゾーンファイル内で A レコード(IPv4)や AAAA レコード(IPv6)としてIPアドレスに解決できるようにしておく必要がある。(逆引きも同様)
◆正引きゾーンファイル例
[root@dns ~]# cat -n /var/named/example123.local.zone
1 $TTL 86400
2 @ IN SOA ns1.example123.local. admin.example.com. (
3 2023101301 ; Serial
4 3600 ; Refresh
5 1800 ; Retry
6 604800 ; Expire
7 86400 ; Minimum
8 )
9 @ IN NS ns1.example123.local.
10 @ IN MX 10 mail.example123.local.
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.local.
MXレコード(Mail Exchange Record) は、DNSの中で メール配送の宛先を指定するためのレコード。「このゾーン宛のメールは mail.example123.local. に送ってくれ」というメール配送の経路情報を示す。
@ 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.local. admin.example.com. (
3 2023101301 ; Serial
4 3600 ; Refresh
5 1800 ; Retry
6 604800 ; Expire
7 86400 ; Minimum
8 )
9 @ IN NS ns1.example123.local.
10 31 IN PTR ns1.example123.local.
11 27 IN PTR mail.example123.local.
■各行の意味
31 IN PTR ns1.example123.local.
27 IN PTR mail.example123.local.
PTRレコード(Pointer Record) は、DNSにおける「逆引き(IPアドレス → ホスト名)」を実現するレコード。
クライアントからクエリ
◆正引きの問い合わせ
$ nslookup mail.example123.local
$ dig mail.example123.local
◆逆引きの問い合わせ
$ nslookup 192.168.179.27
$ dig -x 192.168.179.27