Het commando keert terug, de dienst verschijnt als mislukt, en niets dat op een uitleg lijkt bereikt de terminal. Die stilte is het symptoom dat mensen beschrijven als «OpenVPN start niet», en het betekent bijna nooit dat het programma stierf zonder iets te zeggen. Het betekent dat het bericht naar een kanaal ging dat u niet las, of dat wat u startte niet was wat u had geconfigureerd. Beide gevallen zijn binnen een minuut te diagnosticeren zodra u ophoudt het profiel als de verdachte te behandelen.

Vier plaatsen absorberen de uitvoer: het journal van de unit, de plugin die de verbinding bezit, de andere kant van de tunnel en een ander binair bestand dan het exemplaar waarvan u denkt dat het draait. Elk heeft zijn eigen controle.

Stilte betekent dat u niet naar het juiste kanaal keek

Een aanroep op de voorgrond print naar uw terminal. Een unit print naar het journal, en een mislukte unit kan al afsluiten voordat hij iets schrijft als de fout zit in hoe hij werd gestart en niet in wat hem werd verteld. Het onderscheid is belangrijk: geen journalregel betekent dat het proces nooit echt liep, terwijl één regel gevolgd door een afsluiting betekent dat het liep en iets weigerde.

systemctl status openvpn-client@office
journalctl -u openvpn-client@office -b --no-pager

Voeg systemctl show -p Result -p ExecMainStatus openvpn-client@office toe om een schone afsluiting van een signaal te scheiden. Een status van 1 met een Result=exit-code is een beslissing van het programma; Result=signal of een time-out wijzen juist op de omgeving, en geen enkele profielbewerking verandert dat. Noteer beide waarden voordat u iets herstart, want een herstart wist de tijdelijke toestand die ze heeft voortgebracht.

De instantienaam maakt deel uit van het pad

De verpakte template-unit neemt geen bestandspad. Hij neemt een instantienaam, en die naam wordt aan een map toegevoegd om het profiel te vinden: office wordt in de Debian- en Ubuntu-pakketten omgezet naar /etc/openvpn/client/office.conf. Een bestand met de naam office-v2.conf, dat als @office is gestart, wordt nooit gelezen, en de unit sluit stil af omdat er vanuit zijn gezichtspunt niets te doen was. De zoekmap verschilt tussen client- en servermodus, dus dezelfde fout wijst heel ergens anders heen als u van template wisselt.

Die discrepantie is de meest voorkomende oorzaak van de stille fout, en hij is onzichtbaar in het profiel omdat het profiel in orde is. Noem op wat werkelijk bestaat en vergelijk de twee namen teken voor teken, inclusief elke extensie die de verpakking verwacht.

ls -l /etc/openvpn/client/
systemctl list-units 'openvpn*' --all

Als de unit is ingeschakeld maar er geen instantie wordt vermeld, kan de inschakeling zelf verwijzen naar een naam die later is hernoemd. De juiste instantie opnieuw inschakelen is meestal genoeg, en het oude unit-bestand dat blijft liggen is het waard om te verwijderen zodat het de volgende persoon niet in verwarring brengt. Een achtergebleven unit-bestand is een kleinigheid die iemand later een uur kost.

Wanneer de plugin de tunnel bezit, ziet de terminal niets

Een verbinding die vanuit de desktop-applet is gestart, is eigendom van NetworkManager, en de OpenVPN-uitvoer gaat naar het journal van die dienst in plaats van naar een shell die u open hebt. De client met de hand draaien en niets zien is in die opzet te verwachten, want het met de hand gestarte proces is niet het proces dat de verbinding draagt.

Zoek in het journal de dienst die er eigenaar van is, en reproduceer daarna het parsen met een verbose niveau dat u kunt lezen. De twee opdrachten hieronder kijken naar verschillende eigenaren van dezelfde fout.

journalctl -b -u NetworkManager --no-pager | grep -i -A3 openvpn
openvpn --config /etc/openvpn/client/office.conf --verb 4 --log /tmp/ovpn.log

De losse run is om berichten te lezen, niet om de beheerde verbinding te vervangen, en de twee verschillen daarna: DNS-integratie, routes en levensduur horen bij de plugin. Een parsefout in de losse run oplossen lost de naamresolutie niet automatisch op zodra de applet het overneemt, dus houd de twee waarnemingen gescheiden.

Twee binaire bestanden, één PATH

Een handmatige build die onder /usr/local is geïnstalleerd, wint bij een shell-aanroep, omdat /usr/local/sbin voor /usr/sbin komt op het standaard Ubuntu-PATH. Een unit gebruikt uw PATH niet; hij voert het absolute pad uit dat in ExecStart staat. De versie die in uw terminal werkt en de versie die als dienst faalt, kunnen dus echt verschillende programma’s zijn.

Vergelijk de twee voordat u iets herbouwt. De derde opdracht is degene die het argument beslecht.

command -v openvpn
whereis openvpn
systemctl cat openvpn-client@office | grep ExecStart

Nog een omgevingsverschil verstopt zich op dezelfde plek. Een verpakte unit vertrouwt op een runtime-map onder /run die systemd ervoor aanmaakt; een handgeschreven vervangende unit die die instelling weglaat, kan al falen voordat hij één bestand opent, en de fout ziet eruit als een algemene weigering zonder enige OpenVPN-melding.

Fouten die de client niet kan melden

Sommige uitkomsten worden aan de andere kant beslist. Een gateway die met een HTTP-status antwoordt en de verbinding sluit, heeft u over zijn eigen toestand verteld, en de nuttige volgende stap is zijn log of het account achter de inloggegevens in plaats van uw lokale bestanden. Lokaal is niets kapot in dat scenario, en het profiel aanpassen om dat te compenseren maakt de volgende diagnose moeilijker. Lees dat log voordat u de clientconfiguratie aanraakt.

Een ander stil geval is een client die correct werkt. Een tunnel in clientmodus luistert nooit op een poort, dus een controle die een open luisteraar verwacht, meldt niets en ziet eruit als een fout. Bevestig welke modus u hebt gestart voordat u uit een lege poortenlijst een conclusie trekt.

Werk de lagen in volgorde af: bestaat de unit en is de instantienaam juist, bereikte iets het journal of het bestand --log , welk binair bestand en profiel liepen werkelijk, en is de fout lokaal of op afstand. Elk antwoord haalt een laag weg. Van het profiel beginnen betekent een bestand herschrijven dat misschien nooit is geopend.

Gerelateerde artikelen