CentOS7ではDNSサーバとして主に2つのパッケージが用意されています。 2つの違いを調べました。

Unboundとは?

Unboundは主にキャッシュDNSサーバを運用する際に用いられるソフトウェアです。 アーキテクチャはVerisignなどが開発し、そのC言語版のメンテナンスはNLnet Labsという会社によって行われています(公式ウェブより)。 OSSですが、有償サポートも行われています。 http://unbound.net/

UnboundとBindの違い

Redhat系のOSを使用してDNSサーバを設置する場合、bindというOSSを利用することが定石でした。 なぜUnboundが新たに登場して活躍しているのでしょうか。違いを見てみましょう。

Bind Unbound
キャッシュサーバ
コンテンツサーバ
権威サーバ ×
リリース 2000(Ver.9) 2008(Ver.1)
ライセンス ISC(≑BSD) BSD

bindとUnboundのライセンスは変わりありません。機能はむしろbindの方が多くこちらを使った方が良いように感じます。 しかしbindは古くから開発された巨大なOSSであり、脆弱性を狙った攻撃が多いように感じます。(名前解決の仕組みそのものが脆弱性の温床であることもありますが。) この点、Unboundはまだbindほどメジャーではない上にアーキテクチャが新しいので攻撃される可能性は低いです。 また、権威DNSサーバを設置する必要のあるユーザはそう多くはないので、多くの人は機能制限版のunboundの方がむしろ安全とも言えます。

では、unboundの使い方を見てみましょう。

<PR> Amazonで”DNS”に関する書籍を検索する

UnboundをDNSキャッシュサーバとして利用する

まずは設定ファイルを編集します。なお、DNSSECの設定はしないものとします。

  # comment  unboundのIPアドレスを設定
  interface: 127.0.0.1
  interface: 192.168.12.43

  # comment IPv6が不要の場合
  do-ip6: no

  # comment 応答するIPアドレスを指定
  access-control: 0.0.0.0/0 refuse
  access-control: 127.0.0.0/8 allow
  access-control: 192.168.1.0/24 allow

DNSの問い合わせをフォワーディングするには、conf.dディレクトリ内に新たにforward.confを作成すれば良いです。

  forward-zone:
# ドメインに応じて問い合わせ先を変更可能
    name: "."
# 上位のDNSサーバを指定
    forward-addr: 133.11.58.3
    forward-addr: 133.11.58.4
    forward-addr: 133.11.100.151
    forward-first: yes

設定し終わったら、サービスを開始します。

# systemctl start unbound.service

基本はこれだけで動作するはずです。他のマシンからnslookupコマンドで動作を確認してみてください。

$ nslookup
# DNSサーバアドレスを指定
> server 192.168.1.XX
> www.google.com
# comment 以下に解決結果が表示されればOK