Zaustavljanje servisa uklanja interfejs čak i sa postavljenim persist-tun. To je opcija koja radi kako je dokumentovano, a ne kvar. Opcija opisuje jednu putanju restarta unutar pokrenutog procesa, a systemctl stop nije ta putanja.

Pročitajte dva imena zajedno i dizajn postaje jasan. Jedno drži deskriptor, drugo drži materijal ključa, i oba postoje zbog onoga što se dešava nakon odbacivanja privilegija.

Dva resursa i reset kojem pripadaju

OpenVPN signalizira vlastiti restart u dvije uobičajene situacije. Eksplicitni SIGUSR1 to čini, a ping-restart koji pokrene mrtav peer čini isto. Oba ostavljaju proces živim i ponovo pokreću postavljanje veze, i tu opcije zaslužuju svoje mjesto.

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

Samo red mekog reseta je ono što ove dvije opcije mijenjaju, a posao koji preskaču je skupi dio na zauzetoj vezi. Ponovno otvaranje uređaja ruši adrese i rute vezane za njega, a njihovo ponovno izgrađivanje može ispustiti pakete koji su bili u pokretu kada je reset počeo. Zaustavljanje uništava iste objekte bez ikakve opcije da ih sačuva.

Zašto opcije uopšte postoje

Ojačani OpenVPN server obično počinje kao root, otvara svoje ključeve i svoj uređaj, a zatim prelazi na neprivilegovanog korisnika. Nakon tog prelaska neke operacije jednostavno nestaju. Čitanje ključne datoteke sa režimom 0600, stvaranje mrežnog interfejsa ili mijenjanje ruta mogu sve biti odbijeni.

Bez persist opcija, peer koji ućuti dovoljno dugo da pokrene ping-restart prisilio bi upravo te operacije. Ponovno povezivanje bi propalo iako se ništa u konfiguraciji nije promijenilo. Proces bi izgledao kao da umire bez razloga, a dnevnik bi pokazao grešku dozvola umjesto mrežne greške.

S njima, meki reset ponovo koristi ono što je privilegovana faza već dobila. Nema magije i proces ništa ne preživljava. Nabavka resursa je jednostavno odgođena.

Čitajte prvu grešku, ne posljednju

Kada reset ne uspije, čitajte prvu grešku umjesto posljednje. Zaštićeni ključ, auth datoteka, ioctl interfejsa i vanjska kuka četiri su različita resursa. Zadržavanje jednog ne govori ništa o pristupu ostalima. Kuka koja poziva alat za firewall još uvijek treba privilegije koje taj alat zahtijeva.

Kuke imaju svoj prekidač. OpenVPN priručnik uparuje persist opcije sa up-restart, koji odlučuje hoće li se up i down skripte ponovo pokrenuti nakon restarta. Interfejs koji je ostao podignut zato vam ne govori ništa o tome da li se vaša resolver integracija osvježila.

# 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

Taj par komandi razdvaja dva načina kvara u sekundama. Interfejs koji postoji uz rute koje nedostaju je problem kuke ili rute. Interfejs koji je nestao znači da je proces zaista završio.

Zadržani interfejs nije kill switch

Ako je zahtjev da saobraćaj nikada ne izađe izvan tunela, zadržani uređaj to ne isporučuje. Rute za drugu porodicu adresa, druga zadana ruta i slučaj kada proces potpuno izađe ostaju izvan dosega opcije.

Tretirajte dva zahtjeva odvojeno. Zadržavanje objekta tunela kroz ponovna povezivanja pogodnost je za daemon. Blokiranje izlaza kada je tunel pao je firewall politika sa svojim pravilima i svojim testom. Miješanje toga daje konfiguraciju koja izgleda odbrambeno, a ponaša se kao ponovno povezivanje po najboljoj mogućnosti.

Imenujte događaj prije nego ga dijagnostikujete. Meki reset, neuspjeli pokušaj povezivanja i zaustavljanje servisa tri su događaja sa tri ponašanja, a samo je prvi ono što ove opcije opisuju.

Povezani članci