Ką persist-tun ir persist-key iš tikrųjų išgyvena OpenVPN
Abu parametrai apima švelnų perkrovimą gyvo proceso viduje. Jie neišlaiko sąsajos po sustabdymo ir nėra srauto blokavimo politika.
Sustabdžius tarnybą, sąsaja pašalinama net ir nustačius persist-tun. Tai parametras, veikiantis taip, kaip dokumentuota, o ne gedimas. Parametras aprašo vieną perkrovimo kelią veikiančiame procese, ir systemctl stop nėra tas kelias.
Perskaitykite du pavadinimus kartu ir dizainas tampa aiškus. Vienas laiko deskriptorių, kitas laiko rakto medžiagą, ir abu egzistuoja dėl to, kas nutinka atsisakius privilegijų.
Du ištekliai ir perkrovimas, kuriam jie priklauso
OpenVPN praneša apie savo perkrovimą dviejose įprastose situacijose. Aiškus SIGUSR1 tai daro, o negyvo partnerio sukeltas ping-restart daro tą patį. Abu palieka procesą gyvą ir iš naujo vykdo ryšio sąranką, ir būtent čia parametrai užsitarnauja savo vietą.
| 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 |
Tik švelnaus perkrovimo eilutė yra tai, ką keičia šie du parametrai, o darbas, kurį jie praleidžia, yra brangi dalis užimtoje linijoje. Įrenginio atidarymas iš naujo nutraukia su juo susietus adresus ir maršrutus, o jų atkūrimas gali numesti paketus, kurie buvo kelyje perkrovimo pradžioje. Sustabdymas sunaikina tuos pačius objektus be jokio parametro jiems išsaugoti.
Kodėl šie parametrai apskritai egzistuoja
Sutvirtintas OpenVPN serveris paprastai paleidžiamas kaip root, atidaro savo raktus ir įrenginį, o paskui pereina prie neprivilegijuoto naudotojo. Po to perėjimo kai kurios operacijos tiesiog dingsta. Rakto failo, kurio režimas 0600, skaitymas, tinklo sąsajos kūrimas ar maršrutų keitimas gali būti atmesti.
Be persist parametrų partneris, kuris tyli pakankamai ilgai, kad sukeltų ping-restart, priverstų būtent tas operacijas. Pakartotinis prisijungimas nepavyktų, nors konfigūracijoje niekas nepasikeitė. Procesas atrodytų mirštantis be priežasties, o žurnale būtų rodoma leidimų klaida, o ne tinklo klaida.
Su jais švelnus perkrovimas pakartotinai naudoja tai, ką privilegijuota fazė jau gavo. Jokios magijos nėra, ir procesas nieko neišgyvena. Išteklių įsigijimas tiesiog atidedamas.
Skaitykite pirmąją klaidą, ne paskutinę
Kai perkrovimas nepavyksta, skaitykite pirmąją klaidą, o ne paskutinę. Apsaugotas raktas, auth failas, sąsajos ioctl ir išorinis kabliukas yra keturi skirtingi ištekliai. Vieno išsaugojimas nieko nesako apie prieigą prie kitų. Kabliukas, kuris kviečia ugniasienės įrankį, vis dar reikalauja privilegijų, kurių tas įrankis reikalauja.
Kabliukai turi savo jungiklį. OpenVPN vadove persist parametrai susiejami su up-restart, kuris nusprendžia, ar up ir down scenarijai bus paleisti iš naujo po perkrovimo. Todėl sąsaja, kuri liko pakelta, nieko nepasako apie tai, ar jūsų resolver integracija buvo atnaujinta.
# 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
Ši komandų pora atskiria du gedimo režimus per sekundes. Sąsaja, kuri egzistuoja, bet trūksta maršrutų, yra kabliuko arba maršruto problema. Dingusi sąsaja reiškia, kad procesas tikrai baigėsi.
Išsaugota sąsaja nėra kill switch
Jei reikalavimas yra tas, kad srautas niekada neišeitų už tunelio ribų, išsaugotas įrenginys to neužtikrina. Kitos adresų šeimos maršrutai, antrasis numatytasis maršrutas ir atvejis, kai procesas visiškai išeina, lieka už parametro taikymo srities.
Tvarkykite du reikalavimus atskirai. Tunelio objekto išlaikymas tarp pakartotinių prisijungimų yra patogumas demonui. Išeigos blokavimas, kai tunelis yra žemyn, yra ugniasienės politika su savo taisyklėmis ir savo testu. Jų painiojimas sukuria konfigūraciją, kuri atrodo gynybiškai ir elgiasi kaip geriausio bandymo pakartotinis prisijungimas.
Pavadinkite įvykį prieš jį diagnozuodami. Švelnus perkrovimas, nepavykęs prisijungimo bandymas ir tarnybos sustabdymas yra trys įvykiai su trimis elgsenomis, ir tik pirmasis yra tai, ką aprašo šie parametrai.