CentOS 7でWordPressサーバーを稼働させたときに、名前解決が遅いことが原因で一つ一つの操作が遅いという問題があり、自分自身用のDNSキャッシュサーバーを立てることで、問題を解決することができました。
そこでここでは、RedHat互換のLinux(CentOS 7)で自分自身用のDNSキャッシュサーバーをunboundで構築する方法を紹介します。
目次
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
ここでは、動作するために必要な最小限の設定のみを行っていますが、キャッシュの有効期限など設定可能な項目はたくさんありますので、環境に合わせて調整するのが良いでしょう。
設定の確認
設定が完了したら、設定に問題がないか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)
・・・
digコマンドがインストールされていない場合は、bind-utilをインストールしましょう。
あとがき
LinuxマシンはWindowsマシンと違い、DNSサーバに問い合わせた結果をシステムの内部にキャッシュする機能がないので、unboundなどのキャッシュサーバーを導入することで名前解決周りのパフォーマンスをアップできます。