BINDのインストール
Ubuntu 22.04 で確認
$ sudo apt install bind9 bind9-utils
/etc/bind に設定ファイルがある
code:console
$ sudo ls -la /etc/bind
total 56
drwxr-sr-x 2 root bind 4096 Mar 5 14:25 .
drwxr-xr-x 82 root root 4096 Mar 5 14:25 ..
-rw-r--r-- 1 root root 2403 Feb 12 19:29 bind.keys # DNSSECのルートのキー(trust-anchors)
-rw-r--r-- 1 root root 237 Sep 20 22:15 db.0 # 逆引きゾーン0
-rw-r--r-- 1 root root 271 Apr 12 2023 db.127 # 逆引きゾーン127
-rw-r--r-- 1 root root 237 Apr 12 2023 db.255 # 逆引きゾーン255
-rw-r--r-- 1 root root 353 Apr 12 2023 db.empty # 空のゾーン
-rw-r--r-- 1 root root 270 Apr 12 2023 db.local # localhost
-rw-r--r-- 1 root bind 463 Sep 20 22:15 named.conf # 設定ファイル(include で下の3つのファイルを読み込むのみ)
-rw-r--r-- 1 root bind 498 Apr 12 2023 named.conf.default-zones # localhost や特殊な逆引きゾーンの設定(ここは固定でいじらない)
-rw-r--r-- 1 root bind 165 Apr 12 2023 named.conf.local # ゾーンファイルへの繋ぎはここに設定する
-rw-r--r-- 1 root bind 846 Apr 12 2023 named.conf.options # bind の動作設定
-rw-r----- 1 bind bind 100 Mar 5 14:25 rndc.key # リモート制御用の鍵
-rw-r--r-- 1 root root 1317 Apr 12 2023 zones.rfc1918 # IPv4 のプライベートIPアドレスの逆引きに対して空の応答を返す設定ファイル
権威DNSサーバーにする場合
スレーブにする場合
ゾーンファイルの保存場所を作成
$ sudo mkdir /etc/bind/slaves
$ sudo chmod bind:bind /etc/bind/slaves
$ sudo chmod 750 /etc/bind/slaves
AppArmor が設定されているので、それに /etc/bind/slaves/** rwk, を追加
$ sudo vi /etc/apparmor.d/usr.sbin.named
code:usr.sbin.named
...
/etc/bind/slaves/** rwk,
...
code:named.conf.options
acl my-network {
localhost;
192.0.2.0/24;
2001:db8:0:1::/64;
}
options {
...
recursion no;
allow-query { my-network; }; // 外部から受け付けるなら all
allow-recursion { none; }; // 再帰検索はしない
allow-query-cache { none; }; // キャッシュ問い合わせは受け付けない
...
allow-transfer { none; };
...
};
変更したら AppArmor をリロード
$ sudo systemctl reload apparmor
AppArmor の設定ができていないと以下のようなエラーが出る。
code:console
Mar 06 17:47:43 xxx named2169: dumping master file: /etc/bind/slaves/tmp-AdhEQA3urk: open: permission denied
Mar 06 17:47:43 xxx kernel: audit: type=1400 audit(1709747263.477:36): apparmor="DENIED" operation="mknod" profile="named" name="/etc/bind/slaves/tmp-AdhEQA3urk" pid=2169 comm="isc-net-0003" requested_mask="c" denied_mask="c" fsuid=108 ouid=108
参考
DNS Slave で Master から取得したファイルを書き込めずエラーになっていたのを解決したhttps://qiita.com/hm7/items/c165836b857ee656b27c
キャッシュDNSサーバーにする場合は named.root ファイル(ルートヒント)を取得する必要がある。(権威DNSサーバーなら不要)
最新の named.root ファイルを取得する。
$ sudo curl -L -o named.root https://www.internic.net/domain/named.root
code:named.conf.options
options {
...
recursion yes;
allow-query { my-network; }; // 問い合わせは自分のネットワーク内のみ
allow-recursion { my-network; }; // 再帰検索は自分のネットワーク内のみ
allow-query-cache { my-network; }; // キャッシュによる応答は自分のネットワーク内のみ
allow-transfer { none; };
...
};