systemd ndal shërbimin VPN: përputh Type= me klientin
Një njësi VPN në nisje bëhet joaktive kur Type= nuk përputhet me jetëgjatësinë e klientit. Përputh llojin, rregullo pronësinë dhe rendit shërbimin pas tunelit.
Njësitë mund të duken të sakta, systemctl start mund të raportojë sukses dhe dhjetë sekonda më vonë shërbimi qëndron joaktiv. Ose riniset çdo gjysmë minute derisa kufiri i nisjes ta ndalojë. Asnjëra prej sjelljeve nuk është defekt rrjeti: njësia përshkruan një jetëgjatësi procesi që nuk përputhet me atë që klienti bën në të vërtetë. Klienti mund të bëjë fork dhe të dalë, ose të konfigurojë sesionin dhe të dalë menjëherë.
Pse njësia bëhet joaktive sekonda pas një nisjeje të suksesshme
systemd e nxjerr gjendjen nga procesi që nisi vetë, prandaj Type= është një pohim për atë proces, jo dokumentacion. Me Type=simple njësia llogaritet aktive sa kohë komanda ekzekutohet dhe bëhet joaktive kur ajo kthehet. Prandaj një klient që ia dorëzon lidhjen një ndihmësi dhe del duket si rrëzim, edhe kur tuneli është lart. Atëherë regjistri tregon një model nisjeje dhe ndalimi që lexohet si binar i dëmtuar.
Lexo llojin e njësisë pranë sjelljes së klientit përpara se të prekësh konfigurimin e rrjetit.
Zgjidh llojin që përputhet me klientin
Dy modele mbulojnë shumicën e CLI-ve të furnitorëve: një komandë që konfiguron një sesion dhe del, dhe një komandë që bën fork një ndihmës përpara se të kthehet. Secila kërkon një formë tjetër njësie.
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/protonvpn-cli connect -f
ExecStop=/usr/bin/protonvpn-cli disconnectoneshot me RemainAfterExit=true e mban njësinë aktive pasi komanda kthehet, gjë që përputhet me modelin konfiguro dhe dil, dhe komanda e ndalimit i jep shërbimit një mbyllje të pastër. Një klient që bën fork ruan të njëjtën formë, por i duhet Type=forking që systemd të ndjekë fëmijën. Vendos Restart=on-failure, RestartSec=30 dhe një StartLimitBurst të fundëm, që një ndërprerje e furnitorit të mos kthehet në një cikël rinovimesh që e varros gabimin.
Kurrë mos lejo që një klient i mbikëqyrur të demonizohet
Mbikëqyrësit jashtë systemd përplasen me të njëjtin mur. Një skript runit që nis një klient të demonizuar kthehet menjëherë te mbikëqyrësi, i cili e lexon kthimin si rrëzim dhe nis një kopje tjetër. Çdo mbikëqyrës pret të zotërojë procesin e parë, ashtu si sshd -D mbetet përpara. Hiq flamurin e demonit për komandat e mbikëqyrura dhe lëri mbikëqyrësit punën e sfondit. Skriptet mbështjellëse që kthehen përpara se të ekzistojë tuneli shkaktojnë të njëjtën hutim.
Një proces që shkëputet nga vetvetja është i padukshëm për gjithçka që duhej ta vëzhgonte.
Sesioni përfundon dhe e merr tunelin me vete
Një sesion desktopi zotëron klientin që nis. Përfundo hyrjen dhe autobusi i sesionit zhduket, duke e marrë tunelin me vete, gjë që shpjegon pse lidhja e një klienti grafik shpesh bie kur mbyllet dritarja e fundit. Serverët duhet të përdorin një njësi sistemi ose një profil NetworkManager që ngrihet vetë. Një njësi përdoruesi ka kuptim vetëm kur tuneli duhet të përfundojë me hyrjen, prandaj lidhe atë me objektivin e sesionit grafik dhe thuaje këtë në përshkrimin e tij.
Përdoruesi i shërbimit është gjysma tjetër e të njëjtit problem. Një çelës në pronësi të root me mod 0600 është i palexueshëm për një njësi që ekzekutohet nën një llogari tjetër, çfarëdo që arriti sudo në shell-in tënd.
systemctl cat openvpn-server@work
sudo chown -R openvpn:network /etc/openvpn/server
sudo find /etc/openvpn -type f -perm /077 -lsRendit të varurit pasi adresa ekziston
Kur një demon lidhet me një adresë tuneli që nuk është krijuar ende, ai del me Cannot assign requested address. Rregullimi është renditje e qartë, jo një cikël ripërpjekjesh.
[Unit]
After=network.target [email protected]
Requires=sys-devices-virtual-net-wg0.deviceAfter= rendit punët, ndërsa Requires= në njësinë e pajisjes lidh të varurin me ekzistencën e ndërfaqes, gjë që është më e fortë se sa të presësh vetëm objektivin e rrjetit. Ringarko menaxherin pas redaktimit dhe rinis shërbimin e varur, pastaj lexo regjistrin e tij në vend që të supozosh se renditja funksionoi. Dërgo daljen e klientit në regjistër me StandardOutput=journal ose një opsion regjistrimi, sepse një klient i mbikëqyrur që shkruan në një skedar që askush nuk e hap duket identik me një që nuk u nis kurrë.
Pastaj rinis një herë dhe konfirmo që njësia është aktive pasi shfaqet pajisja e tunelit. Një rregullim i verifikuar vetëm me systemctl start nuk e ka provuar renditjen e nisjes që duhej të rregullonte.