Halto de la servo forigas la interfacon eĉ kun persist-tun agordita. Tio estas la opcio funkcianta kiel dokumentite, ne malsukceso. La opcio priskribas unu restartigan vojon ene de kuranta procezo, kaj systemctl stop ne estas tiu vojo.

Legu la du nomojn kune kaj la dezajno klariĝas. Unu tenas priskribilon, la alia tenas ŝlosilmaterialon, kaj ambaŭ ekzistas pro tio, kio okazas post la demeto de privilegioj.

La du resursoj kaj la restartigo al kiu ili apartenas

OpenVPN signalas sian propran restartigon en du ordinaraj situacioj. Klara SIGUSR1 faras tion, kaj ping-restart kaŭzita de mortinta samtavolo faras la samon. Ambaŭ lasas la procezon viva kaj reruligas la konektan agordon, kaj tie la opcioj gajnas sian lokon.

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

Nur la vico de mola restartigo estas tio, kion ŝanĝas ĉi tiuj du opcioj, kaj la laboro kiun ili preterpasas estas la multekosta parto sur okupata ligilo. Malfermi aparaton denove disŝiras la adresojn kaj itinerojn ligitajn al ĝi, kaj rekonstrui ilin povas perdi pakaĵojn kiuj estis survoje kiam la restartigo komenciĝis. Halto detruas la samajn objektojn sen ia opcio konservi ilin.

Kial la opcioj entute ekzistas

Hardita OpenVPN-servilo kutime startas kiel root, malfermas siajn ŝlosilojn kaj sian aparaton, poste transiras al senprivilegia uzanto. Post tiu transiro kelkaj operacioj simple malaperas. Legi ŝlosildosieron kun reĝimo 0600, krei retinterfacon aŭ ŝanĝi itinerojn povas ĉiuj esti rifuzitaj.

Sen la persist-opcioj, samtavolo kiu silentas sufiĉe longe por ekigi ping-restart devigus ĝuste tiujn operaciojn. La rekonekto malsukcesus eĉ se nenio en la agordo estis ŝanĝiĝinta. La procezo ŝajnus morti sen kaŭzo, kaj la protokolo montrus permesan eraron anstataŭ retan eraron.

Kun ili, la mola restartigo reuzas tion, kion la privilegia fazo jam akiris. Neniu magio estas en ludo kaj la procezo travivas nenion. Akiro de resursoj estas simple prokrastita.

Legu la unuan eraron, ne la lastan

Kiam restartigo malsukcesas, legu la unuan eraron anstataŭ la lastan. Protektita ŝlosilo, auth-dosiero, interfaca ioctl kaj ekstera hoko estas kvar malsamaj resursoj. Teni unu diras nenion pri aliro al la aliaj. Hoko kiu vokas fajroŝirmilan ilon ankoraŭ bezonas la privilegiojn kiujn tiu ilo postulas.

Hokoj havas sian propran ŝaltilon. La OpenVPN-manlibro parigas la persist-opciojn kun up-restart, kiu decidas ĉu la skriptoj up kaj down ruliĝos denove post restartigo. Interfaco kiu restis supre do diras al vi nenion pri tio, ĉu via solvila integriĝo refreŝiĝis.

# 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

Tiu paro da komandoj apartigas la du malsukcesajn reĝimojn en sekundoj. Interfaco kiu ĉeestas kun mankantaj itineroj estas hoka aŭ itinera problemo. Interfaco kiu malaperis signifas ke la procezo vere finiĝis.

Konservita interfaco ne estas kill switch

Se la postulo estas ke trafiko neniam eliru ekster la tunelon, konservita aparato tion ne donas. Itineroj por la alia adresa familio, dua defaŭlta itinero kaj la kazo kiam la procezo tute eliras restas ĉiuj ekster la amplekso de la opcio.

Traktu la du postulojn aparte. Teni la tunelan objekton trans rekonektoj estas komforto por la demono. Bloki eliron kiam la tunelo estas malaktiva estas fajroŝirmila politiko kun propraj reguloj kaj propra testo. Kunfandi ilin produktas agordon kiu aspektas defenda kaj kondutas kiel rekonekto laŭ plej bona peno.

Nomu la eventon antaŭ ol diagnozi ĝin. Mola restartigo, malsukcesa konekta provo kaj halto de la servo estas tri eventoj kun tri kondutoj, kaj nur la unua estas tio, kion priskribas ĉi tiuj opcioj.

Rilataj artikoloj