OpenVPN 3 Linux: læs en D-Bus-fejl, før du ruller tilbage
Fem tjenester, én frontend. Knyt en D-Bus-fejl til den komponent, der afviste den, kontroller, om der findes en session, og ret så ved den grænse.
Fejl i OpenVPN 3 Linux kommer ind som en D-Bus-metodefejl med et ukendt navn på, og fristelsen er at nedgradere en pakke og håbe. Klienten er ikke ét program: en frontend på kommandolinjen taler over bussen med tjenester, der ejer profiler, sessioner, VPN-motoren og de privilegerede netværksændringer. At afgøre, hvilken af de fem der ejer det fejlende kald, er det meste af diagnosen, og det koster én kommando i stedet for en tilbagerulning. Det følgende er den beslutning, i den rækkefølge fejlene normalt viser sig.
Fem ejere bag én kommando
Fem processer betyder noget, og hver har sit eget busnavn: frontenden, der tager imod din kommando, konfigurationsadministratoren, der gemmer profiler og deres adgangspolitik, sessionsadministratoren, der ejer sessionens levetid, backenden, der kører forbindelsen gennem OpenVPN 3 Core Engine, og netværkskonfigurationstjenesten, der installerer grænsefladen, ruterne og DNS-indstillingerne. En fejl, der nævner et konfigurationsobjekt, er derfor ikke en backend-fejl, og en backend, der ikke starter, er ikke en godkendelsesfejl. At sortere meddelelsen ind i en af de rækker skal ske, før noget ændres, fordi hvert senere skridt afhænger af, hvilken række der er sand. At gætte på rækken er måden, hvorpå en kort rettelse bliver en eftermiddag med pakkearbejde.
Spørg systembussen, hvilke tjenester der findes, før du spørger om noget andet, og bekræft derefter, at de installerede dele er enige om en version. OpenVPN 3 Linux registrerer disse tjenester som systemunits, så den bus, der skal spørges, er systembussen, versionsforespørgslen kræver administrative rettigheder, og en liste lavet med --user læser din loginsession, hvor units aldrig optræder. Tjenester aktiveres efter behov, og nogle afslutter, når de er inaktive, så en tjeneste, der mangler før din første anmodning, er simpelthen endnu ikke blevet spurgt om noget. De tre kommandoer nedenfor besvarer tilstedeværelse, version og unit-tilstand uden at åbne en VPN-session.
sudo busctl list | grep -i openvpn
sudo openvpn3-admin version --services
systemctl list-units 'openvpn3*'Hvad hver liste faktisk beviser
Klientens egne visninger er det billigste bevis, der findes, og hver af dem beviser mindre, end det ser ud til. En profil i konfigurationslisten viser, at en profil er importeret, og intet om, hvorvidt nogen må forbinde med den. En session i sessionslisten viser, at et sessionsobjekt findes, og intet om, hvorvidt fjerngodkendelsen blev færdig.
openvpn3 configs-list
openvpn3 sessions-listObjektstier i de output angiver administrerede objekter på bussen og ikke filer, så de kan ikke redigeres, og en sti, der blev noteret tidligere, bliver forældet i det øjeblik, den session afbrydes. At genbruge en fra dine noter giver "no such object"-fejl, der intet har med VPN at gøre. Stadietabellen nedenfor adskiller, hvad hvert skridt i en forbindelse etablerer, fra hvad det lader stå åbent, og det er netop den forskel, en tilbagerulningsbeslutning hviler på. Læs den række, der passer til dit bevis, og læs så fejlteksten igen.
| 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 |
Forbindelseskaldet vender tilbage, før tunnelen findes
Forbindelseskaldet giver dig en session at følge og vender tilbage, og derfor er et tilsyneladende vellykket kald efterfulgt af stilhed en normal mellemtilstand og ikke en modsigelse. Frontenden skal stadig følge statusændringer og besvare enhver anmodning om interaktion. En profil, der kræver en legitimation og ikke får noget svar, venter i en tilstand, der ser præcis ud som en hængt backend. Den ventetilstand fortjener genkendelse, fordi den sender folk til den forkerte komponent.
Mens et forsøg kører, skal du holde øje med sessionslisten og frontendens egen log for den profil. En session, der aldrig forlader sin begyndelsestilstand, navngiver den komponent, der stoppede, og loggen navngiver den normalt inden for de første par linjer. Hold profilnavnet ved hånden, fordi logkommandoen tager en profil og ikke en sessionssti, hvilket er endnu en grund til at læse listen igen i stedet for at genbruge en sti.
openvpn3 sessions-list
openvpn3 log --config <profile> --level 6At læse én komponents log uden at åbne en session
Når frontenden ikke rapporterer noget brugbart, så gå til den komponent, der logførte fejlen i stedet for at starte en ny forbindelse. Med en konfigureret systemd-journald-logger læser administratorens afgrænsede journalvisning én komponents hændelser uden at røre buspolitikken eller åbne en session, hvilket betyder noget, fordi en diagnose, der ændrer det system, den måler, beviser meget lidt. Filtrer på unit og ikke på syslog-tag: de enkelte tjenesteunits garanterer ingen fælles identifikator, så en tagforespørgsel kan give en tom side, mens uniten selv registrerede fejlen.
Notér fire felter, før du beder nogen om hjælp: det fulde fejlnavn, den involverede tjeneste og det involverede objekt, tidsstemplet og de installerede pakkeversioner. Det er det, en vedligeholder har brug for, og intet af det kræver, at du indsætter en profil eller en legitimation i en sag. At udvide busadgangspolitikken for at bringe fejlen til tavshed er ikke en diagnose, det sletter den grænse, der navngav komponenten for dig. Private profilindhold holdes ude af delte rapporter af samme grund som legitimationer.
journalctl -u 'openvpn3-service-*' -n 50 --no-pager
openvpn3-admin journal --service <name>At rette den grænse, der afviste
Hver række i kortet har sin egen rettelse, og rækkerne erstatter ikke hinanden. En afvist handling på en profil er et spørgsmål om politik og ejerskab, mens en backend, der ikke aktiverer, er et spørgsmål om tjenester og pakning. En server, der afviser godkendelse, er ingen af delene, så gentagne adgangskodeændringer kan ikke reparere et lokalt aktiveringsproblem. At vælge den forkerte rettelse er måden, hvorpå et politikproblem bliver en geninstallation.
Efter en pakkeændring skal du bekræfte en sammenhængende, understøttet installation i stedet for at kopiere en gammel binær fil på plads. En kontrolleret tilbagerulning er et legitimt svar på en bekræftet regression, forudsat at pakkerne forbliver kompatible, og at der findes en vej tilbage til understøttet vedligeholdelse. Etabler den vej, før tjenesten holder op med at starte, ikke bagefter.
En anden platform kan dele det samme VPN-kernebibliotek uden at dele Linux' bus-tjenester, så en lignende fejl på Windows siger intet om denne. D-Bus-oversigten dokumenterer de objektstier, der udstilles for konfigurationer og sessioner, og det er den del af arkitekturen, som denne diagnose hviler på. Læs den én gang, og den næste fejl ankommer med en komponent allerede knyttet til sig.