OpenVPN-indstillinger på routeren ruller tilbage efter genstart: ret generatoren
Firmware, der genopbygger sin OpenVPN-konfiguration ved hver opstart, kasserer dine ændringer. Patch generator-krogen, og sammenlign derefter den genererede fil efter én genstart.
Firmware på en forbrugerrouter eller NAS genopbygger ofte sin OpenVPN-konfiguration ved hver opstart, så en direktiv, du tilføjer, overlever præcis indtil næste opstart. Det samme gælder nøgler, der skrives i en webformular, hvor den gemte værdi kan komme tilbage ødelagt efter en gemning. Ingen af disse symptomer betyder, at ændringen blev afvist. Det betyder, at ændringen endte i en fil, som firmwaren behandler som output, og at det varige sted ligger et skridt tidligere i opstartssekvensen.
Hvorfor den redigerede fil gendannes
Et startscript samler serverkonfigurationen ud fra en skabelon og starter derefter dæmonen, hvilket gør den renderede fil til et byggeartefakt i stedet for en kilde. Alt, der tilføjes efter opstart, er usynligt for næste kørsel af det script. Det andet mønster er mere subtilt: nøgle- og certifikatinput i webgrænsefladen gemmes i en escapet form, og en gemning af formularen kan skubbe den escapede tekst ind i den fil, dæmonen læser. Under alle omstændigheder er den renderede konfiguration det forkerte sted at lave en varig ændring.
Se på, hvad opstartssekvensen skriver, og hvornår den skriver det. Svaret er næsten altid et script i firmwarens init- eller autorun-mappe.
Indsæt direktivet, hvor scriptet bygger filen
QTS-apparater gendanner OpenVPN-serverkonfigurationen inde i det init-script, der starter dæmonen, så ændringen skal ske der. Tilføj tilføjelsen umiddelbart før startkommandoen i stedet for at redigere den genererede fil.
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.confForankr indsættelsen på en kommando, der ikke flytter sig, da linjenumre skifter mellem builds. Fordi init-scriptet selv erstattes under opstart, skal ændringen udstedes igen fra firmwarens autorun-krog, hver gang systemet starter. Efter én genstart tælles forekomsterne i den genererede fil: én linje betyder, at patchen virkede, mens to betyder, at krogen kører mere end én gang. Undersøg den dobbelte kørsel separat, for det er ikke samme fejl som en ændring, der forsvandt.
Reparér en formular, der gemte escapede nøgler
På Asus-lignende sider viser certifikat- og nøglefelterne escapet tekst, og en gemning efter en urelateret justering kan skrive disse entiteter tilbage til disken. Arbejd ud fra en dekodet kopi, og gem kun én gang, når alle ændringer er klar.
openssl dhparam -out dh2048.pem 2048
grep -n "BEGIN DH PARAMETERS" dh2048.pemNår du skifter et nyt parametersæt ind, skal du kun indsætte base64-nyttelasten, hvis feltet beder om nøglens krop, og kun beholde armor-linjerne, når feltet forventer en fuld PEM-blok. At redde en side, der allerede er gemt i escapet form, betyder normalt at rydde de berørte felter og anvende, hvilket lader firmwaren bygge dem igen. Generer alt over 2048 bit på en arbejdsstation, fordi routerens entropiforsyning gør operationen langsom og nogle gange upålidelig. Opbevar parameterfilen et sted, du kan nå efter en fabriksnulstilling.
Kontrollér igen efter opgraderinger
Firmwareopdateringer erstatter init-scripts og kan slette autorun-mappen, så patchen skal geninstalleres og testes igen. Sammenlign den gendannede fil med den kopi, du gemte, og bekræft, at direktivet findes præcis én gang. En værdi, der er synlig i webgrænsefladen, er ikke bevis for, at dæmonen har modtaget den, da siden læser gemte felter. Skriv patchkommandoen og firmwareversionen i vedligeholdelsesnotaterne, så den næste opdatering tager dem med videre.
Tilslut derefter en klient, og læs serverloggen for den pushede indstilling. En indstilling, der kun nogensinde har stået i en formular, er en indstilling, ingen har testet.