システム構築

サーバー構築のデージーネットTOP > システム構築 > DNSサーバ構築 > DNSサーバ構築 BIND v.s. PowerDNS

DNSサーバ構築 BIND v.s. PowerDNS

Open Smart Design

DNSサーバのソフトウェアとしては、BINDが非常に有名です。しかし、最近ではBIND以外のDNSサーバが使われることが多くなりました。特に、最近注目されているのがPowerDNSです。ここでは、BINDとPowerDNSについて徹底的に比較します。

目次

BINDの特徴

BINDとは、ISC(Internet Systems Consortium)が開発・管理を行なっているDNSサーバです。DNSサーバのソフトウェアとしては、非常に古い歴史のあるソフトウェアです。RedHat Enterprise LinuxやCentOS、SuSE Linux Enterprise Server、Ubuntuなど、様々なディストリビューションで採用されています。BINDは、非常に高機能で、権威DNSサーバとしても、DNSキャッシュサーバとしても利用することができます。

PowerDNSの特徴

PowerDNSは、オランダのPowerDNS.COM BVが開発を行なっているオープンソースソフトウェアです。DNSの設定情報やゾーンの情報をMySQLやPostgreSQLなどのデータベースを使って管理するのが特徴です。Poweradminという管理インタフェースを使って、Web画面で管理を行なうことができます。

PowerDNSは、権威DNSサーバの機能を提供するAuthoritative Severと、キャッシュDNSサーバの機能を提供するRecusorの二つのコンポーネントで構成されています。そのため、権威DNSサーバの機能とDNSキャッシュサーバの機能を完全に分離してシステムを構成することが可能です。

DNSサーバとしての機能比較

次は、DNSサーバで使われいている機能毎に、bind、PowerDNSを比較したものです。

機能 BIND PowerDNS Authoritative Server Recursor 説明
Dynamic DNS DHCPサーバなどと連携して、動的にDNSレコードを更新する機能です。
アクセスコントロール DNSサーバを参照可能なホストを制限する機能です。
レコードの動的追加 ×
view × × DNS問い合わせの発信元ホストやネットワークによって、応答を変える機能です。
TSIG マスターサーバとスレーブサーバの間で交換される情報を、共有鍵を使って保護するための機能です。リモート管理のためにも使われます。
DNSSEC DNSの情報に署名を付加し、利用者が正当性を検証できるようにする機能です。キャッシュポイズニング攻撃を回避するために必要な機能です。
IPv6 A6、DNAMEなどのレコードや、IPv6で通信する機能など、IPv6のネットワークで利用するために必要な機能です。
IXFR(増分ゾーン転送) Dynamic DNSを使って、DNSレコードを動的に更新する場合に、マスタサーバとスレーブサーバのゾーン転送で差分だけを転送する機能です。
マスタサーバ 権威DNSサーバのマスターとして構成する機能です。
スレーブサーバ 権威DNSサーバのスレーブとして構成する機能です。
キャッシュサーバ DNSキャッシュサーバとして構成する機能です。
フォワードサーバ 問い合わせを別のDNSキャッシュサーバに転送する機能です。
冗長構成 × マスタサーバ、スレーブサーバという構成を使わずに冗長性を担保することができる機能です。
動的設定変更 ×
スーパーマスター × マスタサーバにゾーンを追加すると、自動的にスレーブサーバにもゾーンが追加される機能です。

PowerDNSは、viewをサポートしていません。一方で、データベースレベルで冗長性を担保することで、マルチマスター構成など、システムをより高度な冗長構成で構築することができます。また、PowerDNS Authoritative Serverは、DNSレコードの追加をデータベースに行なうことで、再起動や再読み込みなどの処理なく、瞬時に設定を反映することができます。さらに、スーパーマスター機能では、ゾーンの追加時のオペレーションを最小に抑えることができます。

DNSサーバへの攻撃への耐性

BINDは、権威DNSサーバとして構成した場合でも、DNSキャッシュサーバとしての機能を完全に停止することができません。そのため、DNSキャッシュポイズニング攻撃によって、権威DNSサーバの機能にも影響を受ける可能性があります。

最近では、DNSキャッシュサーバと権威DNSサーバを完全に分離する構成が主流となってきていますが、BINDでは、完全にこの構成を実現することができません。

性能

次は、PowerDNSとBINDの性能を調査したベンチマーク結果です。

BINDとPowerDNSの性能比較

管理性

BINDでは、すべての設定をテキストファイルで行ないます。一方、PowerDNSは、Poweradminという管理WEBを使って管理を行なうことができます。

BINDのゾーンの管理

特に、管理するゾーンの情報は、named.confファイルという一つのファイルで行ないます。

named.confの例

