手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 BIND 内部用 DNS サーバー構築

目次に戻る

Overview

BIND を使用した内部向けの DNS サーバーを構築します。この DNS は IPv6 に対応しており、フォワーダーと権威サーバーを兼ねています。IPv6 を含めた BIND 設定はかなり煩雑なので、IPv6 が不要の方、抵抗のある方は IPv6 設定を除いて設定して頂いても問題ありません。

前提条件

  • こちらを参考に基本設定が完了していること。

インストール

BIND をインストールします。

myadmin@ubuntu:~$ sudo apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install bind9

BIND の設定ファイル

BIND の設定ファイルはゾーンファイルを含め /etc/bind にまとまっています。下記は主要な設定ファイルです。

ファイル名説明
named.confnamed.conf.options, named.conf.local, named.conf.default-zones を include しているだけの設定です。本稿では変更しません。
named.conf.default-zoneslocalhost 等の各デフォルトゾーンを定義しています。本稿では変更しません。
named.conf.localデフォルトでは全てコメントアウトされています。本稿ではこのファイルに個別のゾーン設定を定義します。
named.conf.optionsnamed.conf の options 部分が個別のファイルになっています。forwarders 等のグローバルな設定はこのファイルを使用します。
BIND の設定ファイル

/etc/bind/named.conf.options

DNS フォワーダー(リゾルバ)としての設定を行います。権威サーバーとして使用しない場合はここまでの設定で問題ありません。

デフォルト値

デフォルト値は下記の通りです。

myadmin@ubuntu:~$ grep -v -e '^\s*/' -e '^\s*$' /etc/bind/named.conf.options | expand | tr -s [:space:] | sed 's/^\s/    /g'
options {
    directory "/var/cache/bind";
    dnssec-validation auto;
    listen-on-v6 { any; };
};

設定値

設定例は下記の通りです。forwarders: 不明なゾーンを指定した DNS に問い合わせ、allow-query: この DNS を参照可能な範囲、recursion: 再帰問い合わせを許可を追加しています。

myadmin@ubuntu:~$ sudo cp /etc/bind/named.conf.options /etc/bind/named.conf.options.orig
myadmin@ubuntu:~$ sudo tee /etc/bind/named.conf.options <<"EOF"
options {
    directory "/var/cache/bind";
    forwarders { 8.8.8.8; 8.8.4.4; 2001:4860:4860::8888; 2001:4860:4860::8844; };
    dnssec-validation auto;
    listen-on-v6 { any; };
    allow-query { any; };
    recursion yes;
};
EOF

/etc/bind/named.conf.local

デフォルト値

デフォルト値は全てコメントアウトされています。

設定値

本稿の例では si1230.com, 16.172.in-addr.arpa, 0.1.c.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa の権威サーバーとして設定します。それらのゾーン設定に加え zones.rfc1918 を include しています。この設定ファイルは不明な RFC1918 の IP アドレスの逆引きを上位の DNS へ問い合わせないための設定 ( empty zone ) です。フォワーダー機能と共存させる場合はこの設定を追加することを推奨します。

myadmin@ubuntu:~$ sudo cp /etc/bind/named.conf.local /etc/bind/named.conf.options.local.orig
myadmin@ubuntu:~$ sudo tee /etc/bind/named.conf.local <<"EOF"
include "/etc/bind/zones.rfc1918";
zone "si1230.com" {
    type master;
    file "/etc/bind/si1230.com.zone";
};
zone "16.172.in-addr.arpa" {
    type master;
    file "/etc/bind/16.172.in-addr.arpa";
};
zone "0.1.c.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa" {
    type master;
    file "/etc/bind/0.1.c.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa";
};
EOF

BIND で IPv6 を扱うための最大の難関が逆引きゾーンの設定です。まず、逆引きゾーンの構造について簡単に説明すると以下のようになります。

  1. ネットワークアドレスの省略表記されている個所を 0 で満たす。
  2. ‘:’ を削除する。この時点で、/112 の場合は 28 桁 ( 112 / 4 = 28 ) の文字列になるはずです。
  3. 4bit ( 16 進数 1 文字 ) ごとに ‘.’ を挿入する。
  4. 順序を反転させる。
  5. ‘.ip6.arpa’ を末尾に追加する。

上記のように、とても人間の目で判別できる情報ではないので、Excel の VBA やその他のプログラミング言語を使用して自動生成するようにしないと正確な設定は不可能だと思います。

ゾーンファイル名はゾーン名と一致する必要はないので、分かりやすくしたい場合はセンスよく短くしましょう。

PDNS では phpIPAM と連携することで、この煩わしさがかなり軽減されると思いますが、内部的には BIND のこの設定と同じです。エンジニアとして構造の理解するためにも BINDでの設定も把握できている方が良いでしょう。

/etc/bind/zones.rfc1918

/etc/bind/zones.rfc1918 の説明は前述の通りです。

デフォルト値

デフォルト値は下記の通りです。

myadmin@ubuntu:~$ grep -v -e '^\s*/' -e '^\s*$' /etc/bind/zones.rfc1918 | expand | tr -s [:space:] | sed 's/^\s/    /g'
zone "10.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "16.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "17.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "18.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "19.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "20.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "21.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "22.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "23.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "24.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "25.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "26.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "27.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "28.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "29.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "30.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "31.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

設定値

今回は 16.172.in-addr.arpa を逆引きゾーンとして使用しますが、zones.rfc1918 の設定に 16.172.in-addr.arpa は含まれていることにより BIND は起動できません。このため 16.172.in-addr.arpa をコメントアウトしています。

