手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 PowerDNS 権威 DNS – DB バックエンドでゾーンを管理する

Ubuntu 22.04 で権威 DNS を運用する場合、ゾーンファイルを直接編集する BIND だけでなく、DB バックエンドでゾーンを管理する PowerDNS も選択肢になります。API や管理画面と組み合わせたい場合、PowerDNS は扱いやすい構成にできます。

この記事では、PowerDNS Authoritative Server を SQLite バックエンドで動かし、正引きゾーン、IPv6 レコード、逆引きゾーン、外部公開時の確認点を扱います。Ubuntu 22.04 の既存環境を保守するための確認記事です。

関連する記事
この記事で確認すること
  • PowerDNS 権威 DNS の位置づけ
  • SQLite バックエンドの設定
  • 正引きゾーンと IPv6 レコードの作成
  • 逆引きゾーンの作成
  • 外部公開時の確認点
参考
書籍
参考書籍

Advanced Ubuntu Administration and Management Best Practices

Ubuntu Server の運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

PowerDNS の位置づけ

PowerDNS Authoritative Server は、権威 DNS サーバーとしてゾーンを応答するためのソフトウェアです。BIND のような zone file ベースの運用とは異なり、SQLite、MariaDB、PostgreSQL などの DB バックエンドを使えます。

  • 権威 DNS としてゾーンを応答する
  • 再帰 resolver として使うものではない
  • DB バックエンドでレコードを管理できる
  • pdnsutil でゾーンやレコードを操作できる
  • 外部公開時は glue、NS、SOA、firewall を合わせて確認する

小規模な検証や単一サーバーでは SQLite バックエンドが扱いやすく、複数台構成や管理画面連携では MariaDB / PostgreSQL バックエンドを検討します。

PowerDNS をインストールする

ここでは SQLite バックエンドを使うため、pdns-serverpdns-backend-sqlite3、確認用の dnsutils を導入します。

sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y pdns-server pdns-backend-sqlite3 dnsutils
pdns_server --version

SQLite バックエンドを設定する

PowerDNS の backend 設定を作成します。SQLite database は /var/lib/powerdns/pdns.sqlite3 に置きます。

sudo tee /etc/powerdns/pdns.d/pdns.local.gsqlite3.conf >/dev/null <<'EOF'
launch=gsqlite3
gsqlite3-database=/var/lib/powerdns/pdns.sqlite3
EOF
sudo systemctl restart pdns
sudo systemctl status pdns --no-pager

起動に失敗する場合は、backend 設定、database path、PowerDNS のログを確認します。

sudo journalctl -u pdns -n 80 --no-pager
sudo ls -l /var/lib/powerdns/ /etc/powerdns/pdns.d/

ゾーンを作成する

例として example.com の正引きゾーンを作成します。ns1.example.com を NS とし、A、MX レコードを追加します。

sudo pdnsutil create-zone example.com ns1.example.com
sudo pdnsutil add-record example.com ns1 A 203.0.113.10
sudo pdnsutil add-record example.com www A 203.0.113.20
sudo pdnsutil add-record example.com mail A 203.0.113.30
sudo pdnsutil add-record example.com @ MX '10 mail.example.com.'
sudo pdnsutil increase-serial example.com

IPv6 レコードを追加する

IPv6 を使う場合は AAAA レコードも追加します。公開 DNS では、IPv4 と IPv6 の両方で到達できるかを別途確認します。

sudo pdnsutil add-record example.com ns1 AAAA 2001:db8::10
sudo pdnsutil add-record example.com www AAAA 2001:db8::20
sudo pdnsutil increase-serial example.com

ゾーン内容を確認する

pdnsutil でゾーン内容を確認し、dig で PowerDNS へ問い合わせます。

sudo pdnsutil list-zone example.com
dig @127.0.0.1 example.com SOA
dig @127.0.0.1 example.com NS
dig @127.0.0.1 www.example.com A
dig @127.0.0.1 www.example.com AAAA
dig @127.0.0.1 example.com MX

逆引きゾーンを作成する

IPv4 の逆引きゾーンを作成します。公開 IP の逆引きは、実際には割り当て元や上位事業者の委任設定が必要です。

sudo pdnsutil create-zone 113.0.203.in-addr.arpa ns1.example.com
sudo pdnsutil add-record 113.0.203.in-addr.arpa 20 PTR www.example.com.
sudo pdnsutil add-record 113.0.203.in-addr.arpa 30 PTR mail.example.com.
sudo pdnsutil increase-serial 113.0.203.in-addr.arpa
dig @127.0.0.1 -x 203.0.113.20

待ち受けと firewall を確認する

外部へ権威 DNS として公開する場合は、UDP/TCP 53 番の待ち受けと firewall を確認します。

ss -lunp | grep ':53' || true
ss -ltnp | grep ':53' || true
sudo ufw status verbose 2>/dev/null || true

権威 DNS は TCP 53 番も必要です。大きな応答、DNSSEC、zone transfer などで TCP が使われるため、UDP だけ開ける運用は避けます。

外部公開時の注意

  • 権威 DNS と recursive resolver を混ぜない
  • NS レコードと glue レコードを合わせる
  • SOA serial を更新する運用を決める
  • UDP/TCP 53 番を確認する
  • 外部監視で応答と serial を確認する

公開 DNS では、サーバー単体の設定だけでなく、レジストラ側の NS 登録、glue、上位 DNS からの委任、firewall、IPv6 到達性を合わせて確認します。

BIND と PowerDNS の使い分け

zone file を Git などで管理したい場合は BIND が扱いやすいことがあります。一方、管理画面、API、DB と組み合わせてレコード管理したい場合は PowerDNS が向いています。

  • 単純な zone file 管理なら BIND が分かりやすい
  • DB 管理や API 連携なら PowerDNS が扱いやすい
  • 複数人で変更するなら承認フローを用意する
  • 外部公開では監視と履歴管理を重視する

バックアップを確認する

SQLite バックエンドでは database ファイルが状態を持ちます。設定ファイルと database ファイルの両方をバックアップ対象にします。

sudo install -d -m 0750 /var/backups/powerdns
sudo cp -a /etc/powerdns /var/backups/powerdns/etc-powerdns
sudo cp -a /var/lib/powerdns/pdns.sqlite3 /var/backups/powerdns/pdns.sqlite3
sudo ls -lh /var/backups/powerdns

まとめ

Ubuntu 22.04 の PowerDNS は、DB バックエンドで権威 DNS ゾーンを管理できます。SQLite バックエンドは小規模な検証や単一サーバーで扱いやすく、MariaDB / PostgreSQL バックエンドは複数台構成や管理画面連携に向いています。

外部公開する場合は、PowerDNS の設定だけでなく、NS、glue、SOA serial、UDP/TCP 53 番、監視、バックアップまで合わせて確認します。

関連する記事
Ubuntu 22.04 PowerDNS 権威 DNS – DB バックエンドでゾーンを管理する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る