The current config syntax allows a single kind of listening address, listen-address. This sets the local-address option in /etc/powerdns/recursor.conf. Unfortunately, local-address is only for IPv4 addresses; a separate local-ipv6 setting in recursor.conf is required for IPv6 addresses.
See the documentation here: https://doc.powerdns.com/md/authoritative/settings/#local-address
and: https://doc.powerdns.com/md/authoritative/settings/#local-ipv6
As a result, this configuration:
# show service dns forwarding { ignore-hosts-file listen-address 2604:3024:423e:b9f2::1 listen-address 192.168.10.1 listen-address 2604:3024:423e:b9f1::1 listen-address 51.89.31.65 listen-address 2604:3024:423e:b9f4::1 listen-address 192.168.20.1 listen-address 127.0.0.1 name-server 2604:3024:423e:b9f1:3063:21ff:fee9:1234 name-server 51.89.31.67 name-server 52.41.86.239 }
creates this setting in recursor.conf:
# listen-on local-address=2604:3024:423e:b9f2::1,192.168.10.1,2604:3024:423e:b9f1::1,51.89.31.65,2604:3024:423e:b9f4::1,192.168.20.1,127.0.0.1
The server does not, in fact, listen on any of the IPv6 addresses, although it does listen on the IPv4 addresses without complaint.
There should probably be a separate listen-address-v6 config option, or something similar.