Dyn tunnel komt op en de klant ferbynt, mar it fêste adres en de pushte rûtes dy'tst foar dy iene brûker definiearre hast, ûntbrekke. It loch seit gjin “file not found”, en dat is krekt wat minsken fuortstjoert om sertifikaten op 'e nij te meitsjen. Yn de measte fan dizze gefallen rint de daemon út in oare map as de shell wêryn'tst test hast, en client-config-dir waard nea oplost sa'tst oannaamst. De oplossing is in paadkorreksje, gjin weromsetten fan oanmeldgegevens.

Lês de unit foardatst de konfiguraasje oanrekest

Begjin by it proses dat echt rint, net by it bestân datst bewurke hast. Freegje systemd om de útfierrigel, de wurkmap en it akkount dêr't it nei sakket. Dy trije antwurden ferklearje de measte flaters yn dizze klasse:

systemctl show openvpn-server@server -p ExecStart -p WorkingDirectory -p User -p RootDirectory

In lege WorkingDirectory betsjut dat de unit begjint yn /, dus in relatyf client-config-dir ccd wurdt socht yn /ccd. Dy map bestiet hast nea, en de daemon beskôget it ûntbrekken derfan net as fataal.

Fergelykje dat mei de ynteraktive start dy'tst by it testen brûkt hast, dêr't de hjoeddeistige map fan dyn shell wierskynlik de konfiguraasjemap wie. Itselde bestân, deselde kaaiwurden, twa ferskillende útkomsten.

Wêr't in relatyf paad tsjin oplost wurdt

It kaaiwurd wurdt oplost tsjin de wurkmap fan it proses op it stuit dat de opsje brûkt wurdt. It betsjut net “njonken it konfiguraasjebestân dat ik mei --config trochjûn haw”. OpenVPN lêst mar wat graach in konfiguraasje fan in absolút paad en lost relative wearden dochs earne oars op, en dat is krekt de falstrik hjir. De hânlieding fan OpenVPN 2.6 jout de regel ûnder --client-config-dir en nochris ûnder --cd.

It kaaiwurd cd feroaret dat ferbân foardat oare bestannen lêzen wurde, dus in unit dy't cd /etc/openvpn/server en dêrnei client-config-dir ccd set, lost op nei /etc/openvpn/server/ccd. As't cd taheakest, kontrolearje dan de folchoarder fan de rjochtlinen en tink derom dat it elke oare relative ferwizing yn itselde bestân beynfloedet.

Rin it paad as it akkount fan de daemon

In paad kin kreas wêze en dochs net lêsber. Nei it sakjen fan privileezjes is de daemon gjin root mear, dus elke âlderlike map hat sykrjocht nedich foar dat akkount, en it klantbestân sels lêsrjocht. Ien ûntbrekkend útfierbit op in âlder is genôch om it bestân te ferbergjen, en de flater docht him allinnich foar as in klant dy't stilwei de standertpoel krijt.

namei printet it rjocht fan elk ûnderdiel yn folchoarder, wat flugger is as de mappen ien foar ien neirin:

namei -l /etc/openvpn/server/ccd/client1

Test dêrnei it lêzen as it tsjinstakkount ynstee fan as dysels:

runuser -u openvpn -- test -r /etc/openvpn/server/ccd/client1 && echo readable

At de unit chroot brûkt, moat de map binnen de finzenis bestean, en it paad yn de konfiguraasje wurdt ynterpretearre neidat chroot tapast is. In bestân dat op de host bûten de finzenis leit, is fan binnen ûnsichtber.

Befêstigje it sykjen ynstee fan te rieden

Ferheegje it lochnivo foar ien werstart en lês wat de tsjinner seit oer klantspesifike opsjes. By verb 4 rapportearret de daemon de konfiguraasje per klant dy't er ymportearre hat, dus in ûntbrekkende rigel is direkte bewiis dat der foar dy ferbining gjin bestân lêzen is.

openvpn --config /etc/openvpn/server.conf --verb 4 --client-config-dir /etc/openvpn/server/ccd

Rin dat op 'e foargrûn op in oar poarte en ferbyn ien klant. Dat hellet systemd hielendal út it byld: as de oerskriuwingen hjir ferskine en net ûnder de tsjinst, dan is it ferskil de kontekst fan de unit, net it bestân.

Beslis wat der barre moat as gjin bestân past. Sûnder ccd-exclusive wurdt de klant talitten mei allinnich de globale poelynstellingen, en dat is de stille flater dy't hjirboppe beskreaun is. Dermei wurdt in ûntbrekkend bestân in wegere ferbining, en dy wegering is makliker te fernimmen mar dreger te debuggen ûnder belesting.

Korrizje, werstart, kontrolearje

Meitsje de map absolút yn de konfiguraasje en hâld it sa. Relatyf paden binne allinnich feilich as de unit de wurkmap fêstset, en dat fêstsetten is in ekstra bewegend part dat immen letter fuorthellet.

client-config-dir /etc/openvpn/server/ccd
ccd-exclusive

Werstart de ynstânsje, ferbyn wer in bekende klant en lês it adres dat er krige tegearre mei de rûtes dy't nei him pusht binne. As it adres oerienkomt mei de rigel ifconfig-push yn it bestân fan dy klant, dan hat it sykjen wurke. As de klant noch altyd yn 'e algemiene poel bedarret, gean dan werom nei it oantal lochrigels: nul ymporten betsjut dat it paad of de identiteit ferkeard is, ien ymport mei ferkearde ynhâld betsjut datst in oar bestân bewurkest as dat de daemon lêst.

Rol werom troch de foarige unit en konfiguraasje tegearre werom te setten en werstart dan. Sertifikaten hoege hjirfoar net op 'e nij útjûn te wurden, en in mapprobleem behannelje as in oanmeldgegevensprobleem is hoe't in korreksje fan fiif minuten in ûnderhâldsfinsters wurdt.

Relatearre artikelen