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.

EventTUN/TAP deviceKey and auth filesAddresses and routesup/down hooks
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itselfsurvives only with persist-tunsurvive only with persist-keysurvive with the device, otherwise rebuiltrun again only when restart hooks are enabled
Configuration reload, SIGHUPrecreatedre-read from diskrebuilt once the device returnsrun again
Service stoplostre-read at the next startremovedrun 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.

Aiheeseen liittyvät artikkelit