OpenVPN lokalno povezivanje ne uspijeva pri podizanju: čekati ili pokušavati ponovo
Kada lokalna adresa još nije gore, OpenVPN se ne može povezati. Uporedite ograničeno čekanje s politikom ponovnog pokretanja i vidite zašto network-online.target nije garancija.
Za OpenVPN server koji se ne pokreće pri podizanju nude se dva rješenja: čekati adresu ili pustiti servis da ponavlja pokušaj dok povezivanje ne uspije. Oba rješavaju isti simptom s različitim ponašanjem pri neuspjehu. Čekanje kodira konkretan preduvjet i glasno pada kada on nedostaje; ponavljanje skriva preduvjet i nastavlja pokušavati. Koje od njih pripada vašoj jedinici zavisi od toga je li ta adresa projektovana zavisnost ili slučajnost vremena.
Oba su bolja od fiksnog spavanja, koje niti čeka bilo šta niti javlja na šta je čekalo.
Šta local opcija zapravo zahtijeva
local imenuje adresu na koju daemon vezuje svoj soket, a povezivanje na adresu koja još ne postoji odmah pada s greškom o traženoj adresi. Kada opcija nedostaje, daemon sluša na svim adresama, zato isti profil radi na mašini čiji interfejs još nije podignut: sluša svuda umjesto na jednoj adresi koju ste naveli. Ta razlika je cijeli neuspjeh i ostaje nevidljiva do ponovnog podizanja.
Zahtjev nije da je interfejs podignut u nekom općenitom smislu. Adresa mora biti dodijeljena pravom interfejsu u trenutku povezivanja i mora biti temeljni interfejs, a ne tunel koji bi isti daemon kasnije stvorio. Provjera izvršena nekoliko minuta nakon prijave ne dokazuje ništa o redoslijedu podizanja.
Čekanje adrese nasuprot ponovnom povezivanju
Čekanje znači ExecStartPre koji ispituje dok se adresa ne pojavi, s ograničenim brojem pokušaja i izlazom različitim od nule kada vrijeme istekne. Ponavljanje znači pustiti glavni proces da ne uspije i zatražiti od upravitelja servisa da ga ponovo pokrene, na primjer Restart=on-failure s RestartSec=5. Prvi prijavljuje nedostajući preduvjet kao neuspjelu jedinicu, dok ga drugi prijavljuje kao niz ponovnih pokretanja koji na kraju stane; to je bučnije u dnevniku ali preživljava adresu koja stigne kasno zbog razloga koje ne možete predvidjeti.
Preferirajte čekanje kada je adresa projektovana zavisnost, a ponavljanje kada se adresa obično pojavi ali joj vrijeme varira. Kombinovanje je razumno: ograničeno čekanje pokriva uobičajen slučaj a politika ponovnog pokretanja izuzetak. Ni jedno ne smije raditi zauvijek, jer jedinica koja beskrajno ponavlja skriva pogrešnu konfiguraciju umjesto da je prijavi.
Zašto network-online.target nije dovoljan
network-online.target obećava ono što aktivna mrežna implementacija podrazumijeva pod online, i ništa više. Uz systemd-networkd systemd-networkd-wait-online odlučuje kada je taj cilj postignut, a njegovo zadano poimanje online može biti zadovoljeno prije nego vaša konkretna adresa postoji. Pod NetworkManagerom servis wait-online primjenjuje vlastita pravila. Naručivanje poslije cilja je dobra osnova, ne garancija da je jedna adresa, DNS odgovor ili udaljeni partner spreman.
Isto rezonovanje isključuje uobičajene alternative. Stavka automatskog pokretanja na radnoj površini čeka korisničku sesiju koja se na serveru možda nikada neće otvoriti, a odgođena cron naredba dodaje proteklo vrijeme bez imenovanja resursa čijem se pojavljivanju nadala. Oba mogu mjesecima izgledati uspješno, a zatim pasti pri jedinom podizanju koje je važno.
Provjerite povezivanje nakon hladnog podizanja
Provjerite pravim hladnim podizanjem, a ne ponovnim pokretanjem servisa, jer ponovno pokretanje nasljeđuje adresu koju je redoslijed podizanja morao stvoriti. Nakon podizanja ss -lntp ili ss -lunp pokazuje lokalnu adresu na koju se svaki slušalac stvarno povezao, a journalctl -b -u openvpn-server@server pokazuje je li prvi pokušaj pao. Uporedite povezanu adresu s onom u profilu, zatim ponovite poređenje nakon ponovnog spajanja na mrežu.
Ako profil nikada nije trebao fiksnu adresu, uklanjanje local je legitimno pojednostavljenje, ali neka to bude sigurnosna odluka, a ne navika rješavanja problema.
Proširivanje slušaoca mijenja ko do njega može doći, zato tu promjenu uparite s politikom firewall-a koja ga je trebala ograničavati. Servis koji se pouzdano pokreće na svakom interfejsu nije riješio izvorni problem; premjestio je problem na mrežnu ivicu.