Lors de la mise à jour vers stretch, nous sommes passés de Knot 1.x à 2.x.

La migration n'a pas été super-sympatique, quidame et nicoo ayant dû désinstaller knot entièrement et reconfigurer la nouvelle version (et importer les clefs DNSSEC existantes). C'était probablement dû à un problème de mise à jour du paquet lors de la mise jour du système, puisque la commande

strace -f -e open knotd -vvv

nous a permis d'observer une recherche infructueuse d'un fichier lbnss_db.so.2, qui est un fichier fourni par le paquet libnss-db …de jessie.

Sauvegarde de la configuration et données

mkdir ~/knot.bak
cp -ar /etc/knot ~/knot.bak/etc
cp -ar /var/lib/knot ~/knot.bak/var_lib

Désinstallation et retrait de la config

apt purge knot
rm -rf /etc/knot /var/lib/knot

Installation

  • On réinstalle knot, on remet la configuration de base (convertie par knot1to2) en place :

    apt install knot
    cp ~/knot.bak/etc/db.nos-oignons.{fr,net,org} /var/lib/knot
    /usr/lib/knot/knot1to2 -i ~/knot.bak/etc/knot.conf~ -o /etc/knot/knot.conf
    
  • On édite /etc/knot/knot.conf pour désactiver la signature DNSSEC des zones.
    Au passage, on teste la validité de la configuration avec knotc conf-check

  • On résoud (à coup de massue) un souci de permissions: chown -R knot:knot /var/lib/knot

  • On relance knot, on teste que les zones sont servies (sans signature !) par les serveurs primaires et secondaires.
    À partir de ce point, nos domaines sont indisponibles pour les users de résolveurs DNS compatibles DNSSEC.

  • On teste que les zones sont bien servies, on commit la config.

  • On importe les clefs DNSSEC au nouveau format utilisé par Knot (.pem)

    keymgr zone key import nos-oignons.net ~/knot.bak/var_lib/keys/Knos-oignons.net.+014+41833.private
    keymgr zone key import nos-oignons.net ~/knot.bak/var_lib/keys/Knos-oignons.net.+014+43612.private
    […]
    
  • On configure Knot pour la signature automatique des zones :

    policy:
      - id: dnssec_oignons
        algorithm: ecdsap384sha384
        nsec3: True
    
    template:
      - id: "default"
        semantic-checks: "on"
        notify: "slave"
        acl: [ "acl_slave", "acl_dns-update" ]
        dnssec-signing: "on"
        dnssec-policy: dnssec_oignons
    

    Encore une fois, knotc conf-check est notre ami.

  • On relance knot, on vérifie que l'olibrius a signé les zones :

    $ systemctl restart knot
    $ journalctl -n50 -uknot
    [...]
    juil. 28 23:26:12 bulbe knotd[29889]: info: [nos-oignons.fr.] DNSSEC, successfully signed
    juil. 28 23:26:12 bulbe knotd[29889]: info: [nos-oignons.net.] DNSSEC, successfully signed
    [...]
    juil. 28 23:26:12 bulbe knotd[29889]: info: [nos-oignons.org.] DNSSEC, successfully signed
    
  • On teste que la zone est valide, en partant de la racine DNS, grâce à drill (l'équivalent de dig, made in Unbound) :

    $ apt install ldnsutils dns-root-data
    $ drill -k /usr/share/dns/root.key -D -T nos-oignons.net
    ;; Number of trusted keys: 2
    ;; Domain: .
    [...]
    ;; Domain: nos-oignons.net.
    [T] nos-oignons.net. 3600 IN DNSKEY 256 3 14 ;{id = 41833 (zsk), size = 384b}
    nos-oignons.net. 3600 IN DNSKEY 257 3 14 ;{id = 43612 (ksk), size = 384b}
    nos-oignons.net. 3600 IN DNSKEY 256 3 14 ;{id = 31516 (zsk), size = 384b}
    [T] nos-oignons.net.    3600    IN      A       91.216.110.49
    ;;[S] self sig OK; [B] bogus; [T] trusted
    
  • On commit la configuration dans etckeeper.

  • On remet en place /etc/knot/db.nos-oignons.{net,org,fr} et update-dns (qui sont utilisés par divers scripts).

  • On peut souffler un grand coup, et nicoo se sert un whisky.