PowerDNSの設定

仮想サーバーの名前管理が面倒になってきたため、データベースでレコードを管理できるツールとして、PowerDNSを導入する。

  • 問題
    • sambaでのAD構成はBINDのみを想定している。BINDをSLAVEで利用して対応可能?
    • BINDの機能にあるViewについては、実装していない。dnsdistで対応可能?

ここでは、データ管理にMySQL(MariaDB)の利用を前提とする。MySQLサーバーは既にセットアップ済とする。

MySQLにDB、ユーザーを作成する。「MySQLのDB・ユーザー作成」を参照のこと。

PowerDNSのインストール

必要なパッケージをインストールする。

apt update;apt install pdns-server pdns-backend-mysql

設定ファイルを変更する。

vi /etc/powerdns/pdns.conf

setuid=pdns
setgid=pdns
launch=gmysql
gmysql-host=localhost
gmysql-user=[PowerDNS用DBユーザー]
gmysql-dbname=[PowerDNS用DB]
gmysql-password=[PowerDNS用DBユーザーパスワード]

スキーマを作成する。

mysql [PowerDNS用DB] < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql

レコード登録用SQLファイルを作成する。

vi insert.sql

INSERT INTO domains (name, type) values ('example.com', 'NATIVE');
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'example.com','localhost 管理者メールアドレス 1','SOA',86400,NULL);
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'example.com','ネームサーバー名','NS',86400,NULL);
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'www.example.com','192.0.0.10','A',120,NULL);
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'mail.example.com','192.0.0.11','A',120,NULL);
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'example.com','mail.example.com','MX',120,25);

登録する。

mysql [PowerDNS用DB] < insert.sql

PowerDNSを再起動する。

service pdns restart

既にBINDの運用実績がある場合には、設定ファイルからレコード登録用のSQLファイルを作成できる。

zone2sql --named-conf=/etc/bind/named.conf --gmysql > /tmp/zone.sql

注意点

  • PowerSQLはviewに対応していないため、必要なviewの1つを選択し、viewの記載は削除する。
  • named.conf内の各パスは変換環境に合わせて変更する。

PowerDNSをHA構成に

更にもう一台のマシンを用意し、マスタースレーブ構成にする。

apt update;apt install pdns-server pdns-backend-mysql

上と同様(データベースへの接続まで)にPowerDNSをセットアップする。

マスター側

以下を追記

vi /etc/powerdns/pdns.conf

allow-axfr-ips=スレーブ側のIPアドレス/32
master=yes

スレーブ側

vi /etc/powerdns/pdns.conf

slave=yes

マスター・スレーブの双方のホストファイルに以下の記載を追加する。

vi /etc/hosts

マスター側IPアドレス    マスターFQDN        マスター名
スレーブ側IPアドレス    スレーブFQDN        スレーブ名

双方のPowerDNSを再起動する。

service pdns restart

コマンドオペレーションでのレコードの登録

PowerDNSを選択したのは、WebUI(BINDにもWebUIはあるようだが)とDBでの感知ができるからであるが、psutilで様々なデータ操作が可能である。

ZONEの追加

pdnsutil create-zone example.com supermaster.example.com

Aレコードを追加

pdnsutil add-record example.com supermaster A 10.0.0.1
pdnsutil add-record example.com ns1 A 10.0.0.2
pdnsutil add-record example.com ns2 A 10.0.0.3

NSレコードの登録

pdnsutil add-record example.com @ NS ns1.example.com
pdnsutil add-record example.com @ NS ns2.example.com

ゾーンをネイティブ ゾーンからマスター ゾーンに変更

pdnsutil set-kind example.com master

ゾーンがマスターであることを確認

pdnsutil show-zone example.com