Je controleert de tunnel, voert systemctl status openvpn uit en krijgt active (exited) zonder Main PID en met een lege processenlijst. De natuurlijke lezing is dat de dienst is gestart en gestorven, dus je opent de unit, vindt /bin/true en concludeert dat het pakket stuk is. In de Debian-pakkettering is die toestand de wrapper die werkt zoals ontworpen, en de tunnel leeft in een van de instantie-units die hij start. De samengestelde unit zal je nooit vertellen welke instantie hem heeft gebouwd.

Wat active (exited) op deze unit werkelijk betekent

De verpakte unit is een eenmalige taak: de ExecStart is /bin/true, en RemainAfterExit=yes is wat een voltooide unit als active (exited) gerapporteerd houdt. Haal die richtlijn weg en dezelfde geslaagde /bin/true-taak eindigt in inactive (dead), precies de toestand die mensen verwachten en in de andere richting verkeerd lezen. Het commando is een plaatsaanduiding, en de unit rapporteert over werk dat andere units doen. Niets aan die regeling is stuk, en /bin/true vervangen verandert het verpakkingscontract, niet de tunnel.

De wrapper delegeert. Hij start de instantie-units die de pakketconfiguratie of zijn systemd-generator levert, en daarom bewijst een lege processenlijst niets over de tunnel. Als er geen instantie is gekozen, slaagt de wrapper nog steeds en start nog steeds niets. De toestand beantwoordt of de wrapper heeft gedraaid, niet of er een tunnel bestaat.

Lees de drie regels van de status-uitvoer in plaats van het woord tussen haakjes. Loaded noemt het unit-bestand dat systemd heeft gelezen, Active draagt de tijdstempel van de laatste geslaagde uitvoering, en de ontbrekende Main PID past bij een voltooide eenmalige taak. Die drie regels zijn ook hoe je deze wrapper onderscheidt van een dienst die een seconde na de start instortte.

Maak de units zichtbaar voordat je de status opnieuw leest

Vraag systemd wat bestaat voordat je vraagt wat er draait. Een sjabloon kan geïnstalleerd zijn terwijl er geen instantie is gemaakt, en alleen een gemaakte unit draagt een tunnel. Begin met de geladen set:

systemctl list-units 'openvpn*'

Die lijst is wat systemd op dit moment heeft geladen, en het is het dichtst bij een tunnelinventaris. Geïnstalleerde unit-bestanden beantwoorden een andere vraag, en die lijst toont nog steeds een sjabloon als er niets is gemaakt:

systemctl list-unit-files 'openvpn*'

Lees de twee lijsten samen, want een sjabloon in de tweede en een instantie in de eerste zijn verschillende antwoorden. Een sjabloon dat bestaat en een instantie die draait zijn niet hetzelfde feit, en alleen het tweede betekent een tunnel. Pakketindelingen verschillen ook tussen distributies en OpenVPN-versies. Een ouder openvpn@-sjabloon, een gesplitst client- en serverpaar en een distributiewrapper kunnen allemaal legitiem zijn in hun eigen verpakking.

Pas je aan je eigen machine aan, niet aan de tutorial die je vond. De instantienaam in iemands uitvoer kan office zijn terwijl die van jou home of work is. Wat wordt overgedragen is de methode, niet de tekenreeks.

Volg de instantienaam naar het bestand dat hij leest

In het upstream client-sjabloon is de werkmap van de unit /etc/openvpn/client en neemt het commando daar %i.conf vandaan, dus leest openvpn-client@office /etc/openvpn/client/office.conf. Bevestig die koppeling op de geïnstalleerde unit in plaats van het voorbeeld te vertrouwen, want het sjabloon dat je hebt kan ouder zijn of een herschrijving van de distributie:

systemctl cat [email protected]

Lees de drop-ins onderaan die uitvoer, want een bestand onder .d/ kan ExecStart, de werkmap of het configuratiepad wijzigen. Een profiel dat je als office.ovpn hebt gedownload is niet het bestand dat de instantie opent. Die kloof is de gebruikelijke reden dat een fout een pad noemt dat je nooit hebt bewerkt.

Relatieve paden in het profiel zijn de volgende valkuil. Het hoofdbestand verplaatsen terwijl de ca-, cert- en key-verwijzingen relatief blijven, ruilt een ontbrekend-bestand-fout in voor een andere ontbrekend-bestand-fout. De tweede wijst naar een bestand waarvan je zeker wist dat het bestond, en daarom is de profielmap belangrijker dan de bestandsnaam.

Start hem, en lees dan de journal van die instantie

Start de instantie die je net hebt onderzocht, want de log van de samengestelde unit bevat de fouten van de tunnel niet. Lees daarna de journal voor deze boot en zoek in die volgorde naar een configuratiefout, een bestandstoegangsfout en een verbindingsfout, want elk faalt in een andere fase van de start.

sudo systemctl start [email protected]
journalctl -u [email protected] -b

Starten en inschakelen zijn aparte beslissingen: start voert de unit nu uit, enable regelt de volgende boot, en enable --now doet beide in één stap. daemon-reload leest unit-definities opnieuw en herstart geen lopend proces en past geen bewerkt profiel toe. Nadat je het profiel hebt gewijzigd, herstart de instantie, want dat is wat het bestand opnieuw leest.

Zet geen tweede beheerder op dezelfde tunnel

NetworkManager en de OpenVPN 3-sessiebeheerders bezitten hun eigen verbindingsstatus, en een systemd-instantie naast een van hen zet twee eigenaren op dezelfde tunnel. Het symptoom is een tunnel die omhoog komt en seconden later wordt vervangen, of een die weigert gestopt te blijven. Kies de beheerder die je distributie voor de desktop documenteert, en gebruik systemd bewust op een server.

Controleer of er al een eigenaar is voordat je een instantie start. Wanneer een desktop-applet de verbinding toont, concurreert de instantie die je start ermee in plaats van hem aan te vullen. Schakel de beheerder uit die je niet gebruikt in plaats van beide te draaien en te hopen dat de volgorde standhoudt. Dat conflict verklaart ook journals waarin een tunnel wordt opgezet en daarna afgebroken door een proces dat je nooit hebt gestart.

Beantwoord de oorspronkelijke vraag met de instantienaam, het bestand dat hij heeft gelezen en de journal-regel die faalde. OpenVPN's notities over systemd-integratie beschrijven de sjabloonindeling en de bestandskoppeling waarmee de instantienaam wordt opgelost.

Gerelateerde artikelen