options {
        listen-on port 53 { 127.0.0.1;
                            192.168.7.2; };
        listen-on-v6 port 53 { ::1;
                               2001:db8::2; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion no;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

zone "example.com" IN {
        type master;
        file "example.com.db";
        allow-update { none; };
        allow-transfer { 192.168.1.3; };
        notify yes;
};
zone "1.168.192.in-addr.arpa" {
        type master;
        file "1.168.192.in-addr.arpa.db";
        allow-update { none; };
        allow-transfer { 192.168.1.3; };
        notify yes;
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa" {
        type master;
        file "0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.db";
        allow-update { none; };
        allow-transfer { 192.168.1.3; };
        notify yes;
};
        

PowerDNSのゾーン管理

PowerDNSは、ゾーンの追加や削除をPoweradminを使って直感的に行なうことができます。

PowerDNSゾーン管理

BINDのリソースレコード管理

BINDでは、DNSゾーン毎にファイルを作成し、リソースを管理します。

ゾーンファイルの例

-----------------------------------
$TTL    172800
@       IN      SOA     ns1.example.com. root.ns1.example.com. (
                        2015011701
                        3600
                        300
                        360000
                        86400
                        )
        IN      NS      ns1.example.com.
        IN      NS      ns2.example.com.
        IN      MX      10 mx1.example.com.
        IN      MX      20 mx2.example.com.
ns1             IN      A       192.168.1.2
                IN      AAAA    2001:db8::2
ns2             IN      A       192.168.1.3
                IN      AAAA    2001:db8::3
mx1             IN      A       192.168.1.4
                IN      AAAA    2001:db8::4
mx2             IN      A       192.168.1.5
                IN      AAAA    2001:db8::5
pc1             IN      A       192.168.1.101
                IN      AAAA    2001:db8::101
-----------------------------------
        

これらのファイルは、記法が独特です。「@」「.」など、自動的補完される文字が存在したり、$TTLなど変数が使えたりするのは、非常に便利です。一方で、新たに設定方法を習得する人にとっては、少なからずハードルがあります。また、設定を変更したらSOAレコードのシリアル番号を更新する必要があります。

設定を変更したら、DNSサーバに設定ファイルを再読み込みさせます。rndcのような、リモートから制御するコマンドも用意されています。

# rndc reload example.com [Enter]
zone reload up-to-date
        
プロセスにHUPシグナルを送信する手法や、systemdの制御などを使う方法がより一般的です。
# systemctl reload named.service[Enter]
        

PowerDNSのリソースレコード管理

PowerDNSでは、リソースレコードの管理もPoweradminを使って行なうことができます。SOAのシリアル番号は、Poweradminが自動的に更新してくれるため、管理者が意識する必要はありません。また、再起動や再読み込みのような処理は必要なく、設定はすぐに反映されます。

Poweradminゾーン編集画面

管理者の権限設定

BINDは、ファイルで管理していることもあり、管理はLinuxのrootユーザで行なう必要があります。一方で、PowerDNSでは、ゾーンのオーナーを設定することができます。次は、Poweradminのユーザ管理画面です。

Poweradmin管理者権限設定

ユーザには、次のような権限を与えることができます。そのため、ゾーン毎に管理者をかえることができます。

  • システム全体を管理できるユーザ
  • 特定のドメインのみを管理できるユーザ
  • マスタ/スレーブなどの構成を管理するユーザ
  • 参照専用のユーザ

脆弱性

BINDは、非常に脆弱性が多く報告されています。そのため、頻繁にバージョンアップを行なう必要があります。一方で、PowerDNSは脆弱性が少なく、安全で管理者の負担の少ないDNSサーバであるということができます。

BIND-PowerDNSの脆弱性比較

結論

PowerDNSは、管理性、性能、安全性などで、BINDよりも優れています。そのため、一般的な用途ではDNSサーバを構築する場合には、PowerDNSを選んだ方が良いでしょう。一方で、BINDにはPowerDNSにない機能としてviewがあります。viewは、クライアントに応じて応答を変える機能です。一つのDNSサーバで公開DNSサーバと社内DNSサーバの二つの役目を担わせる場合等に使います。

しかし、最近は仮想サーバが頻繁に使われるため、わざわざviewを使ってDNSの応答を制御しなくても、別のDNSサーバを構築することで対処が可能です。そのため、どうしてもviewを使わなければならないような状況はあまりありません。もし、そのような特殊な状況の場合には、BINDを使ってDNSサーバを構築するのがよいと思われます。


デージーネットのDNSサーバ構築サービスと事例

unboundによるDNSキャッシュサーバ事例

加入ユーザ向けのDNSキャッシュサーバをunboundを使って構築し、DNSセキュリティの向上を計りました。

PowerDNSによるDNSサーバ事例

BINDに替わる権威DNSサーバとして注目されているPowerDNSを使用して、DNSサーバのセキュリティとスピードの向上を図りました。また、PowerDNSの管理ツールであるPowerAdminと合わせて利用することで、管理性も向上することができました。

DNSキャッシュサーバの水責め攻撃対策事例

2014年の6月から7月にかけて、日本国内のISPで相次いでDNSキャッシュサーバの障害が発生しました。DNS水責め攻撃とよばれる攻撃が行われたためです。攻撃はその後も続き、ISPでは対策に追われました。本事例は、デージーネットがDNSキャッシュサーバにDNS水責め攻撃の対策を行ったものです。

マルチDNS環境の構築事例

BINDに脆弱性が多く発見され、DNSサーバのバージョンアップなどの対策が頻繁に必要になっています。マルチDNS環境は、複数のDNSサーバソフトウェアを使ってDNSサーバを構成することで、特定のソフトウェアの脆弱性によって外部から攻撃を受けてDNSサービスが停止することがないようにするのが目的です。本事例は、このようなマルチDNS環境を構築したものです。

児童ポルノブロッキング対応DNSキャッシュサーバ事例

児童ポルノブロッキングは、ICSAから公開されている児童ポルノ掲載アドレスリストを使って、有害サイトを閲覧できなくする仕組みです。本事例は、DNSキャッシュサーバが問い合わせを受けたときに、児童ポルノ掲載サイトへの問い合わせを別サイトに誘導する仕組みを構築しました。

PowerDNSによるDNSSEC対応の権威DNSサーバ構築事例

権威DNSサーバをBINDで構築し、DNSSEC対応をしているが管理が煩雑だということでご相談を頂きました。PowerDNSPowerAdminを利用することで、DNSSECの運用が簡単に行えるようになりました。

bindによるDNSSEC対応の権威DNSサーバ構築事例

権威DNSサーバをDNSSEC対応にしたいという問い合わせがあり、BINDを使って構築しました。BINDの設定だけではなく、上位のレジストラへの登録などの含めて、総合的に対応させていただきました。

BIND v.s. PowerDNSの先頭へ