Firmware spotřebitelského routeru nebo NAS často při každém startu znovu sestavuje konfiguraci OpenVPN, takže direktiva, kterou přidáte, přežije přesně do dalšího startu. Totéž platí pro klíče zadané do webového formuláře, kde se uložená hodnota může po uložení vrátit zkomolená. Ani jeden z těchto příznaků neznamená, že byla změna odmítnuta. Znamená to, že úprava skončila v souboru, který firmware považuje za výstup, a trvalé místo je o krok dřív v sekvenci startu.

Proč se upravený soubor generuje znovu

Spouštěcí skript sestaví konfiguraci serveru ze šablony a poté spustí démona, čímž se vykreslený soubor stává artefaktem sestavení, nikoli zdrojem. Cokoli přidané po startu je pro příští běh tohoto skriptu neviditelné. Druhý vzorec je jemnější: vstupy klíče a certifikátu ve webovém rozhraní se ukládají v escapované podobě a uložení formuláře může tento escapovaný text zapsat do souboru, který démon čte. V obou případech je vykreslená konfigurace nesprávné místo pro trvalou změnu.

Podívejte se, co sekvence startu zapisuje a kdy. Odpovědí je téměř vždy skript v adresáři init nebo automatického spouštění firmwaru.

Vložte direktivu tam, kde skript soubor sestavuje

Zařízení QTS regenerují konfiguraci serveru OpenVPN uvnitř init skriptu, který spouští démona, takže úprava musí proběhnout tam. Přidejte připojení bezprostředně před příkaz pro spuštění, místo abyste upravovali vygenerovaný soubor.

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

Ukotvěte vložení na příkaz, který se nepohne, protože čísla řádků se mezi sestaveními mění. Protože se init skript sám při startu nahrazuje, musí se změna znovu vydat z háčku automatického spouštění při každém startu systému. Po jednom restartu spočítejte výskyty ve vygenerovaném souboru: jeden řádek znamená, že záplata zabrala, dva znamenají, že háček běží více než jednou. Dvojí běh prošetřete zvlášť, protože to není stejná závada jako změna, která zmizela.

Opravte formulář, který uložil escapované klíče

Na stránkách ve stylu Asus zobrazují pole certifikátu a klíče escapovaný text a uložení po nesouvisející úpravě může tyto entity zapsat zpět na disk. Pracujte z dekódované kopie a uložte jen jednou, až budou všechny úpravy hotové.

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

Při výměně nové sady parametrů vložte jen datovou část base64, pokud pole žádá tělo klíče, a řádky pancíře zachovejte jen tehdy, když pole očekává celý blok PEM. Obnova stránky už uložené v escapované podobě obvykle znamená vymazat postižené vstupy a použít, což firmwaru umožní je znovu sestavit. Generujte cokoli nad 2048 bitů na pracovní stanici, protože zásoba entropie routeru dělá operaci pomalou a někdy nespolehlivou. Uložte soubor s parametry někam, kam se dostanete i po továrním resetu.

Po aktualizacích zkontrolujte znovu

Aktualizace firmwaru nahrazují init skripty a mohou smazat adresář automatického spouštění, takže záplatu je nutné znovu nainstalovat a otestovat. Porovnejte regenerovaný soubor s kopií, kterou jste si ponechali, a potvrďte, že direktiva je přítomna právě jednou. Hodnota viditelná ve webovém rozhraní není důkazem, že ji démon přijal, protože stránka čte uložená pole. Zapište příkaz záplaty a verzi firmwaru do poznámek k údržbě, aby je příští aktualizace přenesla dál.

Poté připojte klienta a přečtěte v protokolu serveru předávanou volbu. Nastavení, které kdy existovalo jen ve formuláři, je nastavení, které nikdo neotestoval.

Související články