日本語 English
インターステラ株式会社の技術ブログです

NSDとUnboundでのDNS権威サーバーとキャッシュサーバー構築

NSDとUnboundでのDNS権威サーバーとキャッシュサーバー構築

こんにちは、阿形です。

メールサーバーを運用している方なら、DNSBLを使ったスパム対策のために大量のDNSクエリが発生することがあります。そんなときにキャッシュサーバーがあると便利ですよね。

BINDは定番の選択肢ですが、セキュリティ面で気になる部分もあります。そこで今回は、違うDNSサーバーソフトを使ってみようということで、以下の構成にしてみました

  • 権威サーバー:NSD(軽量でシンプルな権威DNSサーバー)
  • キャッシュサーバー:Unbound(セキュアで高性能なキャッシュDNSリゾルバ)

NSDって何?

NSDは「Name Server Daemon」の略で、権威DNSサーバー専用のソフトウェアです。NLnet Labsという非営利団体が開発しています。

特徴は以下の通りです。

  • シンプルで権威サーバーの機能だけに集中
  • 軽量で高速
  • セキュリティ重視の設計
  • BINDより設定が簡単

Unboundって何?

Unboundはキャッシュ専用のDNSリゾルバです。こちらもNLnet Labsが開発しています。

特徴は以下の通り。

  • 高速なキャッシュ機能
  • セキュリティ機能が充実(DNSSEC対応)
  • メモリ効率が良い
  • カスタマイズしやすい

それでは、実際の設定手順を見ていきましょう。

環境

OS:Ubuntu24.04

1つのサーバー上で権威サーバーとキャッシュサーバーを動作させます。

キャッシュサーバーはローカルの処理のみを引き受けます。

このため、権威サーバーは53番ポートで待ち受け、キャッシュサーバーは5353番ポートで待ち受けることにします。これだとローカルでの問い合わせがキャッシュサーバーに行ってくれないので、リゾルバ(systemd-resolved)の設定を調整することで対応します。

※本来は別々のサーバーで動かす方が良いです。今回はVPS上でDNS権威サーバーとメールサーバーを動かすため、DNSBLのためのキャッシュを運用したいという条件から変則的な構成になっています。

Unboundの設定

まずはキャッシュサーバーのUnboundから。

以下のコマンドでUnboundをインストールします。

sudo apt install unbound

次に、Unboundの設定ファイルを作成します。/etc/unbound/unbound.conf.d/local.confに以下の内容を記述します。

server:
	verbosity: 1
	interface: 127.0.0.1
	port: 5353
	do-not-query-localhost: no

	hide-identity: yes
	hide-version: yes

	cache-min-ttl: 60
	cache-max-ttl: 86400

設定したら、Unboundを再起動します。

sudo systemctl restart unbound

Ubuntu 24.04では、デフォルトでsystemd-resolvedがリゾルバとして動作しています。これを先ほど設定したUnboundに向けるために、/etc/systemd/resolved.confを編集します。

DNS=127.0.0.1:5353

systemd-resolvedも再起動します。

sudo systemctl restart systemd-resolved

さて、ちゃんと名前解決できるか確認してみましょう。digコマンドでテストした後、Unboundのキャッシュ状況を確認できます。

dig www.yahoo.co.jp
sudo unbound-control stats
sudo unbound-control dump_cache

NSDの設定

次は権威サーバーのNSDを設定していきます。まずはインストールから。

sudo apt install nsd

ゾーンファイルを保存するディレクトリを作成します。

今回は既存のBINDのゾーンファイルがあるため、BINDのゾーンファイルをコピーします。

NSDは基本的にBINDのゾーンファイルをそのまま使用できます。

sudo mkdir /etc/nsd/zones
cp db.example.com /etc/nsd/zones/example.com.zone

NSDの設定ファイル /etc/nsd/nsd.conf.d/example.com.conf を作成します。

server:
    ip-address: xxx.xxx.xxx.xxx
    server-count: 1
    ip4-only: no
    hide-version: yes
    identity: "NSD"
    zonesdir: "/etc/nsd/zones"

remote-control:
    control-enable: yes
    control-interface: 127.0.0.1

zone:
    name: "example.com"
    zonefile: "example.com.zone"

ゾーンファイルの構文に問題がないか確認してみましょう。

sudo nsd-checkzone example.com /etc/nsd/zones/example.com.zone
zone example.com is ok

確認できたら、NSDを再起動します。

sudo systemctl restart nsd

これでDNSサーバーの基本設定は完了です!あとはネームサーバーの切り替え手続きを行えば、実運用できるようになります。

まとめ

今回はBIND以外のDNSサーバーソフトウェアとして、NSDとUnboundを使ったDNSサーバー構築をご紹介しました。NSDはシンプルで権威サーバーに特化した設計なので、設定もわかりやすく、セキュリティ面でも安心です。Unboundもキャッシュリゾルバとして非常に高性能で、DNSBLの運用などに最適です。

もちろん、細かい部分ではまだ調整の余地があるかもしれませんが、基本的な構成はこれで十分動作します。

今回は以上です。

SNSでフォローする
PAGE TOP