Preverite tunel, zaženete systemctl status openvpn in dobite active (exited) brez Main PID in s praznim seznamom procesov. Naravno branje je, da se je storitev zagnala in umrla, zato odprete unit, najdete /bin/true in sklepate, da je paket pokvarjen. V paketu Debian je to stanje wrapper, ki dela po načrtu, tunel pa živi v eni od instančnih enot, ki jih zažene. Skupna enota vam nikoli ne bo povedala, katera instanca jo je zgradila.

Kaj active (exited) na tej enoti v resnici pomeni

Zapakirana enota je enkratna naloga: njen ExecStart je /bin/true, RemainAfterExit=yes pa je tisto, kar drži končano enoto prijavljeno kot active (exited). Odstranite to direktivo in ista uspešna naloga /bin/true konča v inactive (dead), kar je natanko stanje, ki ga ljudje pričakujejo in v nasprotni smeri berejo napačno. Ukaz je le nadomestek, enota pa poroča o delu, ki ga opravljajo druge enote. V tej ureditvi ni nič pokvarjeno, zamenjava /bin/true pa spremeni pogodbo pakiranja, ne tunela.

Wrapper delegira. Zažene instančne enote, ki jih priskrbi konfiguracija paketa ali njen generator systemd, zato prazen seznam procesov o tunelu ne dokaže ničesar. Ko ni izbrana nobena instanca, wrapper vseeno uspe in vseeno ne zažene ničesar. Stanje odgovarja, ali je wrapper tekel, ne ali tunel obstaja.

Preberite tri vrstice izhoda status, ne besede v oklepaju. Loaded poimenuje datoteko enote, ki jo je prebral systemd, Active nosi časovni žig zadnjega uspešnega zagona, odsotni Main PID pa ustreza končani enkratni nalogi. Te tri vrstice so tudi način, kako ta wrapper ločite od storitve, ki je padla sekundo po zagonu.

Naštejte enote, preden znova preberete status

Vprašajte systemd, kaj obstaja, preden vprašate, kaj teče. Predloga je lahko nameščena, medtem ko ni ustvarjena nobena instanca, in tunel nosi le ustvarjena enota. Začnite z naloženim naborom:

systemctl list-units 'openvpn*'

Ta seznam je tisto, kar je systemd naložil v tem trenutku, in je najbližje popisu tunelov. Nameščene datoteke enot odgovarjajo na drugo vprašanje, ta seznam pa še vedno kaže predlogo, ko ni ustvarjeno nič:

systemctl list-unit-files 'openvpn*'

Preberite oba seznama skupaj, ker sta predloga v drugem in instanca v prvem dva različna odgovora. Obstoječa predloga in delujoča instanca nista isto dejstvo in le drugo pomeni tunel. Postavitve paketov se razlikujejo tudi med distribucijami in različicami OpenVPN. Starejša predloga openvpn@, ločen par client in server ter distribucijski wrapper so lahko vsi legitimni v lastnem pakiranju.

Prilagodite se svojemu stroju, ne vadnici, ki ste jo našli. Ime instance v izhodu nekoga drugega je lahko office, medtem ko je vaše home ali work. Prenese se metoda, ne niz.

Sledite imenu instance do datoteke, ki jo bere

V upstream predlogi client je delovna mapa enote /etc/openvpn/client in njen ukaz od tam vzame %i.conf, zato openvpn-client@office bere /etc/openvpn/client/office.conf. Potrdite to preslikavo na nameščeni enoti, namesto da zaupate primeru, ker je vaša predloga lahko starejša ali distribucijsko prepisana:

systemctl cat [email protected]

Preberite drop-in datoteke, ki se pojavijo na dnu tega izhoda, ker lahko datoteka pod .d/ spremeni ExecStart, delovno mapo ali pot do konfiguracije. Profil, ki ste ga prenesli kot office.ovpn, ni datoteka, ki jo instanca odpre. Ta vrzel je običajen razlog, da napaka navede pot, ki je nikoli niste uredili.

Relativne poti znotraj profila so naslednja past. Premik glavne datoteke, medtem ko reference ca, cert in key ostanejo relativne, zamenja napako manjkajoče datoteke z drugo napako manjkajoče datoteke. Druga kaže na datoteko, za katero ste bili prepričani, da obstaja, zato je mapa profila pomembnejša od imena datoteke.

Zaženite jo in nato preberite dnevnik te instance

Zaženite instanco, ki ste jo pravkar pregledali, ker dnevnik skupne enote ne bo vseboval napak tunela. Nato preberite dnevnik tega zagona in v tem vrstnem redu iščite napako konfiguracije, napako dostopa do datoteke in napako povezave, ker vsaka odpove v drugi fazi zagona.

sudo systemctl start [email protected]
journalctl -u [email protected] -b

Zagon in omogočanje sta ločeni odločitvi: start izvede enoto zdaj, enable uredi naslednji zagon, enable --now pa naredi oboje v enem koraku. daemon-reload znova prebere definicije enot in ne znova zažene tekočega procesa niti ne uporabi urejenega profila. Po spremembi profila znova zaženite instanco, ker to znova prebere datoteko.

Na isti tunel ne postavljajte drugega upravitelja

NetworkManager in upravitelji sej OpenVPN 3 imajo svoje stanje povezave, instanca systemd ob enem od njih pa na isti tunel postavi dva lastnika. Simptom je tunel, ki se dvigne in je nekaj sekund pozneje zamenjan, ali tak, ki noče ostati ustavljen. Izberite upravitelja, ki ga vaša distribucija dokumentira za namizje, in na strežniku zavestno uporabite systemd.

Pred zagonom instance preverite, ali že obstaja lastnik. Ko namizni applet prikaže povezavo, instanca, ki jo zaženete, tekmuje z njim, namesto da bi ga dopolnila. Onemogočite upravitelja, ki ga ne uporabljate, namesto da bi pognali oba in upali, da bo vrstni red zdržal. Ta konflikt pojasnjuje tudi dnevnike, v katerih se tunel vzpostavi in nato poruši s procesom, ki ga nikoli niste zagnali.

Odgovorite na prvotno vprašanje z imenom instance, datoteko, ki jo je prebrala, in vrstico dnevnika, ki je spodletela. Opombe OpenVPN o integraciji s systemd opisujejo postavitev predloge in preslikavo datoteke, prek katere se razreši ime instance.

Sorodni članki