Naredba se vraća, servis se prikazuje kao neuspješan, a u terminal ne stiže ništa što bi ličilo na objašnjenje. Ta tišina je simptom koji ljudi opisuju kao „OpenVPN se ne pokreće“, i gotovo nikada ne znači da je program umro a da nije rekao ništa. Znači da je poruka otišla u kanal koji niste čitali ili da ono što ste pokrenuli nije bilo ono što ste konfigurisali. Oba slučaja se mogu dijagnostikovati za manje od minute kada prestanete da smatrate profil osumnjičenim.

Četiri mjesta upijaju izlaz: journal jedinice, dodatak koji posjeduje vezu, drugi kraj tunela i druga binarna datoteka od one koju mislite da se izvršava. Svako ima svoju provjeru.

Tišina znači da niste gledali pravi kanal

Poziv u prvom planu ispisuje u vaš terminal. Jedinica ispisuje u journal, a neuspješna jedinica može izaći prije nego što išta napiše ako je kvar u načinu na koji je pokrenuta, a ne u onome što joj je rečeno. Ta razlika je važna: nema unosa u journalu znači da proces nikada zapravo nije radio, dok jedan unos praćen izlazom znači da je radio i nešto odbio.

systemctl status openvpn-client@office
journalctl -u openvpn-client@office -b --no-pager

Dodajte systemctl show -p Result -p ExecMainStatus openvpn-client@office da odvojite čist izlaz od signala. Status 1 sa Result=exit-code je odluka programa; Result=signal ili tajmaut upućuju na okruženje, i nikakvo uređivanje profila to neće promijeniti. Zabilježite obje vrijednosti prije nego što bilo šta restartujete, jer restart briše prolazno stanje koje ih je proizvelo.

Naziv instance je dio putanje

Pakirana šablonska jedinica ne prima putanju datoteke. Prima naziv instance, a taj naziv se dodaje direktorijumu da bi se pronašao profil: office se razrješava u /etc/openvpn/client/office.conf u Debian i Ubuntu paketima. Datoteka pod nazivom office-v2.conf pokrenuta kao @office nikada se ne čita, i jedinica tiho izlazi jer sa njene tačke gledišta nije bilo šta raditi. Direktorijum za pretragu razlikuje se između klijentskog i serverskog režima, pa ista greška upućuje na sasvim drugo mjesto kada promijenite šablon.

To neslaganje je najčešći izvor tihe greške i nevidljivo je u profilu jer je profil ispravan. Popišite šta zapravo postoji i uporedite dva naziva znak po znak, uključujući svako proširenje koje paket očekuje.

ls -l /etc/openvpn/client/
systemctl list-units 'openvpn*' --all

Ako je jedinica omogućena ali nijedna instanca nije navedena, samo omogućavanje može upućivati na naziv koji je kasnije preimenovan. Ponovno omogućavanje ispravne instance obično je dovoljno, a stara zaostala datoteka jedinice vrijedi izbrisati da ne zbunjuje sljedeću osobu. Zaostala datoteka jedinice je sitnica koja nekoga kasnije košta sat vremena.

Kada dodatak posjeduje tunel, terminal ne vidi ništa

Vezu pokrenutu iz desktop apleta posjeduje NetworkManager, a njen OpenVPN izlaz ide u journal te usluge, a ne u bilo koji shell koji imate otvoren. Ručno pokretanje klijenta bez ikakvog izlaza očekivano je u tom rasporedu, jer ručno pokrenuti proces nije onaj koji nosi vezu.

Pretražite journal za uslugom koja ga posjeduje, zatim reprodukujte parsiranje sa opširnošću koju možete čitati. Dvije naredbe ispod gledaju različite vlasnike iste greške.

journalctl -b -u NetworkManager --no-pager | grep -i -A3 openvpn
openvpn --config /etc/openvpn/client/office.conf --verb 4 --log /tmp/ovpn.log

Samostalno pokretanje služi za čitanje poruka, ne za zamjenu upravljane veze, i njih dvoje se poslije razlikuju: DNS integracija, rute i životni vijek pripadaju dodatku. Ispravljanje greške parsiranja u samostalnom pokretanju ne ispravlja automatski razrješavanje naziva kada aplet preuzme, pa držite dva zapažanja odvojeno.

Dvije binarne datoteke, jedan PATH

Ručno izgrađena instalacija pod /usr/local pobjeđuje pri pozivu iz shell-a, jer /usr/local/sbin dolazi prije /usr/sbin na zadatom Ubuntu PATH-u. Jedinica ne koristi vaš PATH; ona izvršava apsolutnu putanju upisanu u ExecStart. Zato verzija koja radi u vašem terminalu i verzija koja pada kao servis mogu biti stvarno različiti programi.

Uporedite njih dvije prije nego što bilo šta ponovo izgradite. Treća naredba je ta koja odlučuje argument.

command -v openvpn
whereis openvpn
systemctl cat openvpn-client@office | grep ExecStart

Još jedna razlika u okruženju krije se na istom mjestu. Pakirana jedinica se oslanja na direktorijum za vrijeme izvršavanja pod /run koji systemd stvara za nju; ručno napisana zamjenska jedinica koja izostavlja tu postavku može pasti prije nego što otvori ijednu datoteku, a kvar izgleda kao opći odbij bez ikakve OpenVPN poruke.

Kvarovi koje klijent ne može prijaviti

Neki ishodi se odlučuju na dalekom kraju. Gejtvej koji odgovori HTTP statusom i zatvori vezu rekao vam je o svom stanju, a koristan sljedeći korak je njegov log ili račun iza podataka za prijavu, a ne vaše lokalne datoteke. Ništa lokalno nije pokvareno u tom scenariju, a uređivanje profila radi kompenzacije čini sljedeću dijagnozu težom. Pročitajte taj log prije nego što dirnete konfiguraciju klijenta.

Drugi tihi slučaj je klijent koji radi ispravno. Tunel u klijentskom režimu nikada ne sluša na portu, pa provjera koja očekuje otvorenog slušaoca neće prijaviti ništa i izgledat će kao kvar. Potvrdite koji ste režim pokrenuli prije nego što izvedete zaključak iz prazne liste portova.

Radite slojeve po redu: postoji li jedinica i je li naziv instance ispravan, je li išta stiglo u journal ili u --log datoteku, koja binarna datoteka i profil su zapravo radili, i je li kvar lokalni ili udaljen. Svaki odgovor uklanja sloj. Počinjati od profila znači prepisivati datoteku koja možda nikada nije otvorena.

Povezani članci