Katera instanca OpenVPN pravzaprav uporablja tvoj profil PiVPN?
Pomočnik PiVPN zapiše datoteke in se konča. Pred ponovno gradnjo tunela spremljaj enoto systemd, naloženo konfiguracijsko verigo in pravi dnevnik.
PiVPN zapiše strežniško konfiguracijo in profil odjemalca, nato se konča; nikoli ne postane proces, ki prenaša tvoj promet. Zato neuspešnega rokovanja, odjemalca, ki kliče napačno končno točko, ali storitve, ki se po ponovnem zagonu vrne napačno, ni mogoče razložiti z meniji namestitvenega programa. Ti simptomi pripadajo tistemu demonu OpenVPN, ki zdaj teče, konfiguraciji, ki jo je ta demon dejansko naložil, in dnevniku, na katerega je bil usmerjen. Štirje ukazi samo za branje to običajno razrešijo in noben od njih ne spremeni tvojih potrdil ali ključev.
Pomočnik in demon sta različna objekta
Zmedo je lahko razložiti: ena mapa vsebuje datoteko, ki jo je ustvaril pomočnik, datoteko, ki jo bere demon, in včasih zastarelo kopijo obeh. Pomočnik je zagonska skripta. Namesti pakete, zapiše datoteke enot in natisne profil odjemalca, nato pa je njegovo delo končano. Kar ostane, je vnos v upravitelju storitev in ukazna vrstica.
Na gostitelju systemd začni pri aktivni enoti namesto pri seznamu mape. Ime je odvisno od pakiranja: slike Debian in Raspberry Pi OS običajno ponujajo predlogo instance, kot je openvpn-server@server, medtem ko starejše namestitve uporabljajo openvpn@server. Vprašaj upravitelja, katera teče, namesto da bi ugibal iz imena datoteke.
systemctl list-units --type=service --all | grep -i openvpn
systemctl cat openvpn-server@server
Preberi ExecStart= v tem izpisu. Navaja izvršljivo datoteko in možnosti, ki jih upravitelj dejansko zažene, vključno z vsako --config potjo; konfiguracijska datoteka ob njej, na katero ne kaže noben ukaz, ni del delujočega tunela.
Sledi konfiguracijski verigi, ki jo je razrešil demon
OpenVPN ne pregleduje mape za nastavitvami. Bere datoteko, posredovano z --config, sledi vsaki config direktivi v njej in nato uporabi možnosti ukazne vrstice. Priročnik 2.6 opisuje ta vrstni red in to je pomembno, ko se dve datoteki ne strinjata glede vrat, naprave ali šifre.
Najprej izpiši dejanski klic, nato poglej direktive, ki določajo identiteto in dosegljivost. Oba ukaza sta samo za branje in varna na živem strežniku, čeprav drugi izpiše poti, ki jih morda ne želiš v javni zahtevi.
systemctl show -p ExecStart --value openvpn-server@server
grep -E '^(config|dev|proto|port|local|log|log-append|status|ca|cert|key|tls-auth|tls-crypt)' /etc/openvpn/server/server.conf
Datoteka .ovpn v domači mapi je artefakt odjemalca. Strežniški demon je nikoli ne bere, zato urejanje te datoteke za odpravo napake rokovanja na strežniški strani ne doseže ničesar.
Vključitve so druga past. Vrstica config potegne drugo datoteko, katere možnosti se obdelajo na tej točki, zato lahko poznejša direktiva z eno vrednostjo preglasi tisto, kar glavna datoteka očitno pravi. Če je vidna datoteka videti pravilna, demon pa se še vedno obnaša drugače, preberi vključeno datoteko, preden kar koli spremeniš.
Dnevnik poveži s procesom, ne z napako, ki se je spomniš
Dve dnevniški destinaciji sta običajni in le ena od njiju je journal. Z log-append demon piše v to datoteko, journal pa obdrži malo razen začetnih vrstic. Brez tega je journalctl vir dogodkov.
journalctl -u openvpn-server@server -n 80 --no-pager
Poveži en poskus povezave z enim časovnim oknom. Zabeleži končno točko odjemalca in nato beri dogodke strežnika iz istih sekund. Rokovanje TLS, ki nikoli ne doseže izmenjave potrdil, kaže na dosegljivost ali neujemanje protokola, medtem ko zavrnitev preverjanja pristnosti pride po tem, ko so parametri tunela že dogovorjeni.
Stara dnevniška vrstica ne dokazuje ničesar o profilu, ki si ga prenesel pred petimi minutami. Znova ustvari odjemalsko datoteko, poveži se enkrat in beri le vrstice, ki so se pojavile med tem poskusom.
Zabeleži prvo konkretno napako, ne zadnje splošne. Napaka pri vezavi, neodgovorjena zunanja izmenjava, zavrnitev potrdila in zavrnitev računa te vsaka pošljejo v drugo raven, časovna omejitev na koncu pa pogosto skrije koristen dogodek nad njo.
Ponovna gradnja tunela ni diagnostični korak
Vabljiva bližnjica je postaviti drugi, preprostejši tunel: statični ključ, brez potrdil, brez dodatnega preverjanja pristnosti. Pogosto se bo povezal in dokazuje le, da lahko dva gostitelja med seboj prepustita UDP ali TCP. Ne pove ničesar o tem, zakaj uvajanje s potrdili ne uspe, in tiho nadomesti varnostni model, ki bi ga moral obdržati.
Enako velja za izklop tls-auth ali tls-crypt, popuščanje verify-x509-name, ali opustitev drugega dejavnika za zelen status. Tunel, ki se poveže, ker je bilo preverjanje odstranjeno, je drug sistem, ne popravljen.
Naredi eno omejeno spremembo v plasti, ki jo je dnevnik imenoval, znova zaženi isto enoto in ponovi en sam poskus povezave. To ohrani primerjavo pošteno in pusti spremembo, ki jo lahko razveljaviš.
Kaj predati naslednji osebi
Zapiši štiri dejstva, dokler jih imaš: različico OpenVPN iz openvpn --version, aktivno enoto, konfiguracijsko verigo z vključitvami in dnevniško okno, ki pokriva en poskus. Ta štiri spremenijo nejasno pritožbo v ponovljiv primer.
Pred deljenjem prečisti. Zasebni ključi, auth-user-pass datoteke, material statičnega ključa in celotni odjemalski paketi ne spadajo v zahtevo; imena možnosti in oblika verige običajno zadostujejo za drug par oči.
Če je veriga nedotaknjena in dnevnik še vedno kaže na omrežje, je naslednji korak pot med odjemalcem in strežnikom namesto še ene namestitve. To je edini del zgodbe, ki ga pomočnik nikoli ni imel.