LinuxでDNSキャッシュサーバー(unbound)を構築する方法

LinuxでDNSキャッシュサーバー(unbound)を構築する方法

CentOS 7でWordPressサーバーを稼働させたときに、名前解決が遅いことが原因で一つ一つの操作が遅いという問題があり、自分自身用のDNSキャッシュサーバーを立てることで、問題を解決することができました。

そこでここでは、RedHat互換のLinux(CentOS 7)で自分自身用のDNSキャッシュサーバーをunboundで構築する方法を紹介します。

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS(Minimal)7.9.2009
unbound1.6.6

unboundのインストール

unboundは、yumコマンドでサクッとインストールできます。

# yum -y install unbound

unboundの設定

unboundの最低限の設定項目は、以下となります。

  • 待ち受けインターフェース(interface)
  • アクセス可能なネットワーク(access-control)
  • フォワード先

ここでは、serverセクションで、すべてのIPv4インターフェスで待ち受け、自分自身からのアクセスのみを受け付けるよう設定しています。

foward-zoneセクションでは、フォワード先として、すべての名前解決をGooglePublicDNSへフォワードしています。

# vi /etc/unbound/unbound.conf

server:
interface: 0.0.0.0
access-control: 0.0.0.0/0 refuse
access-control: 127.0.0.0/8 allow
hide-version: yes

forward-zone:
name: "."
forward-addr: 8.8.8.8
forward-addr: 8.8.4.4
Memo

ここでは、動作するために必要な最小限の設定のみを行っていますが、キャッシュの有効期限など設定可能な項目はたくさんありますので、環境に合わせて調整するのが良いでしょう。

設定の確認

設定が完了したら、設定に問題がないかunbound-checkconfコマンドで確認し、下のように「no error」ならOKです。

# unbound-checkconf
unbound-checkconf: no errors in /etc/unbound/unbound.conf

ネットワーク設定の変更

自分自身のDNSサーバーアドレスを12.7.0.0.1へ変更します。

# nmcli connection modify ens160 ipv4.dns "127.0.0.1"
# systemctl restart network.service

起動

サービスの起動と、OS起動時に自動起動するよう設定します。

# systemctl start unbound
# systemctl enable unbound
# systemctl status unbound

unboundの動作確認

最後に、名前解決できることを確認します。

ここでは「www.yahoo.co.jp」を正引き(ホスト名からIPアドレスを解決)できることと、DNSサーバーのアドレスが自分自身になっていることを確認しています。

# dig www.yahoo.co.jp

・・・
;; ANSWER SECTION:
www.yahoo.co.jp. 47 IN CNAME edge.g.yimg.jp.
edge.g.yimg.jp. 14 IN A 183.79.249.252

;; Query time: 32 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
・・・
Memo

digコマンドがインストールされていない場合は、bind-utilをインストールしましょう。

あとがき

LinuxマシンはWindowsマシンと違い、DNSサーバに問い合わせた結果をシステムの内部にキャッシュする機能がないので、unboundなどのキャッシュサーバーを導入することで名前解決周りのパフォーマンスをアップできます。