URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

PowerDNS Recursorのインストール

 そろそろお仕事でPowerDNSを使いそうですが、ここしばらく触っていなかったのでおさらい。
 PowerDNSは4.1からAuthoritative Serverでの再帰設定("allow-recursion"等)がなくなって、Recursorとの役割分担が明確になったようです。

 まずはキャッシュDNSを置き換えるためPowerDNS Recursorのインストールまで。

 OSはCentOS 7.6を使います。最小構成でインストールして、"yum update"でパッケージは最新にしておきます。

 CentOS用のPowerDNSパッケージはEPELレポジトリにもありますが、バージョンが古いため公式のレポジトリから最新の安定版である4.1.xをインストールします。
 公式のレポジトリを使った手順は"https://repo.powerdns.com/"にあるので、基本的にこの通りにパッケージをインストールします。

# yum -y install epel-release yum-plugin-priorities
# curl -o /etc/yum.repos.d/powerdns-rec-41.repo https://repo.powerdns.com/repo-files/centos-rec-41.repo
# yum -y install pdns-recursor

 続いて、設定ファイル"/etc/pdns-recursor/recursor.conf"を変更します。
 デフォルトの設定ファイルはほとんどがコメントになっていて、明示的に設定されいているのは"setuid"と"setgid"だけです。
 そこで、今回は以下の設定を追加します(コメント/空行は省略)。

setuid=pdns-recursor setgid=pdns-recursor allow-from=0.0.0.0/0 api-key=secret chroot=/var/spool/pdns-recursor hint-file=/etc/named.root local-address=0.0.0.0,0::0 query-local-address=0.0.0.0 query-local-address6=0::0 webserver=yes webserver-address=0.0.0.0 webserver-allow-from=0.0.0.0,0::0 webserver-password=password

 とりあえずどこからでもDNSとして利用できるようにしています。
 他に、Hintファイルは最新のものを使うためファイルパスを指定、セキュリティ強化のためchroot、動作情報を確認するためWebサーバを有効化をしています。
 ただし、chrootを有効化した場合はsystemdのサービスタイプを"simple"に変更する必要があります。
 デフォルトのユニットファイルは"/usr/lib/systemd/system/pdns-recursor.service"ですが、変更する場合は"/etc/systemd/system"配下へコピーしたものを修正します。

# cp -p /usr/lib/systemd/system/pdns-recursor.service /etc/systemd/system/
# sed -i "s/^Type\=.*/Type=simple/g" /etc/systemd/system/pdns-recursor.service

 また、hintファイルはchrootされた後のパスになるので、今回の設定での配置場所は"/var/spool/pdns-recursor/etc/named.root"となります。

# mkdir -p /var/spool/pdns-recursor/etc
# curl -o /var/spool/pdns-recursor/etc/named.root http://www.internic.net/domain/named.root
# chown -R pdns-recursor:pdns-recursor /var/spool/pdns-recursor
# chmod 775 /var/spool/pdns-recursor

 ここまでできたらサービスを起動し、ファイアウォールのポートを開放します。

# systemctl start pdns-recursor.service
# systemctl enable pdns-recursor.service
# firewall-cmd --permanent --add-service=dns --zone=public
# firewall-cmd --permanent --add-port=8082/tcp --zone=public
# firewall-cmd --reload

 以上で完了となります。
 他のサーバやPCからDNSとして設定して、名前解決ができることを確認してください。
 また、WEBブラウザから"http://<IPアドレス>:8082"にアクセスすると以下のようにGUIでステータスを確認することができます(認証情報やAPI Keyは設定ファイルを参照)。


 本番環境に導入する場合は"allow-from"、"webserver-allow-from"、ファイアウォールの設定等に注意が必要ですね。

 オフィシャルのドキュメントはこちら