Setările OpenVPN de pe router revin după repornire: reparați generatorul
Firmware-ul care reconstruiește configurația OpenVPN la fiecare pornire aruncă modificările dvs. Remediați cârligul generatorului, apoi comparați fișierul generat după o repornire.
Firmware-ul de pe un router de consum sau un NAS reconstruiește adesea configurația OpenVPN la fiecare pornire, așa că o directivă pe care o adăugați supraviețuiește exact până la următoarea pornire. Același lucru este valabil pentru cheile introduse într-un formular web, unde valoarea salvată poate reveni coruptă după salvare. Niciunul dintre aceste simptome nu înseamnă că modificarea a fost respinsă. Înseamnă că modificarea a ajuns într-un fișier pe care firmware-ul îl tratează ca ieșire, iar locul durabil se află cu un pas mai devreme în secvența de pornire.
De ce fișierul editat este regenerat
Un script de pornire asamblează configurația serverului dintr-un șablon și apoi lansează demonul, ceea ce face din fișierul randat un artefact de compilare în loc de sursă. Orice se adaugă după pornire este invizibil pentru următoarea rulare a acelui script. Al doilea model este mai subtil: intrările de cheie și certificat din interfața web sunt stocate într-o formă escapată, iar salvarea formularului poate împinge acel text escapat în fișierul pe care îl citește demonul. În orice caz, configurația randată este locul greșit pentru o modificare durabilă.
Uitați-vă ce scrie secvența de pornire și când. Răspunsul este aproape întotdeauna un script din directorul init sau de pornire automată al firmware-ului.
Introduceți directiva acolo unde scriptul construiește fișierul
Aparatele QTS regenerează configurația serverului OpenVPN în interiorul scriptului init care pornește demonul, așa că modificarea trebuie făcută acolo. Adăugați adaosul imediat înainte de comanda de pornire în loc să editați fișierul generat.
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.confAncorați inserarea pe o comandă care nu se va muta, deoarece numerele de linie se schimbă între compilări. Deoarece scriptul init însuși este înlocuit în timpul pornirii, modificarea trebuie reemisă din cârligul de pornire automată a firmware-ului la fiecare pornire a sistemului. După o repornire, numărați aparițiile din fișierul generat: o linie înseamnă că patch-ul a funcționat, iar două înseamnă că cârligul rulează mai mult de o dată. Investigați separat rularea dublă, pentru că nu este aceeași defecțiune ca o modificare care a dispărut.
Reparați un formular care a salvat chei escapate
Pe paginile în stil Asus, câmpurile de certificat și cheie afișează text escapat, iar salvarea după o ajustare nelegată poate rescrie acele entități pe disc. Lucrați dintr-o copie decodificată și salvați o singură dată, după ce toate modificările sunt gata.
openssl dhparam -out dh2048.pem 2048
grep -n "BEGIN DH PARAMETERS" dh2048.pemCând înlocuiți un set nou de parametri, lipiți doar încărcătura base64 dacă eticheta cere corpul cheii, și păstrați liniile de armură doar când câmpul așteaptă un bloc PEM complet. Recuperarea unei pagini deja salvate în forma sa escapată înseamnă de obicei golirea câmpurilor afectate și aplicarea, ceea ce permite firmware-ului să le reconstruiască. Generați orice peste 2048 de biți pe o stație de lucru, deoarece alimentarea cu entropie a routerului face operația lentă și uneori nesigură. Păstrați fișierul de parametri într-un loc accesibil după o resetare din fabrică.
Verificați din nou după actualizări
Actualizările de firmware înlocuiesc scripturile init și pot șterge directorul de pornire automată, așa că patch-ul trebuie reinstalat și testat din nou. Comparați fișierul regenerat cu copia pe care ați păstrat-o și confirmați că directiva este prezentă exact o dată. O valoare vizibilă în interfața web nu este dovada că demonul a primit-o, deoarece pagina citește câmpuri stocate. Scrieți comanda patch-ului și versiunea firmware în notele de întreținere, pentru ca următoarea actualizare să le ducă mai departe.
Apoi conectați un client și citiți jurnalul serverului pentru opțiunea trimisă. O setare care a existat vreodată doar într-un formular este o setare pe care nimeni nu a testat-o.