【実践編1】堅牢なDNSサーバ構成を設計/考察する
堅牢なDNSサーバを構築することは信頼性/セキュリティの面からも重要です。
特に中規模以上の環境では外部からのアクセスを許可する領域のDMZが存在する場合があります。
外部用のDNSサーバ機能と内部用のDNSサーバ機能を分けることはセキュリティの観点からも重要となります。
今回は要件ごとのDNS構成を深く検討し、実際に使用するミドルウェアまで検討してみます。
DNSサーバ構成を3タイプで検討する
DNSサーバ群の構成は大きく3種類に分けられます。
- 【構成1】DMZ/内部NWにDNSサーバを1つずつ設置する構成
- 【構成2】内部NWのDNSサーバを権威DNS/DNSキャッシュサーバと分ける構成
- 【構成3】内部NWのDNSキャッシュサーバを冗長化する構成
それぞれの特徴と利点/欠点を検討比較します。
【構成1】DMZ/内部NWにDNSサーバを1つずつ設置する構成
これは最もシンプルで、小規模なネットワークでよく見られる構成です。
DMZに外部向け権威DNSサーバ、内部NWに内部向け権威DNSサーバ兼DNSキャッシュサーバを配置する形となります。

特徴としてはサーバー台数が少なく、管理が容易という点があります。
- 利点- 低コスト: 物理サーバーや仮想マシンの台数が少なく、導入・運用コストを抑えられる
- シンプル: 構成が単純で、管理者の負担が少なくなる
 
- 欠点- 単一障害点: 内部DNSサーバーがダウンすると、内部からの名前解決が一切できなくなる
- セキュリティリスク: 権威DNSサーバとキャッシュDNSサーバが同一サーバに存在するため、どちらかのサービスに脆弱性が見つかると両方の機能が同時に危険にさらされる
 
【構成2】内部NWのDNSサーバを権威DNS/DNSキャッシュサーバと分ける構成
この構成は、構成1の単一障害点とセキュリティリスクを改善した構成です。
内部NWに内部用権威DNSサーバとDNSキャッシュサーバを分けて配置します。

特徴としては役割ごとにサーバーを分離し、セキュリティと耐障害性を向上していることがあります。
- 利点- セキュリティ向上: 権威DNSとキャッシュDNSの役割を分離することで、一方の脆弱性がもう一方に与える影響を軽減できる
- 耐障害性: 片方のサーバーがダウンしても、もう一方のサーバーの機能は維持されるためサービスへの影響を限定可能
 
- 欠点- コスト増: サーバー台数が増えるため、導入・運用コストが増加する
- 複雑性: 構成が複雑になり、管理者の負担が少し増加する
 
【構成3】内部NWのDNSキャッシュサーバを冗長化する構成
これは構成2をさらに発展させた最も高い可用性を実現する構成です。
内部NWに内部用権威DNSサーバと、冗長化された2台以上のDNSキャッシュサーバを配置します。

特徴としては高い可用性とパフォーマンス、耐障害性を実現できることです。
- 利点- 高可用性: DNSキャッシュサーバが複数台あるため、1台がダウンしてもサービスが継続される
- パフォーマンス向上: 複数のDNSキャッシュサーバで負荷分散を行うことで、名前解決の応答速度が向上する
- メンテナンス性: サーバーをメンテナンスする際も、サービスを停止することなく作業できる
 
- 欠点- 高コスト: サーバー台数が最も多くなるため、コストが大幅に増加する
- 複雑性: 負荷分散やフェイルオーバーの設定が必要となり、管理が複雑になる
 
DNS実装方法の検討
DNS、DHCP、NTPなどネットワーク/インターネットの根幹をなす仕組みに関するソリューションは汎用サーバだけではなく、物理アプライアンスも存在します。
これはクライアント規模が数千台である場合や極めて高い信頼性と安定性が求められる場合、運用の軽減などが求められる場合に検討されるソリューションです。
DNSの場合、日本国内ではSolitonのNetAttest D3が有名です。
ISP系、金融系、大規模製造業、データセンターなどでの高可用性と安定性が最優先される環境では物理アプライアンスが選択されるケースが多いです。 これらの業界では、サービス停止が直接的な収益損失や社会的信用の失墜に繋がります。 そのため、ピーク時のパフォーマンス、極めて高い安定性、そしてベンダーによる手厚いサポートが保証されている物理アプライアンスが選択されます。
一方で、サービス停止が即座に多大な損失に繋がらない場合等は、低コストで柔軟な拡張性を持つソフトウェア実装の汎用サーバでの実装が選ばれます。
私の提案する堅牢なDNS構成
以下の構成は私の提案する堅牢なDNS構成案です。
権威DNSサーバにはPowerDNS(Authoritative Server)、内部DNSキャッシュサーバにはUnboundDNSを使用する構成となっています。
これは中程度のITインフラを持つ組織/企業で、DNSの運用を軽減したい場合に推奨したいDNSの構成です。

この構成の特徴と構成の理由を説明します。
DNSサーバの構成は「構成案2」を採用しており、内部のDNS機能を権威DNSサーバ機能とDNSキャッシュサーバ機能それぞれをOSレベルで分離するものです。
これによりDNSサーバのセキュリティの向上、機能の明確化が見込めます。
また、権威DNSサーバにPowerDNSを用いる理由は以下の通りです。
- MySQLやPostgreSQLなどのデータベースと連携できるため、ゾーン情報の管理が容易
- サードパーティ製のGUIツール(PDNS Adminなど)が豊富にあり、内部監査や運用管理が行いやすい
NSDやKnot DNSは素晴らしいDNSソリューションです。
特にNSDはゾーンの管理がしやすいという特徴がありますが、一方で、これらはCUIでの管理が中心となるため、IT運用担当者の負荷軽減や監査の観点からこれらの選択は見送りました。
また、両方の権威DNSサーバをPowerDNSとして用いるのも運用上の負荷軽減のためです。異なるソフトウェア実装をするとセキュリティは向上しますが、運用/管理負荷が増大するというトレードオフの関係があります。よって、中程度のITインフラではこの構成が最適だと判断しました。
UnboundDNSをDNSキャッシュサーバとして採用した理由は、再帰的な問い合わせとDNSSEC検証に特化していること、高速かつ安全なキャッシュサーバとして数多くの実績があるためです。
また、BINDはモダンなDNS環境では不要と個人的には考えています。毎年のように脆弱性が多く発見されるため、パッチ適用/ソフトウェア更新などの運用上の負荷が高いと判断しました。既存のITインフラがあり、その関係でどうしてもBINDを使い続けたいといった要望等がない限りは、新規構築でBINDを選択する理由はないと考えています。
総括
堅牢なDNSサーバの構築を考える際は、サーバ群の論理配置構成、DNSサーバソフトの選定などいくつか項目があり、細かい要件や現状のITインフラの状況を顧みて設計/選定する必要があります。
DNSの場合は、セキュリティを意識した構成にすると異なるソフトウェアの利用、サーバ機能の分離などが基本方針となります。
そのため、実際は運用の面や既存インフラとの折り合いをつける構成を組むこととなるでしょう。
次回は実際にVirtualBox環境下でDNS構成を試験構築し、評価検証してみようと思います。