OpenVPN 3 Linux: les en D-Bus-feil før du ruller tilbake
Fem tjenester, én frontend. Knytt en D-Bus-feil til komponenten som avviste den, sjekk om det finnes en sesjon, og rett deretter ved den grensen.
Feil i OpenVPN 3 Linux kommer inn som en D-Bus-metodefeil med et ukjent navn på, og fristelsen er å nedgradere en pakke og håpe. Klienten er ikke ett program: en frontend på kommandolinjen snakker over bussen med tjenester som eier profiler, sesjoner, VPN-motoren og de privilegerte nettverksendringene. Å avgjøre hvilken av de fem som eier det feilende kallet er det meste av diagnosen, og det koster én kommando i stedet for en tilbakerulling. Det som følger er den beslutningen, i den rekkefølgen feilene vanligvis dukker opp.
Fem eiere bak én kommando
Fem prosesser betyr noe, og hver har sitt eget busnavn: frontenden som tar imot kommandoen din, konfigurasjonsbehandleren som lagrer profiler og tilgangspolicyen deres, sesjonsbehandleren som eier sesjonens levetid, backenden som kjører tilkoblingen gjennom OpenVPN 3 Core Engine, og nettverkskonfigurasjonstjenesten som installerer grensesnittet, rutene og DNS-innstillingene. En feil som nevner et konfigurasjonsobjekt er derfor ikke en backend-feil, og en backend som ikke starter er ikke en autentiseringsfeil. Å sortere meldingen inn i en av de radene må skje før noe endres, fordi hvert senere steg avhenger av hvilken rad som er sann. Å gjette på raden er hvordan en kort rettelse blir en ettermiddag med pakkearbeid.
Spør systembussen hvilke tjenester som finnes før du spør om noe annet, og bekreft deretter at de installerte delene er enige om én versjon. OpenVPN 3 Linux registrerer disse tjenestene som systemenheter, så bussen å spørre er systembussen, versjonsspørringen krever administrative rettigheter, og en liste laget med --user leser innloggingssesjonen din, der enhetene aldri dukker opp. Tjenester aktiveres ved behov og noen avslutter når de er ledige, så en tjeneste som mangler før din første forespørsel har rett og slett ikke blitt spurt om noe ennå. De tre kommandoene nedenfor besvarer tilstedeværelse, versjon og enhetsstatus uten å åpne en VPN-sesjon.
sudo busctl list | grep -i openvpn
sudo openvpn3-admin version --services
systemctl list-units 'openvpn3*'Hva hver liste faktisk beviser
Klientens egne visninger er det billigste beviset som finnes, og hver av dem beviser mindre enn det ser ut som. En profil i konfigurasjonslisten viser at en profil er importert og ingenting om hvorvidt noen får koble til med den. En sesjon i sesjonslisten viser at et sesjonsobjekt finnes og ingenting om hvorvidt fjernautentiseringen ble fullført.
openvpn3 configs-list
openvpn3 sessions-listObjektstier i den utskriften angir administrerte objekter på bussen og ikke filer, så de kan ikke redigeres, og en sti som ble notert tidligere blir utdatert i det øyeblikket den sesjonen kobles fra. Å gjenbruke en fra notatene dine gir "no such object"-feil som ikke har noe med VPN å gjøre. Stadiumtabellen nedenfor skiller hva hvert steg i en tilkobling etablerer fra hva det lar stå åpent, og det er nettopp den forskjellen en tilbakerullingsbeslutning hviler på. Les raden som passer til beviset ditt, og les så feilteksten igjen.
| Stage | What exists | What proves it | What it does not prove |
|---|---|---|---|
| Profile imported | A configuration object held by the configuration manager | The profile is listed by the client | That the profile owner permits a connection |
| Session requested | A session object held by the session manager | The session appears in the session list | That the remote side accepted the credentials |
| Connect dispatched | An asynchronous attempt on the VPN backend | Status changes arrive for that session | That an interface was configured |
| Tunnel configured | An interface, routes and DNS settings | The network service reports success and routes appear | That traffic reaches the peer |
Tilkoblingskallet returnerer før tunnelen finnes
Tilkoblingskallet gir deg en sesjon å følge og returnerer, og derfor er et tilsynelatende vellykket kall etterfulgt av stillhet en normal mellomtilstand og ikke en motsigelse. Frontenden må fortsatt følge statusendringer og svare på enhver forespørsel om interaksjon. En profil som trenger en legitimasjon og ikke får noe svar venter i en tilstand som ser nøyaktig ut som en hengt backend. Den ventetilstanden fortjener gjenkjennelse, fordi den sender folk til feil komponent.
Mens et forsøk kjører, hold øye med sesjonslisten og frontendens egen logg for den profilen. En sesjon som aldri forlater starttilstanden navngir komponenten som stoppet, og loggen navngir den vanligvis innen de første linjene. Ha profilnavnet for hånden, siden loggkommandoen tar en profil og ikke en sesjonssti, som er en grunn til å lese listen på nytt i stedet for å gjenbruke en sti.
openvpn3 sessions-list
openvpn3 log --config <profile> --level 6Å lese én komponents logg uten å åpne en sesjon
Når frontenden ikke rapporterer noe nyttig, gå til komponenten som loggførte feilen i stedet for å starte en ny tilkobling. Med en konfigurert systemd-journald-logger leser administratorens avgrensede journalvisning én komponents hendelser uten å røre buspolicyen eller åpne en sesjon, noe som betyr noe fordi en diagnose som endrer systemet den måler beviser svært lite. Filtrer på enhet i stedet for på syslog-tagg: de enkelte tjenesteenhetene garanterer ingen felles identifikator, så en taggspørring kan gi en tom side mens enheten selv registrerte feilen.
Noter fire felt før du ber noen om hjelp: det fulle feilnavnet, tjenesten og objektet som er involvert, tidsstempelet og de installerte pakkeversjonene. Det er det en vedlikeholder trenger, og ingen av dem krever at du limer inn en profil eller en legitimasjon i en sak. Å utvide busstilgangspolicyen for å få feilen til å tie er ingen diagnose, det sletter grensen som navnga komponenten for deg. Privat profilinnhold holdes utenfor delte rapporter av samme grunn som legitimasjoner.
journalctl -u 'openvpn3-service-*' -n 50 --no-pager
openvpn3-admin journal --service <name>Å rette grensen som avviste
Hver rad i kartet har sin egen rettelse, og radene erstatter ikke hverandre. En avvist operasjon på en profil er et spørsmål om policy og eierskap, mens en backend som ikke aktiveres er et spørsmål om tjenester og pakking. En server som avviser autentisering er ingen av delene, så gjentatte passordbytter kan ikke reparere et lokalt aktiveringsproblem. Å velge feil rettelse er hvordan et policyproblem blir en reinstallering.
Etter en pakkeendring, bekreft en sammenhengende, støttet installasjon i stedet for å kopiere én gammel binærfil på plass. En kontrollert tilbakerulling er et legitimt svar på en bekreftet regresjon, forutsatt at pakkene forblir kompatible og at det finnes en vei tilbake til støttet vedlikehold. Etabler den veien før tjenesten slutter å starte, ikke etterpå.
En annen plattform kan dele det samme VPN-kjernebiblioteket uten å dele Linux' busstjenester, så en lignende feil på Windows sier ingenting om denne. D-Bus-oversikten dokumenterer objektstiene som eksponeres for konfigurasjoner og sesjoner, og det er den delen av arkitekturen denne diagnosen hviler på. Les den én gang, og den neste feilen ankommer med en komponent allerede festet til seg.