サーバを CentOS 7 から Oracle Linux 9 に移行しているので、移行する PowerDNS やバックエンドの PostgreSQL も当然バージョンアップになります。
今回は、以下のようなバージョンアップになりました。
旧:
- pdns-3.4.10-1.el7.x86_64
- pdns-backend-postgresql-3.4.10-1.el7.x86_64
- postgresql-server-9.2.15-1.el7_2.x86_64
新:
- pdns-4.8.4-1.el9.x86_64
- pdns-backend-postgresql-4.8.4-1.el9.x86_64
- postgresql-server-13.20-1.el9_5.x86_64
DBのダンプ&リストアも順調にいって、pdnsも普通に起動したのですが、dns問い合わせをすると返答が正常に返ってきません。
/var/log/messages を見ると、以下のようなエラーが出てました。
Mar 19 14:52:12 XXXXXXXXX pdns_server[XXXXX]: Exception building answer packet for www.example.com/A (Parsing record content (try 'pdnsutil check-zone'): Data field in DNS should start with quote (") at position 0 of 'v=spf1 ip4:XXX.XXX.XXX.XXX -all') sending out servfail
旧バージョンでは SPF レコードの content はダブルクオーテーションで囲ってなかったのですが、新しいバージョンではそうする必要があるようです。
psql pdns から当該レコードのIDを求めて、
update records set content='"v=spf1 ip4:XXX.XXX.XXX.XXX -all"' where id=XX;
とすることで復旧しました。
そもそも、このDNSレコードは type が SPF (DNS record type 99) となっており、deprecatedなので、削除してしまっても良かったかもしれないです。ちなみに TXT で同一のレコードが存在してました。
以上