[DNS] BIND でローカル DNS サーバー構築
ちゃちゃっと DNS サーバーを構築をします。
AWS Route53 はゾーン設定が Web コンソールでできたので使いやすかったんだなぁと今更実感しました。
⌨️ 環境
- Ubuntu 20.04
はじめに
DNS サーバーには BIND 以外にも PowerDNS や NSD などあるようですが、
にて
As of 2015, it is the most widely used domain name server software, and is the de facto standard on Unix-like operating systems.
と、BIND こそが Unix ライク OS の DNS サーバーでデファクトスタンダート(自称)だと仰るので、初めてですし BIND を使います。
余談ですがバージョンとしては BIND10 もあったらしいですが、プロジェクト消滅して BIND9 のリファクタリングを行う方針になったようです。(そもそも ISC の ホームページ の Products に BIND9 しかない。)
BIND9 には脆弱性があるという声が多いのが気になりますが、ローカル DNS ということで今回は見なかったことにします。
参考:https://ubuntu.com/search?q=Bind+vulnerability
(解消してるものも多いと思いますが、結構あります。)
1. BIND9 インストール
apt-get で BIND9 をインストールします。
$ sudo apt-get install -y bind9
2. /etc/bind/named.conf.options 設定
/etc/bind/named.conf.options
を編集します。
options {
directory "/var/cache/bind";
dnssec-validation auto;
//listen-on-v6 { any; };
listen-on port 53 { localhost; };
allow-query { any; };
forwarders { 8.8.8.8; };
recursion no;
}
補足
3. ゾーンの設定
/etc/bind/named.conf
を見てみると
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones";
とあるので、
/etc/bind/named.conf.local
に zone を追記/etc/bind/named.conf.default-zones
に zone を追記- 自分で追加したファイルに zone を記述して include させる
などの方法でゾーンの設定を追加できそうです。
.conf が全部そうなのかわかってませんが、やり口は Nginx の conf と同じですね。
今回は named.conf.local に追記します。
zone "mydomain.com" { type master; file "/etc/bind/db.mydomain.com"; };
ローカル DNS なので、ここでつける名前(手順の例では mydomain.com
)は取得してないドメインでも名前つけ放題です。
file "/etc/bind/db.mydomain.com"
のファイルは次の手順で作成します。
4. ゾーンファイルの作成
/etc/bind/db.local
をもとに編集します。
$ sudo cp /etc/bind/db.local /etc/bind/db.mydomain.com
; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA mydomain.com. root.mydomain.com. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS www www IN A 192.168.0.x
この場合は www.mydomain.com
が 192.168.0.x
に名前解決されます。
test.mydomain.com
も追加したい場合は NS レコードと A レコードを追加します。
@ IN NS www www IN A 192.168.0.x @ IN NS test test IN A 192.168.0.x
余談ですが、
- NS レコード左辺の @ は何なのか
- SOA レコードってそもそも何なのか
あたりがさっぱりなので、今後書くであろうゾーンファイルを掘り下げる記事でお会いしましょう。
5. BIND9 再起動
$ sudo systemctl restart bind9
6. 確認
dig コマンドで確認。
$ dig www.mydomain.com ・・・ ;; ANSWER SECTION: www.mydomain.com. 604800 IN A 192.168.0.x ・・・
名前つけ放題と先ほど言いましたが、この世に存在するドメインを名付けてパブリック DNS サーバーが先に参照されて名前解決された場合は当然ローカル DNS サーバーでの名前解決はされません。
そのため、/etc/resolv.conf
でパブリック DNS サーバーの前にローカル DNS サーバーを記述してください。
resolv.conf の nameserver の順序については
を参考にしてください。
名前解決先に Web アプリがあればそれぞれ curl で確認して同じ内容が得られます。
$ curl http://192.168.0.x (何かしらの HTML) $ curl http://www.mydomain.com (何かしらの HTML)
おわりに
ゾーンファイルはテンプレートの /etc/bind/db.local
をもとにしただけで使いこなせていません。
なので、今後はゾーンファイルを掘り下げていきたいですね。