OpenVPN-Einstellungen am Router werden nach dem Neustart zurückgesetzt: Reparieren Sie den Generator
Firmware, die ihre OpenVPN-Konfiguration bei jedem Start neu aufbaut, verwirft Ihre Änderungen. Patchen Sie den Generator-Hook und vergleichen Sie anschließend die erzeugte Datei nach einem Neustart.
Die Firmware eines Consumer-Routers oder NAS baut ihre OpenVPN-Konfiguration oft bei jedem Start neu auf, sodass eine Direktive, die Sie anhängen, genau bis zum nächsten Start überlebt. Dasselbe gilt für Schlüssel, die in ein Webformular eingetippt werden, wo der gespeicherte Wert nach dem Speichern verstümmelt zurückkommen kann. Keines dieser Symptome bedeutet, dass die Änderung abgelehnt wurde. Es bedeutet, dass die Änderung in einer Datei landete, die die Firmware als Ausgabe behandelt, und dass der dauerhafte Ort einen Schritt früher in der Startsequenz liegt.
Warum die bearbeitete Datei neu erzeugt wird
Ein Startskript setzt die Serverkonfiguration aus einer Vorlage zusammen und startet dann den Daemon, wodurch die gerenderte Datei zu einem Build-Artefakt statt zu einer Quelle wird. Alles, was nach dem Start angehängt wird, ist für den nächsten Lauf dieses Skripts unsichtbar. Das zweite Muster ist subtiler: Schlüssel- und Zertifikatseingaben in der Weboberfläche werden in einer maskierten Form gespeichert, und das Speichern des Formulars kann diesen maskierten Text in die Datei schreiben, die der Daemon liest. So oder so ist die gerenderte Konfiguration der falsche Ort für eine dauerhafte Änderung.
Schauen Sie, was die Startsequenz schreibt und wann sie es schreibt. Die Antwort ist fast immer ein Skript im init- oder Autorun-Verzeichnis der Firmware.
Fügen Sie die Direktive dort ein, wo das Skript die Datei baut
QTS-Geräte erzeugen die OpenVPN-Serverkonfiguration im init-Skript neu, das den Daemon startet, also muss die Änderung dort erfolgen. Fügen Sie das Anhängen unmittelbar vor dem Startbefehl hinzu, statt die erzeugte Datei zu bearbeiten.
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.confVerankern Sie die Einfügung an einem Befehl, der sich nicht verschiebt, da sich Zeilennummern zwischen Builds ändern. Weil das init-Skript selbst beim Start ersetzt wird, muss die Änderung bei jedem Systemstart erneut vom Autorun-Hook der Firmware ausgegeben werden. Zählen Sie nach einem Neustart die Vorkommen in der erzeugten Datei: eine Zeile bedeutet, dass der Patch gewirkt hat, zwei bedeuten, dass der Hook mehr als einmal läuft. Untersuchen Sie den Doppellauf getrennt, denn er ist nicht derselbe Fehler wie eine verschwundene Änderung.
Reparieren Sie ein Formular, das maskierte Schlüssel gespeichert hat
Auf Seiten im Asus-Stil zeigen die Zertifikats- und Schlüsselfelder maskierten Text, und ein Speichern nach einer unabhängigen Anpassung kann diese Entitäten zurück auf die Festplatte schreiben. Arbeiten Sie mit einer dekodierten Kopie und speichern Sie nur einmal, wenn alle Änderungen fertig sind.
openssl dhparam -out dh2048.pem 2048
grep -n "BEGIN DH PARAMETERS" dh2048.pemBeim Austausch eines neuen Parametersatzes fügen Sie nur die base64-Nutzlast ein, wenn das Feld den Schlüsselkörper verlangt, und behalten Sie die Armor-Zeilen nur, wenn das Feld einen vollständigen PEM-Block erwartet. Eine Seite zu retten, die bereits in maskierter Form gespeichert wurde, bedeutet meist, die betroffenen Eingaben zu leeren und anzuwenden, wodurch die Firmware sie neu aufbauen kann. Erzeugen Sie alles über 2048 Bit auf einer Workstation, weil die Entropieversorgung des Routers den Vorgang langsam und manchmal unzuverlässig macht. Bewahren Sie die Parameterdatei an einem Ort auf, den Sie nach einem Werksreset erreichen können.
Prüfen Sie nach Upgrades erneut
Firmware-Updates ersetzen init-Skripte und können das Autorun-Verzeichnis löschen, daher muss der Patch neu installiert und erneut getestet werden. Vergleichen Sie die neu erzeugte Datei mit der aufbewahrten Kopie und bestätigen Sie, dass die Direktive genau einmal vorhanden ist. Ein in der Weboberfläche sichtbarer Wert ist kein Beweis dafür, dass der Daemon ihn erhalten hat, da die Seite gespeicherte Felder liest. Schreiben Sie den Patch-Befehl und die Firmware-Version in die Wartungsnotizen, damit das nächste Update sie weiterträgt.
Verbinden Sie dann einen Client und lesen Sie im Serverprotokoll nach der übertragenen Option. Eine Einstellung, die es nur je in einem Formular gab, ist eine Einstellung, die niemand getestet hat.