
BIND 9.18 のインストール
さくらインターネットのさくらの VPS に FreeBSD 13.1-RELEASE をセットアップして、無料SSL証明書を取得して、Apache 2.4 でウェブサーバを立ち上げた。今回がこのシリーズ最後の記事になる。BIND 9.18 を使って DNS をインストールして設定する。もちろん、DNS を使わない場合は不要。
無料SSL証明書を取得する中で、さくらのネームサーバサービスを使って簡易に設定してしまったが、記述できるレコードに制約があること(NSレコードや SRVレコードなどを追加できない)、さくらの DNS は IPv6 から使えないなど、自前の DNS を用意しないと不便な点があったので DNS も用意することにした。
以下、作業は ssh で行っている。プロンプトが # の場合は rootユーザで作業する。プロンプトが % なら一般ユーザでよい。
BIND 9.18 のインストール
pkg からインストール。

# pkg install bind918
/etc/rc.conf に以下を追加。
named_enable="YES"
基本的な設定

基本的な設定を追加する。pkg からインストールした BIND の設定ファイルは、/usr/local/etc/namedb 以下に置かれている。

listen する IPアドレスを記述していく。IPv4アドレスは listen-onディレクティブに、IPv6アドレスは listen-on-v6ディレクティブにそれぞれ記述する。
ローカルホストの 127.0.0.1 と ::1 に関しては使わないのであれば不要。
IPv6 のリンクローカルアドレスを使う場合、スコープを指定するが、スコープ名が使えないので Scope ID を使う。Scope ID は ifconfigコマンドで確認できる。(ifconfigコマンドの結果は 16進数で書かれているので注意)
リンクローカルアドレスも listen しているのは、同じ LAN内に置いた、セカンダリサーバへゾーン転送を行うため。不要であれば記述の必要はない。
allow-transfer でゾーン転送を許可するセカンダリサーバのネットワークを記述していく。特定の IPv4アドレスなら、/32、特定の IPv6アドレスなら /128 をネットマスクに指定する。
210.188.224.9 と 210.224.172.13 はさくらインターネットが用意しているセカンダリDNS のサービスが使っている IPアドレスで、それぞれ ns1.sakura.ad.jp、ns2.sakura.ad.jp で引ける IPアドレスになる。
fe80::%2/64 で vnet1 のリンクローカルからのリクエストはすべてゾーン転送許可としてある。
pf の設定
named は UDP/IP 53ポートを使用する。また、ゾーン転送は TCP/IP 53ポートを使用する。
サービスを外部に提供するために、pf でこれらのポートへのアクセスを許可するルールを追加する。

pass in log inet proto tcp from { 210.188.224.9 210.224.172.13 } to any port { 5
3 } flags S/SA keep state
pass in log inet proto udp from { 210.188.224.9 210.224.172.13 } to any port { 5
3 } keep state
pass in log inet6 proto tcp from any to any port { 53 } flags S/SA keep state
pass in log inet6 proto udp from any to any port { 53 } keep state
このサーバは IPv4 では外部に公開しておらず、IPv6 のみ公開するため、それぞれ設定を変えてある。
IPv4 はゾーン転送先のさくらのネームサーバ(210.188.224.9/210.224.172.13)からのパケットだけ、許可してある。
IPv4 でサービスを公開したい場合は、any とすれば良い。pfctl -f /etc/pf.conf で設定を適用する。
ゾーンを記述

named.conf でゾーンファイルを指定する。

ゾーンファイルはテキスト形式なので、エディタで記述していけば良い。フォーマットは割愛する。
service named start コマンドで BIND を立ち上げる。
さくらのネームサーバでセカンダリを設定する
いま設定したものを、そのまま公開してしまっても良いが、さくらのネームサーバではセカンダリサーバのサービスを提供しているので、このサーバは外部へ公開せず、外部からはさくらのネームサーバを参照してもらうようにする。
元の設定を primary、設定のコピー先を sedondary と言い、primary から secondary へはゾーン転送という方法で設定内容をコピーする。
ゾーン転送は TCP/IP 53ポートを使って行われる。

さくらのネームサーバサービスのコントロールパネルから、ドメイン名を指定して、ネームサーバで設定したいドメインを登録する。

ゾーンをクリック。

さきほど BIND をセットアップしたサーバの IPアドレスを入力して、追加して設定をクリック。

これでさくらインターネット側の設定は完了。

独自ドメイン名を管理しているレジストラの設定画面へ行って、さくらインターネットのネームサーバサービスで使う DNS のホスト名、ns1.dns.ne.jp と ns2.dns.ne.jp を設定する。
これにより、自身のサーバはさくらインターネットの DNS の裏で稼働させたまま、外部への公開をさくらインターネットの DNS に任せることができる。設定を変更した場合も、数分もすればゾーン転送が実行されて設定内容が反映される。
なお、プライマリサーバの指定には IPv6アドレスのフォーマットも入力できるものの、IPv6 ではゾーン転送が行われないようで、ここで指定するホスト名は IPv4 でアクセスできる必要がある。
自前のセカンダリサーバを使う
ここまでの設定で外部への公開はできているが、ついでなので自前でセカンダリサーバを用意する場合の設定も紹介する。
セカンダリサーバで使うインスタンスにも BIND 9.18 をインストールする。

listen する IPアドレスの設定なども同じ。
なお、BIND 9.18 ではゾーン転送した設定内容が、デフォルトだと RAW形式になってしまい読み取りが困難なので、cat コマンドで設定を確認できるように TEXT形式で保存したいので、masterfile-format text の設定を加える。

セカンダリに設定する FQDN のゾーン設定を行う。
primariesディレクティブで、プライマリサーバの IPアドレスを指定する。もちろん、IPv4アドレスも使える。

BIND 9.18 を起動すると、プライマリサーバからゾーン転送で設定をコピーしてくる。secondaryディレクトリ以下にゾーンファイルが保存されるので内容を確認すると、プライマリサーバで設定したものがまるごとコピーされていることを確認できる。(コメントなどはコピーされない)
セカンダリサーバを外部に公開するためには、プライマリサーバと同様に、pf で UDP/IP 53ポートを外部向けに公開する設定する。
さくらインターネットのさくらの VPS に FreeBSD 13.1-RELEASE をセットアップ、無料SSL証明書を取得、Apache 2.4 でウェブサーバを立ち上げ、今回の DNS のセットアップの計4回でさくらの VPS シリーズは完結する。
さいごに
技術的な小難しい話題でしたが、最後まで読んでいただいてありがとうございました。
よければ ↓ にある、♡ をクリックしていただけると励みになります。質問のコメントも歓迎です。