手軽にDNSキャッシュサーバを立てる方法は?

こんにちは。開発部の松永です。

DNSサーバといえば、エコモットではAWS Route53を使うことが多いです。価格的に手軽なのはもちろんのこと、APIを経由してコードで管理できるのが魅力的です。

なので、全部Route53にお任せー!といきたいのですが、なかなかそうもいかず。ローカルネットワーク内にDNSをたてなきゃいけないケースもまだまだあります。今日はそんなときのために、手間をかけずに立ち上げられるPowerDNSを紹介します。

PowerDNSとは?

オープンソースのDNSサーバです。ライセンスはGPL。DNSコンテンツサーバに相当する「PowerDNS」と、キャッシュサーバに相当する「PowerDNS recursor」があります。

特徴としては、ゾーン情報の持ち方が多様でして、MySQLやPostgreSQLなどのRDBMSや、Bind形式のゾーンファイルにも対応しています。非常に柔軟な管理ができそうです。また、PowerDNSとPowerDNS recursorは独立しているため、どちらか片方のみを立ちげることも可能です。

ゴール

今回は開発環境に使う場合など、最も手軽と思われる方法でDNSキャッシュサーバを立ててみます。ソーン情報は、hostsファイルを使ってみましょう。変更が頻繁であったり、レコード数が多かったりすると大変ですが、エディタで簡単に変更できるので非常に楽です。

インストールおよび設定

「PowerDNS recursor」のみをインストールします。
前提として、EPELリポジトリを有効にしておいてください。

次に設定ファイルを変更します。

BindするIPアドレスは、local-addressで設定します。

ローカル以外からの問い合わせを許可する場合は、allow-fromにIPアドレス範囲をカンマ区切りで記述します。

/etc/hostsファイルをゾーン情報とするには、以下の設定を有効にします。

キャッシュがなかった場合に、問い合わせをフォワードするには以下のように。

設定を確認し、サービスの公開範囲をしっかりと確認した上で、起動します。
※オープンリゾルバ(Open Resolver)に対する注意喚起

これで完了です。

実際にテストしてみましょう。まずはhostsを以下のように変更します。

DNSキャッシュサーバに変更されたhostsを読み込ませるために再起動します。

テスト!

digコマンドでテストしてみましょう。

成功です!