myadmin@ubuntu:~$ sudo cp /etc/bind/zones.rfc1918 /etc/bind/zones.rfc1918.orig
myadmin@ubuntu:~$ sudo tee /etc/bind/zones.rfc1918 <<"EOF"
zone "10.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
// zone "16.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "17.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "18.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "19.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "20.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "21.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "22.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "23.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "24.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "25.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "26.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "27.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "28.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "29.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "30.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "31.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
EOF

/etc/bind/si1230.com.zone

正引きのゾーンファイルの設定例です。

myadmin@ubuntu:~$ sudo tee /etc/bind/si1230.com.zone <<"EOF"
$TTL 172800
@ IN SOA dns.si1230.com. myadmin.si1230.com. (
    2022041101
    3600
    300
    360000
    86400
)
    IN NS dns.si1230.com.
    IN MX 10 smtp.si1230.com.

ubuntu IN A 172.16.0.89
dns IN A 172.16.0.89
smtp IN A 172.16.0.89
www IN A 172.16.0.89

ubuntu IN AAAA fd00::ac10:59
dns IN AAAA fd00::ac10:59
smtp IN AAAA fd00::ac10:59
www IN AAAA fd00::ac10:59
EOF

/etc/bind/16.172.in-addr.arpa

逆引きのゾーンファイルの設定例です。逆引きは IP アドレスに対して 1 つとなります。今回は、172.16.0.0/16 の逆引きゾーン設定となるため、172.16.0.89 の 3 octet, 4 octet を反転させた設定になります。

myadmin@ubuntu:~$ sudo tee /etc/bind/16.172.in-addr.arpa <<"EOF"
$TTL 172800
@ IN SOA dns.si1230.com. myadmin.si1230.com. (
    2022041101
    3600
    300
    360000
    86400
)
    IN NS dns.si1230.com.

89.0 IN PTR ubuntu.si1230.com.
EOF

/etc/bind/0.1.c.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa

IPv6 逆引きのゾーンファイルの設定例です。今回は、fd00::ac10:0/112 のゾーンに対する設定となるため、fd00:0000:0000:0000:0000:0000:ac10:0059 の末尾4桁を反転させた設定になります。

myadmin@ubuntu:~$ sudo tee /etc/bind/0.1.c.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa <<"EOF"
$TTL 172800
@ IN SOA dns.si1230.com. myadmin.si1230.com. (
    2022041101
    3600
    300
    360000
    86400
)
    IN NS dns.si1230.com.

9.5.0.0 IN PTR ubuntu.si1230.com.
EOF

設定の有効化

設定を有効化します。

myadmin@ubuntu:~$ sudo systemctl restart bind9.service && systemctl status bind9.service

正常性確認

dig コマンドで確認します。今回は検証環境でテストしているため、参照先 DNS を @127.0.0.1 で指定していますが、これは不要な場合は削除できます。

IPv4 正引き確認

正引き確認は dig の引数に FQDN を指定します。

myadmin@ubuntu:~$ dig ubuntu.si1230.com @127.0.0.1

; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> ubuntu.si1230.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63060
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 126c0db696f42fd80100000065c9d4aee2a0bbbd759d0607 (good)
;; QUESTION SECTION:
;ubuntu.si1230.com.		IN	A

;; ANSWER SECTION:
ubuntu.si1230.com.	172800	IN	A	172.16.0.89

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Mon Feb 12 17:19:58 JST 2024
;; MSG SIZE  rcvd: 90

IPv6 正引き確認

IPv6 正引き確認は、更に aaaa を付与します。

myadmin@ubuntu:~$ dig ubuntu.si1230.com aaaa @127.0.0.1

; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> ubuntu.si1230.com aaaa @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6749
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 78f8f5de2c3819520100000065c9d5b7fcba2989239e3870 (good)
;; QUESTION SECTION:
;ubuntu.si1230.com.		IN	AAAA

;; ANSWER SECTION:
ubuntu.si1230.com.	172800	IN	AAAA	fd00::ac10:59

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Mon Feb 12 17:24:23 JST 2024
;; MSG SIZE  rcvd: 102

IPv4 逆引き確認

逆引き確認は dig -x の引数に IPv4 アドレスを指定します。-x は必ず dig の後に存在することに注意して下さい。

myadmin@ubuntu:~$ dig -x 172.16.0.89 @127.0.0.1

; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> -x 172.16.0.89 @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62131
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 3daa1402af5219df0100000065c9d63db281e7bc8b642c74 (good)
;; QUESTION SECTION:
;89.0.16.172.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
89.0.16.172.in-addr.arpa. 172800 IN	PTR	ubuntu.si1230.com.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Mon Feb 12 17:26:37 JST 2024
;; MSG SIZE  rcvd: 112

IPv6 逆引き確認

IPv6 逆引き確認は以下の通りです。

myadmin@ubuntu:~$ dig -x fd00::ac10:59 @127.0.0.1

; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> -x fd00::ac10:59 @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31159
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 927f8b52f4f461150100000065c9d6c1c5ab98d0573374f4 (good)
;; QUESTION SECTION:
;9.5.0.0.0.1.c.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa. IN PTR

;; ANSWER SECTION:
9.5.0.0.0.1.c.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa. 172800 IN PTR	ubuntu.si1230.com.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Mon Feb 12 17:28:49 JST 2024
;; MSG SIZE  rcvd: 160

目次に戻る

Ubuntu 22.04 BIND 内部用 DNS サーバー構築

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る