Le firmware d’un routeur grand public ou d’un NAS reconstruit souvent sa configuration OpenVPN à chaque démarrage, si bien qu’une directive que vous ajoutez ne survit exactement que jusqu’au prochain démarrage. Il en va de même pour les clés saisies dans un formulaire web, où la valeur enregistrée peut revenir altérée après un enregistrement. Aucun de ces symptômes ne signifie que la modification a été rejetée. Cela signifie que la modification a atterri dans un fichier que le firmware traite comme une sortie, et que l’endroit durable se trouve une étape plus tôt dans la séquence de démarrage.

Pourquoi le fichier modifié est régénéré

Un script de démarrage assemble la configuration du serveur à partir d’un modèle, puis lance le démon, ce qui fait du fichier rendu un artefact de compilation plutôt qu’une source. Tout ce qui est ajouté après le démarrage est invisible pour l’exécution suivante de ce script. Le second schéma est plus subtil : les saisies de clé et de certificat dans l’interface web sont stockées sous une forme échappée, et l’enregistrement du formulaire peut pousser ce texte échappé dans le fichier que lit le démon. Dans les deux cas, la configuration rendue est le mauvais endroit pour une modification durable.

Regardez ce que la séquence de démarrage écrit et quand elle l’écrit. La réponse est presque toujours un script dans le répertoire init ou de démarrage automatique du firmware.

Insérez la directive là où le script construit le fichier

Les appareils QTS régénèrent la configuration du serveur OpenVPN dans le script init qui lance le démon, la modification doit donc y avoir lieu. Ajoutez l’ajout juste avant la commande de démarrage au lieu de modifier le fichier généré.

sed -i '/daemon_mgr/i echo client-config-dir clientconfig >>/etc/openvpn/server.conf' /etc/init.d/vpn_openvpn.sh
grep -c client-config-dir /etc/openvpn/server.conf

Ancrez l’insertion sur une commande qui ne bougera pas, car les numéros de ligne changent entre les compilations. Comme le script init est lui-même remplacé pendant le démarrage, la modification doit être réémise depuis le crochet de démarrage automatique du firmware à chaque démarrage du système. Après un redémarrage, comptez les occurrences dans le fichier généré : une ligne signifie que le correctif a fonctionné, tandis que deux signifient que le crochet s’exécute plus d’une fois. Examinez la double exécution séparément, car ce n’est pas la même panne qu’une modification disparue.

Réparez un formulaire qui a stocké des clés échappées

Sur les pages de style Asus, les champs de certificat et de clé affichent du texte échappé, et un enregistrement après un réglage sans rapport peut réécrire ces entités sur le disque. Travaillez à partir d’une copie décodée et n’enregistrez qu’une seule fois, une fois toutes les modifications prêtes.

openssl dhparam -out dh2048.pem 2048
grep -n "BEGIN DH PARAMETERS" dh2048.pem

Lorsque vous remplacez un nouvel ensemble de paramètres, collez uniquement la charge base64 si le libellé demande le corps de la clé, et ne conservez les lignes d’armure que lorsque le champ attend un bloc PEM complet. Récupérer une page déjà enregistrée sous sa forme échappée signifie généralement vider les champs concernés et appliquer, ce qui permet au firmware de les reconstruire. Générez tout ce qui dépasse 2048 bits sur un poste de travail, car l’approvisionnement en entropie du routeur rend l’opération lente et parfois peu fiable. Stockez le fichier de paramètres à un endroit accessible après une réinitialisation d’usine.

Revérifiez après les mises à jour

Les mises à jour du firmware remplacent les scripts init et peuvent effacer le répertoire de démarrage automatique, le correctif doit donc être réinstallé et retesté. Comparez le fichier régénéré avec la copie que vous avez conservée et confirmez que la directive est présente exactement une fois. Une valeur visible dans l’interface web ne prouve pas que le démon l’a reçue, car la page lit des champs enregistrés. Écrivez la commande du correctif et la version du firmware dans les notes de maintenance pour que la prochaine mise à jour les transmette.

Connectez ensuite un client et lisez le journal du serveur pour l’option poussée. Un réglage qui n’a jamais existé que dans un formulaire est un réglage que personne n’a testé.

Articles similaires