Stretch et Opendnssec 2.0.4

L’autre truc qui n’a pas marché tout seul lors du passage de Debian 8 à 9, c’est la mise à jour de OpenDNSSEC de la version 1.4 à la 2.0.4.

Il y a un fichier /usr/share/opendnssec/README.md qui décrit les étapes à suivre pour faire cette migration mais les éléments fournis dans le paquet ne sont pas à jour et ça ne fonctionne pas et je ne suis pas le premier à avoir eu le problème.

Il faut d’abord monter la base vers la version 1.4.8 avec le script /usr/share/opendnssec/migrate_1_4_8.mysql car les versions plus anciennes ne sont pas supportées..

mysql -p kasp < /usr/share/opendnssec/migrate_1_4_8.mysql

Il faut ensuite vérifier qu’il n’y a pas de zone dont on n’a pas encore transmis la clé à la zone parente (dans l’état en attente de ds-seen, voir la requête décrite dans le message), sinon, il faut lancer la commande appropriée (ods-ksmutil key ds-seen).

Il faut ensuite créer une nouvelle base myqsqlmariadb temporaire et l’initialiser avec le schéma fourni dans /usr/share/opendnssec/schema.mysql. Cependant, le script tel quel ne fonctionne pas et il le modifier avec ce patch :

curl -Lo schema-patch.myql http://lists.opendnssec.org/pipermail/opendnssec-user/attachments/20171102/e2071322/attachment.bin
patch /usr/share/opendnssec/schema.mysql < schema-patch.myql
mysqladmin -p create ods
mysql -p ods < /usr/share/opendnssec/schema.mysql

Il faut ensuite passer un script qui va lire l’ancienne base et convertir les données qui seront insérées dans la nouvelle. J’ai utilisé la version mentionnée dans le fil de discussion (que j’ai été chercher dans l’historique puisque le fichier a été supprimé) où les appels strftime() ont été remplacés par UNIX_TIMESTAMP() mais il faut normalement utiliser celle-ci. Il faut également modifier le script pour modifier le nom de la base d’origine qui est référencée par REMOTE. C’est normalement le shell qui fait ça.

curl -LO https://raw.githubusercontent.com/opendnssec/opendnssec/f016a0be24c9d3133b9f8bd86e4e81fd2ef2a6ee/enforcer/utils/1.4-2.0_db_convert/mysql_convert.sql
sed "s/REMOTE/kasp/g" mysql_convert.sql > mysql_convert_1.4.8-2.0.sql
mysql -p ods < mysql_convert_1.4.8-2.0.sql

On peut alors soit renommer la base dans les fichiers de configuration ou la recréer et importer les données, c’est ce que j’ai fait. On n’aura plus besoin de la nouvelle base après ça.

mysqladmin -p drop kasp
mysqladmin -p create kasp
mysqldump -p ods | mysql -p kasp
mysqladmin -p drop ods

La base est maintenant migrée, il faut modifier la configuration du module logiciel de sécurité matériel (sic). En premier lieu, dans le fichier /etc/softhsm/softhsm2.conf, il faut changer l’emplacement des jetons :

directories.tokendir = /var/lib/opendnssec/tokens/

Il faut ensuite lancer les commandes suivantes :

softhsm2-util --init-token --slot 0 --label OpenDNSSEC
softhsm2-migrate --db /var/lib/softhsm/slot0.db --token OpenDNSSEC
chown -R opendnssec.opendnssec /var/lib/opendnssec/tokens

Finalement, il faut modifier le fichier de configuration du démon ods-enforcerd en charge du suivi de la politique de modification des zones et changer le nom de la bibliothèque du SoftHSM puisqu’on est passé à la v2 :

                        <Module>/usr/lib/softhsm/libsofthsm2.so</Module>

Il faut également changer port en Port dans le paragraphe de configuration de la connexion à la base :

                                <Host Port="3306">localhost</Host>

Le démon ods-signer a besoin de la liste des zones qui était dans un répertoire différent :

cp /etc/opendnssec/zonelist.xml /var/lib/opendnssec/enforcer/zones.xml
chown opendnssec.opendnssec /var/lib/opendnssec/enforcer/zones.xml

On peut maintenant lancer la commande ods-migrate et démarrer les démons ods-signerd et ods-enforcerd :

ods-migrate
systemctl start opendnssec-enforcer
systemctl start opendnssec-signer