Mitä persist-tun ja persist-key todella selviävät OpenVPN:ssä
Molemmat asetukset kattavat pehmeän uudelleenkäynnistyksen elävän prosessin sisällä. Ne eivät säilytä rajapintaa pysäytyksen jälkeen eivätkä ole liikenteen estämisen käytäntö.
Palvelun pysäyttäminen poistaa rajapinnan, vaikka persist-tun olisi asetettu. Tämä on asetus, joka toimii dokumentoidusti, ei vika. Asetus kuvaa yhden uudelleenkäynnistyspolun käynnissä olevan prosessin sisällä, eikä systemctl stop ole se polku.
Lue kaksi nimeä yhdessä, niin suunnittelu selkenee. Toinen pitää kuvaajaa, toinen pitää avainmateriaalia, ja molemmat ovat olemassa sen vuoksi, mitä tapahtuu sen jälkeen kun oikeudet on luovutettu.
Kaksi resurssia ja uudelleenkäynnistys, johon ne kuuluvat
OpenVPN ilmoittaa oman uudelleenkäynnistyksensä kahdessa tavallisessa tilanteessa. Selkeä SIGUSR1 tekee sen, ja kuolleen vastapuolen laukaisema ping-restart tekee saman. Molemmat pitävät prosessin elossa ja ajavat yhteyden määrityksen uudelleen, ja siinä asetukset ansaitsevat paikkansa.
| Event | TUN/TAP device | Key and auth files | Addresses and routes | up/down hooks |
|---|---|---|---|---|
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itself | survives only with persist-tun | survive only with persist-key | survive with the device, otherwise rebuilt | run again only when restart hooks are enabled |
Configuration reload, SIGHUP | recreated | re-read from disk | rebuilt once the device returns | run again |
| Service stop | lost | re-read at the next start | removed | run at the next start |
Vain pehmeän uudelleenkäynnistyksen rivi on se, mitä nämä kaksi asetusta muuttavat, ja työ, jonka ne ohittavat, on kallis osa vilkkaalla yhteydellä. Laitteen avaaminen uudelleen repii siihen liittyvät osoitteet ja reitit, ja niiden uudelleenrakentaminen voi pudottaa paketteja, jotka olivat matkalla uudelleenkäynnistyksen alkaessa. Pysäytys tuhoaa samat objektit ilman mitään asetusta niiden säilyttämiseksi.
Miksi asetukset ylipäätään ovat olemassa
Kovennettu OpenVPN-palvelin käynnistyy yleensä rootina, avaa avaimensa ja laitteensa ja siirtyy sitten käyttäjälle ilman erioikeuksia. Tämän siirtymän jälkeen jotkin toiminnot ovat yksinkertaisesti poissa. Avaintiedoston lukeminen tilassa 0600, verkkorajapinnan luominen tai reittien muuttaminen voidaan kaikki evätä.
Ilman persist-asetuksia vastapuoli, joka vaikenee tarpeeksi kauan laukaistakseen ping-restart, pakottaisi juuri ne toiminnot. Yhteys epäonnistuisi, vaikka mikään määrityksessä ei olisi muuttunut. Prosessi näyttäisi kuolevan ilman syytä, ja loki näyttäisi käyttöoikeusvirheen verkkovirheen sijaan.
Niiden kanssa pehmeä uudelleenkäynnistys käyttää uudelleen sen, minkä erioikeutettu vaihe on jo saanut. Mitään taikaa ei ole mukana, eikä prosessi selviä mistään. Resurssien hankinta vain lykkääntyy.
Lue ensimmäinen virhe, älä viimeistä
Kun uudelleenkäynnistys epäonnistuu, lue ensimmäinen virhe viimeisen sijaan. Suojattu avain, auth-tiedosto, rajapinnan ioctl ja ulkoinen koukku ovat neljä eri resurssia. Yhden pitäminen ei kerro mitään pääsystä muihin. Koukku, joka kutsuu palomuurityökalua, tarvitsee edelleen ne erioikeudet, joita työkalu vaatii.
Koukuilla on oma kytkimensä. OpenVPN:n käsikirja yhdistää persist-asetukset up-restart-asetukseen, joka päättää, ajetaanko up- ja down-skriptit uudelleen uudelleenkäynnistyksen jälkeen. Ylhäällä pysynyt rajapinta ei siis kerro sinulle mitään siitä, päivittyikö resolver-integraatiosi.
# which restart path just happened?
journalctl -u openvpn-client@office --since '10 min ago' | grep -E 'SIGUSR1|ping-restart|Restart pause|NOTE:'
# did the interface survive, and do its routes still exist?
ip -brief link show tun0
ip route show dev tun0
Tämä komentopari erottaa kaksi vikatilaa sekunneissa. Rajapinta, joka on olemassa mutta jonka reitit puuttuvat, on koukun tai reitin ongelma. Kadonnut rajapinta tarkoittaa, että prosessi todella päättyi.
Säilytetty rajapinta ei ole kill switch
Jos vaatimuksena on, että liikenne ei koskaan poistu tunnelin ulkopuolelle, säilytetty laite ei tarjoa sitä. Toisen osoiteperheen reitit, toinen oletusreitti ja tapaus, jossa prosessi poistuu kokonaan, jäävät kaikki asetuksen ulkopuolelle.
Käsittele kahta vaatimusta erikseen. Tunneliesineen pitäminen uudelleenyhdistämisten yli on daemonille mukavuus. Ulosmennon estäminen, kun tunneli on alhaalla, on palomuurikäytäntö omine sääntöineen ja omine testeineen. Niiden sekoittaminen tuottaa määrityksen, joka näyttää puolustavalta ja käyttäytyy kuin parhaan yrityksen uudelleenyhdistäminen.
Nimeä tapahtuma ennen kuin diagnosoit sen. Pehmeä uudelleenkäynnistys, epäonnistunut yhteysyritys ja palvelun pysäytys ovat kolme tapahtumaa, joilla on kolme käyttäytymistä, ja vain ensimmäinen on se, mitä nämä asetukset kuvaavat.