PiVPN piše serversku konfiguraciju i klijentski profil, a zatim izlazi; nikada ne postaje proces koji prenosi tvoj saobraćaj. Zato se neuspjeli handshake, klijent koji bira pogrešan endpoint ili servis koji se nakon restarta vrati pogrešan ne mogu objasniti iz instalaterovih menija. Ti simptomi pripadaju onom OpenVPN daemonu koji sada radi, konfiguraciji koju je taj daemon zaista učitao i dnevniku na koji je upućen. Četiri komande samo za čitanje obično to riješe, i nijedna od njih ne mijenja tvoje certifikate ili ključeve.

Pomoćna skripta i daemon su različiti objekti

Zabunu je lako objasniti: jedan direktorij drži datoteku koju je generisala skripta, datoteku koju daemon čita, a ponekad i zastarjelu kopiju obje. Pomoćna skripta je provizijska skripta. Instalira pakete, piše unit datoteke i ispisuje klijentski profil, a zatim njen posao završava. Ono što ostaje je zapis u servisnom menadžeru i komandna linija.

Na systemd hostu počni od aktivne jedinice, a ne od popisa direktorija. Ime zavisi od pakiranja: Debian i Raspberry Pi OS slike obično izlažu instancu predloška poput openvpn-server@server, dok starije instalacije koriste openvpn@server. Pitaj menadžera koja radi, umjesto da nagađaš iz imena datoteke.

systemctl list-units --type=service --all | grep -i openvpn
systemctl cat openvpn-server@server

Pročitaj ExecStart= u tom izlazu. Navodi izvršnu datoteku i opcije koje menadžer stvarno pokreće, uključujući svaku --config putanju; konfiguracijska datoteka koja leži u blizini i na koju nijedna komanda ne upućuje nije dio tunela koji radi.

Prati lanac konfiguracije koji je daemon razriješio

OpenVPN ne skenira direktorij radi postavki. Čita datoteku proslijeđenu sa --config, slijedi sve config direktive unutar nje, a zatim primjenjuje opcije komandne linije. Priručnik 2.6 opisuje taj redoslijed, i to je važno kada se dvije datoteke ne slažu oko porta, uređaja ili šifre.

Prvo ispiši stvarni poziv, pa pogledaj direktive koje određuju identitet i dostupnost. Obje komande su samo za čitanje i sigurne na živom serveru, iako druga ispisuje putanje koje možda ne želiš u javnom tiketu.

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 u korisničkom direktoriju je klijentski artefakt. Serverski daemon je nikada ne čita, pa uređivanje te datoteke radi popravke serverskog handshake kvara ne postiže ništa.

Uključivanja su druga zamka. Linija config uvlači drugu datoteku čije se opcije obrađuju na tom mjestu, pa kasnija direktiva s jednom vrijednošću može nadjačati ono što glavna datoteka naizgled kaže. Ako vidljiva datoteka izgleda ispravno, a daemon se i dalje ponaša drugačije, pročitaj uključenu datoteku prije nego što bilo šta promijeniš.

Uskladi dnevnik s procesom, a ne s greškom koju pamtiš

Dvije odredišne lokacije za dnevnik su uobičajene, a samo jedna od njih je journal. Sa log-append postavljenim, daemon piše u tu datoteku, a journal zadržava malo osim linija pokretanja. Bez toga, journalctl je izvor događaja.

journalctl -u openvpn-server@server -n 80 --no-pager

Poveži jedan pokušaj povezivanja s jednim vremenskim prozorom. Zabilježi klijentov endpoint, pa pročitaj serverske događaje iz istih sekundi. TLS handshake koji nikada ne stigne do razmjene certifikata upućuje na dostupnost ili nesklapanje protokola, dok odbijanje autentifikacije dolazi nakon što su parametri tunela već dogovoreni.

Stari zapis u dnevniku ne dokazuje ništa o profilu koji si preuzeo prije pet minuta. Ponovo generiši klijentsku datoteku, poveži se jednom i čitaj samo linije koje su se pojavile tokom tog pokušaja.

Zabilježi prvi konkretni kvar, a ne konačni opći. Greška pri vezivanju, neodgovorena vanjska razmjena, odbijanje certifikata i odbijanje računa svaki te vode na drugi sloj, a tajmaut na kraju često skriva korisni događaj iznad njega.

Ponovna izgradnja tunela nije dijagnostički korak

Primamljiv prečac je podići drugi, jednostavniji tunel: statički ključ, bez certifikata, bez dodatne autentifikacije. Često će se povezati, a dokazuje samo da dva hosta mogu propustiti UDP ili TCP između sebe. Ne govori ništa o tome zašto certifikatima autentificirano postavljanje ne radi i tiho zamjenjuje sigurnosni model koji si trebao zadržati.

Isto važi za isključivanje tls-auth ili tls-crypt, popuštanje verify-x509-name, ili ukidanje drugog faktora da bi se dobio zeleni status. Tunel koji se povezuje jer je verifikacija uklonjena je drugi sistem, a ne popravljeni.

Napravi jednu ograničenu promjenu na sloju koji je dnevnik naveo, restartaj istu jedinicu i ponovi jedini pokušaj povezivanja. To održava poređenje iskrenim i ostavlja promjenu koju možeš poništiti.

Šta predati sljedećoj osobi

Zapiši četiri činjenice dok ih još imaš: verziju OpenVPN-a iz openvpn --version, jedinicu koja je aktivna, lanac konfiguracije s uključivanjima i vremenski prozor dnevnika koji pokriva jedan pokušaj. Te četiri pretvaraju nejasnu žalbu u ponovljiv slučaj.

Ukloni osjetljive podatke prije dijeljenja. Privatni ključevi, auth-user-pass datoteke, materijal statičkog ključa i kompletni klijentski paketi ne pripadaju u tiket; nazivi opcija i oblik lanca obično su dovoljni za drugi par očiju.

Ako je lanac netaknut i dnevnik još upućuje na mrežu, sljedeći korak je put između klijenta i servera, a ne još jedna instalacija. To je jedini dio priče koji skripta nikada nije posjedovala.

Povezani članci