Čo persist-tun a persist-key v OpenVPN skutočne prežijú
Obe voľby pokrývajú mäkký reštart vnútri živého procesu. Po zastavení nezachovávajú rozhranie a nie sú politikou blokovania prevádzky.
Zastavenie služby odstráni rozhranie aj s nastaveným persist-tun. To je voľba pracujúca podľa dokumentácie, nie zlyhanie. Voľba opisuje jednu cestu reštartu vnútri bežiaceho procesu a systemctl stop nie je tou cestou.
Prečítajte obe mená spolu a návrh je jasný. Jedno drží deskriptor, druhé drží kľúčový materiál a obe existujú kvôli tomu, čo sa deje po odhodení oprávnení.
Dva zdroje a reštart, ku ktorému patria
OpenVPN signalizuje vlastný reštart v dvoch bežných situáciách. Explicitný SIGUSR1 to urobí a ping-restart vyvolaný mŕtvym partnerom urobí to isté. Oba nechávajú proces živý a znova spúšťajú nastavenie spojenia, a práve tam si voľby zaslúžia svoje miesto.
| 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 |
Iba riadok mäkkého reštartu je to, čo tieto dve voľby menia, a práca, ktorú preskakujú, je drahá časť na vyťaženom spoji. Opätovné otvorenie zariadenia strhne adresy a trasy, ktoré sú k nemu pripojené, a ich opätovné zostavenie môže zahodiť pakety, ktoré boli na ceste, keď reštart začal. Zastavenie zničí tie isté objekty bez akejkoľvek voľby ich zachovať.
Prečo tieto voľby vôbec existujú
Ztužený server OpenVPN zvyčajne štartuje ako root, otvorí svoje kľúče a svoje zariadenie a potom prejde na neprivilegovaného používateľa. Po tomto prechode niektoré operácie jednoducho zmiznú. Čítanie kľúčového súboru s režimom 0600, vytvorenie sieťového rozhrania alebo zmena trás môžu byť odmietnuté.
Bez volieb persist by partner, ktorý stíchne dosť dlho na vyvolanie ping-restart, vynútil práve tie operácie. Opätovné pripojenie by zlyhalo, aj keď sa v konfigurácii nič nezmenilo. Proces by vyzeral, že umiera bez dôvodu, a protokol by ukázal chybu oprávnení namiesto sieťovej chyby.
S nimi mäkký reštart znova použije to, čo privilegovaná fáza už získala. Žiadna mágia v tom nie je a proces nič neprežíva. Získavanie zdrojov je jednoducho odložené.
Čítajte prvú chybu, nie poslednú
Keď reštart zlyhá, čítajte prvú chybu namiesto poslednej. Chránený kľúč, súbor auth, ioctl rozhrania a externý hook sú štyri rôzne zdroje. Ponechanie jedného nič nehovorí o prístupe k ostatným. Hook, ktorý volá nástroj firewallu, stále potrebuje oprávnenia, ktoré tento nástroj vyžaduje.
Hooky majú vlastný prepínač. Príručka OpenVPN páruje voľby persist s up-restart, ktorý rozhoduje, či sa skripty up a down po reštarte spustia znova. Rozhranie, ktoré zostalo hore, vám teda nič nehovorí o tom, či sa vaša integrácia resolvera obnovila.
# 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áto dvojica príkazov oddelí dva režimy zlyhania v priebehu sekúnd. Rozhranie, ktoré existuje, ale chýbajú mu trasy, je problém hooku alebo trasy. Rozhranie, ktoré zmizlo, znamená, že proces skutočne skončil.
Zachované rozhranie nie je kill switch
Ak je požiadavkou, aby prevádzka nikdy neopustila tunel, zachované zariadenie to nedodá. Trasy pre druhú rodinu adries, druhá predvolená trasa aj prípad, keď proces úplne skončí, zostávajú mimo rozsahu voľby.
Riešte obe požiadavky oddelene. Zachovanie objektu tunela cez opätovné pripojenia je pre démona pohodlie. Blokovanie odchodu, keď tunel nebeží, je politika firewallu s vlastnými pravidlami a vlastným testom. Ich miešanie dáva konfiguráciu, ktorá vyzerá obranne a správa sa ako opätovné pripojenie s najlepšou snahou.
Pomenujte udalosť skôr, než ju začnete diagnostikovať. Mäkký reštart, neúspešný pokus o pripojenie a zastavenie služby sú tri udalosti s tromi správaniami a len prvá je to, čo tieto voľby opisujú.