Din tunnel kommer op, og klienten forbinder, men den faste adresse og de pushede ruter, du definerede for den ene bruger, mangler. Loggen siger ikke “file not found”, og det er netop det, der sender folk ud i at genskabe certifikater. I de fleste af disse tilfælde kører dæmonen fra en anden mappe end det shell, du testede i, og client-config-dir blev aldrig opløst, som du antog. Rettelsen er en stikorrektion, ikke en nulstilling af legitimationsoplysninger.

Læs unit-filen, før du rører konfigurationen

Start med den proces, der faktisk kører, ikke med den fil, du redigerede. Spørg systemd om eksekveringslinjen, arbejdsmappen og den konto, den skifter til. De tre svar forklarer de fleste fejl i denne klasse:

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

Et tomt WorkingDirectory betyder, at unit-filen starter i /, så en relativ client-config-dir ccd ledes efter i /ccd. Den mappe findes næsten aldrig, og dæmonen betragter ikke dens fravær som fatal.

Sammenlign det med den interaktive start, du brugte under testen, hvor dit shells aktuelle mappe sandsynligvis var konfigurationsmappen. Samme fil, samme nøgleord, to forskellige resultater.

Hvad en relativ sti opløses mod

Nøgleordet opløses mod processens arbejdsmappe på det tidspunkt, indstillingen bruges. Det betyder ikke “ved siden af den konfigurationsfil, jeg sendte med --config”. OpenVPN læser gerne en konfiguration fra en absolut sti og opløser stadig relative værdier andre steder, og det er netop fælden her. OpenVPN 2.6-manualen angiver reglen under --client-config-dir og igen under --cd.

Nøgleordet cd ændrer den kontekst, før andre filer læses, så en unit, der sætter cd /etc/openvpn/server og derefter client-config-dir ccd, opløses til /etc/openvpn/server/ccd. Hvis du tilføjer cd, skal du kontrollere rækkefølgen af direktiverne og huske, at det påvirker enhver anden relativ reference i samme fil.

Gennemgå stien som dæmonens konto

En sti kan være korrekt og alligevel ulæselig. Efter privilegiefaldet er dæmonen ikke længere root, så hver overordnet mappe kræver søgetilladelse for den konto, og klientfilen selv kræver læsetilladelse. Et enkelt manglende eksekveringsbit på en overordnet mappe er nok til at skjule filen, og fejlen viser sig kun som en klient, der stille får standardpuljen.

namei udskriver tilladelserne for hver komponent i rækkefølge, hvilket er hurtigere end at kontrollere mapperne én ad gangen:

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

Test derefter læsningen som tjenestekontoen i stedet for som dig selv:

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

Hvis unit-filen bruger chroot, skal mappen findes inde i fængslet, og stien i konfigurationen fortolkes, efter chroot er anvendt. En fil, der findes på værten uden for fængslet, er usynlig indefra.

Bekræft opslaget i stedet for at gætte

Hæv logniveauet for en genstart, og læs, hvad serveren siger om klientspecifikke indstillinger. Ved verb 4 rapporterer dæmonen den konfiguration pr. klient, den importerede, så en manglende linje er direkte bevis på, at ingen fil blev læst for den forbindelse.

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

Kør det i forgrunden på en ekstra port, og tilslut en klient. Det fjerner systemd helt fra billedet: hvis tilsidesættelserne vises her og ikke under tjenesten, er forskellen unit-filens kontekst, ikke filen.

Beslut, hvad der skal ske, når ingen fil matcher. Uden ccd-exclusive optages klienten kun med de globale puljeindstillinger, og det er den stille fejl, der er beskrevet ovenfor. Med den bliver en manglende fil en afvist forbindelse, og den afvisning er lettere at bemærke, men sværere at fejlfinde under belastning.

Ret, genstart, verificér

Gør mappen absolut i konfigurationen, og hold den sådan. Relative stier er kun sikre, når unit-filen fastlåser arbejdsmappen, og at fastlåse den er en ekstra bevægelig del, som nogen fjerner senere.

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

Genstart instansen, tilslut en kendt klient igen, og læs den adresse, den fik, sammen med de ruter, der blev pushet til den. Hvis adressen matcher linjen ifconfig-push i den klients fil, virkede opslaget. Hvis klienten stadig ender i den generelle pulje, gå tilbage til antallet af loglinjer: nul importer betyder, at stien eller identiteten er forkert, ét import med forkert indhold betyder, at du redigerer en anden fil, end dæmonen læser.

Rul tilbage ved at gendanne den forrige unit og konfiguration sammen og derefter genstarte. Certifikater skal ikke udstedes igen for noget af dette, og at behandle et mappeproblem som et legitimationsproblem er måden, hvorpå en fem minutters rettelse bliver et vedligeholdelsesvindue.

Relaterede artikler