CentOS8 に PowerDNS をインストールする
以前に CentOS7 に PowerDNS をインストールする というメモを書きました。 今回は CentOS8 に PowerDNS をインストールする手順をメモしておきます。 前回のメモ同様、バックエンドには MariaDB を利用します。 インストール手順は全く同じで大丈夫ですが、今回はゾーン転送も可能な設定を行います。
systemd-resolved を停止する
後の手順で PowerDNS を起動した際、systemd-resolved が起動していると Unable to bind UDP socket to '0.0.0.0:53': Address already in use
エラーが出てしまい、PowerDNS を起動することが出来ません。 この問題を避ける場合は予め systemd-resolved を停止しておきます。
| systemctl disable systemd-resolved
systemctl stop systemd-resolved
|
MariaDB をインストールする
MariaDB をインストールし、起動設定を行います。
| dnf -y install epel-release
dnf -y install mariadb mariadb-server
systemctl enable mariadb.service
systemctl start mariadb.service
|
初期設定を行っておきます。
| mysql_secure_installation
|
PowerDNS のインストール
PowerDNS をインストールします。
| dnf -y install pdns pdns-backend-mysql pdns-tools
|
次は PowerDNS 用のデータベースを作成します。予め、データベース作成用の .sql ファイルをダウンロードしておきます。
| curl -O https://raw.githubusercontent.com/sig9org/powerdns-create-db/master/create-database.sql
|
データベースを作成する為、まずは MariaDB へログインします。
データベースを作成します。
| CREATE DATABASE powerdns;
GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
SOURCE create-database.sql
exit
|
PowerDNS 設定ファイルの修正
PowerDNS の設定ファイルは /etc/pdns/pdns.conf
です。 これを以下のように変更しておきます。 DNSSEC は無効化しておきます。 また、ゾーン転送を許可したい対象 (スレーブサーバ) のアドレスを allow-axfr-ips
として定義しておきます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | cat << EOF > /etc/pdns/pdns.conf
setuid=pdns
setgid=pdns
launch=gmysql
gmysql-host=localhost
gmysql-user=powerdns
gmysql-password=password
gmysql-dbname=powerdns
gmysql-dnssec=no
allow-axfr-ips=10.0.0.2
disable-axfr=no
master=yes
log-dns-queries=1
log-dns-details=on
loglevel=6
logging-facility=0
EOF
|
設定が完了したので PowerDNS を起動します。
| systemctl enable pdns.service
systemctl start pdns.service
|
正引きゾーンの作成
PowerDNS に正引きゾーンを作成し、更にそのゾーン内にエントリーを作成します。
| pdnsutil create-zone example.com ns1.example.com
pdnsutil add-record example.com ns1 A 192.2.0.1
pdnsutil add-record example.com www A 192.2.0.2
pdnsutil add-record example.com mail A 192.2.0.3
|
設定は pdnsutil list-zone
で確認出来ます。
| # pdnsutil list-zone example.com
$ORIGIN .
example.com 3600 IN NS ns1.example.com.
example.com 3600 IN SOA ns1.example.com hostmaster.example.com 1 10800 3600 604800 3600
mail.example.com 3600 IN A 192.2.0.3
ns1.example.com 3600 IN A 192.2.0.1
www.example.com 3600 IN A 192.2.0.2
|
TTL はデフォルトで 3,600 秒のようです。 TTL を指定したい場合は以下のようにタイプの後に秒数を指定します (下記では 60 秒に設定しています)。
| pdnsutil create-zone example.com ns1.example.com
pdnsutil add-record example.com ns1 A 60 192.2.0.1
pdnsutil add-record example.com www A 60 192.2.0.2
pdnsutil add-record example.com mail A 60 192.2.0.3
|
逆引きゾーンを作成する
逆引きゾーンは以下のように作成します。
| pdnsutil create-zone 0.2.192.in-addr.arpa ns1.example.com
pdnsutil add-record 0.2.192.in-addr.arpa 1 PTR ns1
pdnsutil add-record 0.2.192.in-addr.arpa 2 PTR www
pdnsutil add-record 0.2.192.in-addr.arpa 3 PTR mail
|
ゾーン転送をテストする
PowerDNS でゾーン設定が完了したら allow-axfr-ips
でアドレスを許可している別コンピュータからゾーン転送を試してみます。 今回は dig
でテストを行いました。 以下のようにゾーンの内容が転送されていれば正常です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | # dig @10.0.0.1 -t axfr example.com
; <<>> DiG 9.11.13-RedHat-9.11.13-6.el8_2.1 <<>> @10.0.0.1 -t axfr example.com
; (1 server found)
;; global options: +cmd
example.com. 3600 IN SOA ns1.example.com. hostmaster.example.com. 1 10800 3600 604800 3600
example.com. 3600 IN NS ns1.example.com.
mail.example.com. 3600 IN A 192.2.0.3
ns1.example.com. 3600 IN A 192.2.0.1
www.example.com. 3600 IN A 192.2.0.2
example.com. 3600 IN SOA ns1.example.com. hostmaster.example.com. 1 10800 3600 604800 3600
;; Query time: 4 msec
;; SERVER: 10.0.0.1#53(10.0.0.1)
;; WHEN: Tue Nov 03 19:28:33 JST 2020
;; XFR size: 6 records (messages 3, bytes 297)
|
もしゾーン転送に失敗するようであれば以下などを確認します。
- ゾーン転送要求を出すコンピュータのアドレスが
allow-axfr-ips
に登録されているか?
- DNSSEC を設定している場合は適切な設定がされているか? (DNSSEC が原因であれば一時的に
gmysql-dnssec=no
を設定し、DNSSEC を無効化することでトラブルシューティング出来る)
- firewalld や外部ファイアウォールで DNS 通信がブロックされていないか?
ゾーンの内容を修正する
レコードを追加する場合は add-record
を使いますが、特定のレコードを削除することは出来ないようです。 その為、検証レベルであれば clear-zone
でゾーンの内容を全消去してしまい、修正したエントリーを追加します。 初めてゾーンを作成した場合は SOA レコードも同時に作成されるのですが、clear-zone
を実行すると SOA レコードまで削除されてしまいます。 その為、手動で SOA レコードも追加しておきます。
| pdnsutil clear-zone example.com
pdnsutil add-record example.com . SOA 'ns1.example.com. hostmaster.example.com. 1 10800 3600 604800 3600'
pdnsutil add-record example.com ns1 A 192.2.0.11
pdnsutil add-record example.com www A 192.2.0.12
pdnsutil add-record example.com mail A 192.2.0.13
pdnsutil list-zone example.com
|
シリアル番号を増やす
SOA レコードのシリアル番号を増やすには pdnsutil increase-serial
を実行します。
| pdnsutil increase-serial example.com
|