systemd stop die VPN-diens: pas Type= by die kliënt aan
’n VPN-eenheid wat by die selflaai begin, gaan onaktief wanneer Type= nie by die kliënt se leeftyd pas nie. Pas die tipe aan, maak eienaarskap reg en orden die diens ná die tonnel.
Eenhede kan korrek lyk, systemctl start kan sukses rapporteer, en tien sekondes later sit die diens onaktief. Of dit herbegin elke halwe minuut totdat die beginlimiet dit stop. Nie een van die twee gedrag is ’n netwerkfout nie: die eenheid beskryf ’n prosessleeftyd wat nie pas by wat die kliënt werklik doen nie. Die kliënt kan fork en uitgaan, of die sessie konfigureer en dadelik uitgaan.
Waarom die eenheid sekondes ná ’n suksesvolle begin onaktief raak
systemd lei die toestand af uit die proses wat dit begin het, dus Type= is ’n bewering oor daardie proses eerder as dokumentasie. Met Type=simple tel die eenheid as aktief terwyl die opdrag loop en word onaktief wanneer dit terugkeer. ’n Kliënt wat die verbinding aan ’n hulpprogram oorhandig en uitgaan, lyk dus soos ’n ineenstorting, selfs wanneer die tonnel aan is. Die joernaal wys dan ’n begin-stop-patroon wat soos ’n foutiewe binêre lêer lees.
Lees die eenheidstipe langs die kliënt se gedrag voordat jy aan die netwerkkonfigurasie raak.
Kies die tipe wat by die kliënt pas
Twee patrone dek die meeste verskaffer-CLI’s: ’n opdrag wat ’n sessie konfigureer en uitgaan, en ’n opdrag wat ’n hulpprogram fork voordat dit terugkeer. Elkeen het ’n ander eenheidsvorm nodig.
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/protonvpn-cli connect -f
ExecStop=/usr/bin/protonvpn-cli disconnectoneshot met RemainAfterExit=true hou die eenheid aktief nadat die opdrag terugkeer, wat pas by die konfigureer-en-uitgaan-patroon, en die stopopdrag gee die diens ’n skoon afsluiting. ’n Forkende kliënt behou dieselfde vorm maar het Type=forking nodig sodat systemd die kind volg. Stel Restart=on-failure, RestartSec=30 en ’n eindige StartLimitBurst, sodat ’n verskaffer-onderbreking nie in ’n herbegin-lus ontaard wat die fout begrawe nie.
Moenie toelaat dat ’n gekontroleerde kliënt daemoniseer nie
Toesighouers buite systemd loop teen dieselfde muur. ’n runit-loopskrip wat ’n gedemoniseerde kliënt begin, keer dadelik na die toesighouer terug, wat die terugkeer as ’n ineenstorting lees en nog ’n kopie begin. Elke toesighouer verwag om die voorgrondproses te besit, soos sshd -D voor bly. Laat die daemonvlag vir gekontroleerde opdragte val en laat die toesighouer die agtergrondwerk doen. Wikkelskrifte wat terugkeer voordat die tonnel bestaan, veroorsaak dieselfde verwarring.
’n Proses wat homself losmaak, is onsigbaar vir alles wat veronderstel was om hom dop te hou.
Die sessie eindig en neem die tonnel saam
’n Werkskermsessie besit die kliënt wat dit begin. Eindig die aanmelding en die sessiebus verdwyn, en neem die tonnel saam, wat verduidelik waarom ’n grafiese kliënt se verbinding dikwels val wanneer die laaste venster sluit. Bedieners moet ’n stelsel-eenheid of ’n NetworkManager-profiel gebruik wat op sy eie opkom. ’n Gebruikerseenheid maak net sin wanneer die tonnel bedoel is om saam met die aanmelding te eindig, so bind dit aan die grafiese sessieteiken en sê dit in sy beskrywing.
Die diensgebruiker is die ander helfte van dieselfde probleem. ’n Sleutel wat deur root besit word met modus 0600 is onleesbaar vir ’n eenheid wat as ’n ander rekening loop, maak nie saak wat sudo in jou skulp bereik het nie.
systemctl cat openvpn-server@work
sudo chown -R openvpn:network /etc/openvpn/server
sudo find /etc/openvpn -type f -perm /077 -lsOrden afhanklikes nadat die adres bestaan
Wanneer ’n daemon aan ’n tonneladres bind wat nog nie geskep is nie, gaan dit uit met Cannot assign requested address. Die regstelling is eksplisiete ordening eerder as ’n herprobeer-lus.
[Unit]
After=network.target [email protected]
Requires=sys-devices-virtual-net-wg0.deviceAfter= orden die take, terwyl Requires= op die toestel-eenheid die afhanklike aan die koppelvlak se bestaan bind, wat sterker is as om net op die netwerkteiken te wag. Herlaai die bestuurder ná die wysiging en herbegin die afhanklike diens, en lees dan sy joernaal eerder as om aan te neem die orde het ingewerk. Stuur die kliënt se uitvoer na die joernaal met StandardOutput=journal of ’n logopsie, want ’n gekontroleerde kliënt wat na ’n lêer skryf wat niemand oopmaak nie, lyk identies aan een wat nooit begin het nie.
Herbegin dan een keer en bevestig die eenheid is aktief nadat die tonneltoestel verskyn. ’n Regstelling wat net deur systemctl start geverifieer is, het nie die selflaai-orde getoets wat dit moes regmaak nie.