Feil i OpenVPN 3 Linux kjem inn som ein D-Bus-metodefeil med eit ukjent namn på, og freistinga er å nedgradere ein pakke og håpe. Klienten er ikkje eitt program: ein frontend på kommandolinja snakkar over bussen med tenester som eig profilar, sesjonar, VPN-motoren og dei privilegerte nettverksendringane. Å avgjere kva av dei fem som eig det feilande kallet er det meste av diagnosen, og det kostar éin kommando i staden for ein tilbakerulling. Det som følgjer er den avgjerda, i den rekkjefølgja feila vanlegvis dukkar opp.

Fem eigarar bak éin kommando

Fem prosessar tyder noko, og kvar har sitt eige busnamn: frontenden som tek imot kommandoen din, konfigurasjonshandsamaren som lagrar profilar og tilgangspolitikken deira, sesjonshandsamaren som eig levetida til sesjonen, backenden som køyrer tilkoplinga gjennom OpenVPN 3 Core Engine, og nettverkskonfigurasjonstenesta som installerer grensesnittet, rutene og DNS-innstillingane. Ein feil som nemner eit konfigurasjonsobjekt er derfor ikkje ein backend-feil, og ein backend som ikkje startar er ikkje ein autentiseringsfeil. Å sortere meldinga inn i ei av dei radene må skje før noko blir endra, fordi kvart seinare steg avheng av kva rad som er sann. Å gisse på rada er måten ein kort retting blir ein ettermiddag med pakkearbeid.

Spør systembussen kva tenester som finst før du spør om noko anna, og stadfest så at dei installerte delane er samde om éin versjon. OpenVPN 3 Linux registrerer desse tenestene som systemeiningar, så bussen å spørje er systembussen, versjonsspørjinga krev administrativ mynd, og ei liste laga med --user les innloggingssesjonen din, der einingane aldri dukkar opp. Tenester aktiverer seg ved behov og nokre avsluttar når dei er ledige, så ei teneste som manglar før den første førespurnaden din har rett og slett ikkje blitt spurd om noko enno. Dei tre kommandoane nedanfor svarar på tilstadevære, versjon og einingsstatus utan å opne ein VPN-sesjon.

sudo busctl list | grep -i openvpn
sudo openvpn3-admin version --services
systemctl list-units 'openvpn3*'

Kva kvar liste faktisk provar

Dei eigne visingane til klienten er det billegaste beviset som finst, og kvar av dei provar mindre enn det ser ut som. Ein profil i konfigurasjonslista viser at ein profil er importert og ingenting om kven som får kople til med han. Ein sesjon i sesjonslista viser at eit sesjonsobjekt finst og ingenting om fjernautentiseringa blei fullført.

openvpn3 configs-list
openvpn3 sessions-list

Objektstigar i dei utskriftene angir styrte objekt på bussen og ikkje filer, så dei kan ikkje redigerast, og ein stig som blei notert tidlegare blir utdatert i det augneblinken den sesjonen koplar frå. Å bruke ein av dei om igjen frå notata dine gir "no such object"-feil som ikkje har noko med VPN-en å gjere. Stadiumtabellen nedanfor skil kva kvart steg i ei tilkopling etablerer frå kva det lèt stå ope, og det er nettopp den skilnaden ein tilbakerullingsavgjerd kviler på. Les rada som passar til beviset ditt, og les så feilteksten om att.

StageWhat existsWhat proves itWhat it does not prove
Profile importedA configuration object held by the configuration managerThe profile is listed by the clientThat the profile owner permits a connection
Session requestedA session object held by the session managerThe session appears in the session listThat the remote side accepted the credentials
Connect dispatchedAn asynchronous attempt on the VPN backendStatus changes arrive for that sessionThat an interface was configured
Tunnel configuredAn interface, routes and DNS settingsThe network service reports success and routes appearThat traffic reaches the peer

Tilkoplingskallet kjem tilbake før tunnelen finst

Tilkoplingskallet gir deg ein sesjon å følgje med på og kjem tilbake, og derfor er eit tilsynelatande vellukka kall følgt av stille eit normalt mellomstadium og ikkje ei motseiing. Frontenden må framleis følgje statusendringar og svare på kvar førespurnad om samhandling. Ein profil som treng ein legg og ikkje får noko svar ventar i ein tilstand som ser nøyaktig ut som ein hengd backend. Den ventetilstanden fortener å bli kjend att, fordi han sender folk til feil komponent.

Medan eit forsøk går, følg med på sesjonslista og den eigen loggen til frontenden for den profilen. Ein sesjon som aldri forlèt starttilstanden sin namngir komponenten som stoppa, og loggen namngir han vanlegvis innan dei første linjene. Hald profilnamnet ved handa, sidan loggkommandoen tek ein profil og ikkje ein sesjonssti, noko som er ein grunn til å lese lista på nytt i staden for å bruke ein sti om igjen.

openvpn3 sessions-list
openvpn3 log --config <profile> --level 6

Å lese loggen til éin komponent utan å opne ein sesjon

Når frontenden ikkje rapporterer noko nyttig, gå til komponenten som logga feilen i staden for å starte ei ny tilkopling. Med ein konfigurert systemd-journald-loggar les den avgrensa journalvisinga til administratoren hendingane til éin komponent utan å røre buspolitikken eller opne ein sesjon, noko som betyr noko fordi ein diagnose som endrar systemet han måler provar svært lite. Filtrer på eining og ikkje på syslog-tagg: dei einskilde tenesteeiningane garanterer ingen felles identifikator, så ein taggspørjing kan gi ei tom side medan eininga sjølv registrerte feilen.

Noter fire felt før du ber nokon om hjelp: det fulle feilnamnet, tenesta og objektet som er involvert, tidsstempelet og dei installerte pakkeversjonane. Det er det ein vedlikehaldar treng, og ingen av dei krev at du limer inn ein profil eller ein legg i ein sak. Å utvide busstilgangspolitikken for å få feilen til å teie er ingen diagnose, det slettar grensa som namngav komponenten for deg. Privat profilinnhald held seg utanfor delte rapportar av same grunn som legg.

journalctl -u 'openvpn3-service-*' -n 50 --no-pager
openvpn3-admin journal --service <name>

Å rette grensa som nekta

Kvar rad i kartet har si eiga retting, og radene erstattar ikkje kvarandre. Ein avvist operasjon på ein profil er eit spørsmål om politikk og eigarskap, medan ein backend som ikkje aktiverer er eit spørsmål om tenester og pakking. Ein tenar som avviser autentisering er ingen av delane, så gjentekne passordbytte kan ikkje reparere eit lokalt aktiveringsproblem. Å velje feil retting er måten eit politikkproblem blir ein reinstallasjon.

Etter ei pakkeendring, stadfest ein samanhengande og støtta installasjon i staden for å kopiere ein gammal binærfil på plass. Ei kontrollert tilbakerulling er eit legitimt svar på ein stadfesta regresjon, føresett at pakkane held seg kompatible og at det finst ein veg tilbake til støtta vedlikehald. Etabler den vegen før tenesta sluttar å starte, ikkje etterpå.

Ein annan plattform kan dele det same VPN-kjernelbiblioteket utan å dele busstenestene til Linux, så ein liknande feil på Windows seier ingenting om denne. D-Bus-oversynet dokumenterer objektstigane som blir eksponerte for konfigurasjonar og sesjonar, og det er den delen av arkitekturen denne diagnosen kviler på. Les det éin gong, og den neste feilen kjem med ein komponent allereie fest til seg.

Relaterte artiklar