使用環境
サーバー:Red Hat Enterprise Linux 9 (RHEL9)
仮想化:VMware Workstation 17 Pro
設定値
アドレス:192.168.0.100/24
ホスト名:dns
ドメイン名:example.com
正引きゾーンファイルの設定
【正引きゾーンとは?】
ドメイン名 → IPアドレス を解決するための領域
ゾーンファイルの書き方
example.com. 3600 IN SOA dns.example.com. dnsadmin.example.com.(
2025053101 ; シリアル番号(変更ごとに+1)
3600 ; リフレッシュ(秒)
1800 ; リトライ(秒)
604800 ; 有効期間(秒)
86400 ) ; キャッシュTTL(秒)
example.com. 3600 IN NS dns.example.com.
example.com. 3600 IN NS dns.slave.example.com.
dns.example.com. 3600 IN A 192.168.0.100
dns.slave.example.com. 3600 IN A 192.168.0.101
localhost.example.com. 3600 IN A 127.0.0.1
詳細な解説
1 SOAレコード(1~6行目)行数 | 項目 | 説明 |
---|---|---|
1 | example.com. | ゾーン名。FQDN |
1 | 3600 | このレコードのキャッシュ有効期限(以下略) |
1 | IN | インターネットクラス(以下略) |
1 | SOA | Start Of Authority:このゾーンの権威開始を示すレコード |
1 | dns.example.com. | プライマリDNSサーバ名 |
1 | dnsadmin.example.com. | 管理者メールアドレス(@を.に変換) |
2 | 2025053101 | シリアル番号。更新のたびに+1(形式例:YYYYMMDDnn) |
3 | 3600 | スレーブがマスターに問い合わせる周期(秒) |
4 | 1800 | マスターに問い合わせ失敗時の再試行期間(秒) |
5 | 604800 | スレーブがマスターと連絡取れないまま保持できる最大期間(秒) |
6 | 86400 | 名前が存在しないときのキャッシュ時間(ネガティブキャッシュTTL) |
2 NSレコード(8~9行目)
行数 | 項目 | 説明 |
---|---|---|
8,9 | example.com. | このゾーンの名前空間に対するネームサーバの指定 |
8,9 | NS | ネームサーバレコード |
8 | dns.example.com. | プライマリDNSサーバ |
9 | dns.slave.example.com. | セカンダリDNSサーバ(スレーブ) |
NSレコードで指定したサーバには必ず以下のAレコード
が必要
さもないと名前解決が不可能です!!
3 Aレコード(11~14行目)
行数 | 項目 | 説明 |
---|---|---|
11 | dns.example.com. | DNSサーバ自身のFQDN |
11~14 | A | アドレスコード(IPv4アドレスを定義) |
11 | 192.168.0.100 | 実際のサーバもアドレス |
ゾーンファイルの書き方(省略ver)
$TTL 3600
@ IN SOA dns.example.com. dnsadmin.example.com. (
2025053101 ; シリアル番号
3600 ; リフレッシュ
1800 ; リトライ
604800 ; 有効期限
86400 ) ; ネガティブキャッシュTTL
IN NS dns.example.com.
IN NS dns.slave.example.com.
dns IN A 61.120.151.82
dns.slave IN A 202.11.16.212
localhost IN A 127.0.0.1
省略のポイント
書き方 | 省略した部分 |
---|---|
TTL 3600 | TTLを1時間に統一。各レコードに毎回書かなくてOKに |
@ | example.com. の省略記号(ゾーン名) |
NSレコードの先頭省略 | @ が暗黙的に適用される(example.com.) |
dns | ゾーン名が補完されて dns.example.com. に自動解釈される |
省略した際に使う@は、後述するnamed.conf
でzone ディレクティブで指定されたものに自動的に変換されます。
逆引きゾーンファイルの設定
【逆引きゾーンとは?】
IPアドレス → ドメイン を解決するための領域
ゾーンファイルの書き方
$TTL 3600
0.168.192.in-addr.arpa. IN SOA dns.example.com. dnsadmin.example.com. (
2025053101 ; シリアル番号(変更ごとに+1)
3600 ; リフレッシュ(秒)
1800 ; リトライ(秒)
604800 ; 有効期間(秒)
86400 ) ; キャッシュTTL(秒)
0.168.192.in-addr.arpa. IN NS dns.example.com.
0.168.192.in-addr.arpa. IN NS dns.slave.example.com.
100.0.168.192.in-addr.arpa. IN PTR dns.example.com.
101.0.168.192.in-addr.arpa. IN PTR dns.slave.example.com.
大体は正引きファイルと一緒です。省略の仕方も同じです。
一点だけ解説します。
項目 | 説明 |
---|---|
PTR | IPアドレスと紐づくホスト名の指定 |
逆引きローカルゾーンファイル
【逆引きローカルゾーンファイルとは?】
ループバックIPアドレスからローカルホスト名を解決する際に参照されるファイルです。
ここで「正引きは?」と思われた方もいると思いますが、正引きは正引きゾーンファイルの最終行に書き込んでありました。
「なぜ逆引きは一緒に書かないの?」そう思われた方もいると思いますが、これはデフォルトのファイルがあるので、それを使用します。
ゾーンファイルの書き方
$TTL 3600
@ IN SOA @ rname.invalid. (
0 ; シリアル
3600 ; リフレッシュ
1800 ; リトライ
604800 ; 有効期限
86400 ) ; ネガティブTTL
NS @
A 127.0.0.1
AAAA ::1
これは大体デフォルトで大丈夫です。
ヒントファイルの設定
【ヒントファイルとは?】
ルートDNSを定義するファイルです
ヒントファイルの書き方
. 3600000 IN NS dns.wxample.com
dns.example.com 3600000 IN A 192.168.0.100
項目 | 説明 |
---|---|
. | ルートゾーン(すべてのDNS起点) |
NS | ルートネームサーバ |
A | 各サーバのIPv4アドレス |
3600000 | TTL |
ゾーンファイルの文法チェック
今まで記述した各種ゾーンファイルの文法が正しいか、コマンドを用いてチェックします。
正引きゾーンファイル
$ named checkzone dns.example.com /var/named/example.com.zone
zone dns.example.com/IN: loaded serial 20250531
OK ←これが出ればとりあえずOK
逆引きゾーンファイル
$ named checkzone 0.168.192.in-addr.arpa. /var/named/example.com.rev.zone
zone 0.168.192.in-addr.arpa./IN: loaded serial 20250531
OK ←これが出ればとりあえずOK
ここでOKが出てもこの先でエラーが出ることはあります。
OKが出たからと言って、完全には信用せずに、エラーが出た際はログなどを読んだりしてください。
ゾーンファイルを何度も見返すのも大事です。
ブートファイルの設定
BINDが起動するとき、最初に読み込む 設定の起点ファイル です。
ここで「どのゾーンを管理するか」「どのACLを使うか」「どの設定ファイルを読み込むか」などを定義します。
~(略)~
11行 listen-on port 53 { any; };
12行 listen-onv6 port 53 { any; };
~(略)~
19行 allow-query { any; };
~(略)~
33行 dnssec-validation no;
~(略)~
追記 include "/etc/named.int.zones";
行数 | 説明 |
---|---|
11-12 | どのインターフェースで受け付けるか制限 |
19 | 受け付ける相手を制限します(例 192.168.0.0/24,localhost) |
33 | dnssecを使用するかを設定します(今回は勉強用なので使用しません) |
追記 | これから書くゾーンの設定情報をかいたファイルを読み込めるようにします |
ゾーンファイルを読み込む他雨の設定ファイルを作ります
ファイル名は、ブートファイルの追記で指定したファイル名になります。
zone "example.com" {
type master;
file "example.com.zone";
allow-transfer { any; }
};
zone "0.168.192.in-addr.arpa." {
type master;
file "example.com.rev.zone";
allow-transfer { any; }
};
項目 | 説明 |
---|---|
type | マスターサーバを宣言します |
file | ファイル名 |
allow-transfer | ゾーンの転送設定 |
【ここでも文法チェック】
named-checkconf /etc/named.conf
※エラーがない場合は出力がなく、プロンプトが返ってくるのみです。
リゾルバの設定
リゾルバとは、DNSサーバに問い合わせをする機能になります。
もし自サーバのゾーンファイルに、問い合わせされたものが書いていなかった際に上位のDNSサーバに問い合わせる際に使用します。
#ドメインの設定
$ nmcli connection modify ens160 ipv4.dns-search example.com
#DNSサーバ設定
$ nmcli connection modify ens160 ipv4.dns "192.168.0.100 192.168.0.200"
検索スイッチファイルの設定
名前解決を行う際の優先順位を決めるための設定です。
(略)
hosts: dns files myhostname
(略)
最後にサービスの起動
$ systemctl start named
確認
確認のためほかのホストからnslook
やdig
を使用して名前解決を行ってみてください。