Tunelul tău se ridică și clientul se conectează, dar adresa fixă și rutele împinse pe care le-ai definit pentru acel singur utilizator lipsesc. Jurnalul nu spune “file not found”, și exact asta trimite oamenii să regenereze certificate. În majoritatea acestor cazuri demonul rulează dintr-un alt director decât shell-ul în care ai testat, iar client-config-dir nu a fost niciodată rezolvat așa cum ai presupus. Corectarea este o corecție de cale, nu o resetare a acreditărilor.

Citește unitatea înainte de a atinge configurația

Începe cu procesul care rulează cu adevărat, nu cu fișierul pe care l-ai editat. Întreabă systemd despre linia de execuție, directorul de lucru și contul în care coboară. Acele trei răspunsuri explică majoritatea eșecurilor din această clasă:

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

Un WorkingDirectory gol înseamnă că unitatea pornește în /, deci un client-config-dir ccd relativ este căutat în /ccd. Acel director aproape nu există niciodată, iar demonul nu consideră absența lui fatală.

Compară cu lansarea interactivă pe care ai folosit-o în timpul testării, unde directorul curent al shell-ului tău era probabil directorul de configurare. Același fișier, aceleași cuvinte-cheie, două rezultate diferite.

Față de ce este rezolvată o cale relativă

Cuvântul-cheie este rezolvat față de directorul de lucru al procesului în momentul în care opțiunea este folosită. Nu înseamnă “lângă fișierul de configurare pe care l-am transmis cu --config”. OpenVPN va citi bucuros o configurație dintr-o cale absolută și tot va rezolva valorile relative în altă parte, și exact aceasta este capcana aici. Manualul OpenVPN 2.6 enunță regula la --client-config-dir și din nou la --cd.

Cuvântul-cheie cd schimbă acel context înainte de a fi citite alte fișiere, așa că o unitate care setează cd /etc/openvpn/server și apoi client-config-dir ccd se rezolvă la /etc/openvpn/server/ccd. Dacă adaugi cd, verifică ordinea directivelor și ține minte că afectează orice altă referință relativă din același fișier.

Parcurge calea ca fiind contul demonului

O cale poate fi corectă și totuși ilizibilă. După renunțarea la privilegii demonul nu mai este root, deci fiecare director părinte are nevoie de permisiune de căutare pentru acel cont, iar fișierul clientului însuși de permisiune de citire. Un singur bit de execuție lipsă pe un părinte este suficient ca să ascundă fișierul, iar eroarea se manifestă doar ca un client care primește în silențiu pool-ul implicit.

namei tipărește permisiunea fiecărei componente în ordine, ceea ce este mai rapid decât verificarea directoarelor unul câte unul:

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

Apoi testează citirea ca fiind contul serviciului și nu ca tine însuți:

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

Dacă unitatea folosește chroot, directorul trebuie să existe în interiorul închisorii, iar calea din configurație este interpretată după aplicarea chroot. Un fișier care se află pe gazdă în afara închisorii este invizibil din interior.

Confirmă căutarea în loc să ghicești

Ridică nivelul jurnalului pentru o repornire și citește ce spune serverul despre opțiunile specifice clientului. La verb 4 demonul raportează configurația pe client pe care a importat-o, deci o linie lipsă este dovada directă că nu a fost citit niciun fișier pentru acea conexiune.

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

Rulează asta în prim-plan pe un port liber și conectează un client. Asta scoate systemd complet din imagine: dacă suprascrierile apar aici și nu sub serviciu, diferența este contextul unității, nu fișierul.

Decide ce trebuie să se întâmple când niciun fișier nu se potrivește. Fără ccd-exclusive clientul este admis doar cu setările globale ale pool-ului, și acesta este eșecul silențios descris mai sus. Cu ea, un fișier lipsă devine o conexiune refuzată, iar acel refuz este mai ușor de observat, dar mai greu de depanat sub sarcină.

Corectează, repornește, verifică

Fă directorul absolut în configurație și lasă-l așa. Căile relative sunt sigure doar când unitatea fixează directorul de lucru, iar fixarea este o piesă mobilă suplimentară pe care cineva o va elimina mai târziu.

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

Repornește instanța, reconectează un client cunoscut și citește adresa pe care a primit-o împreună cu rutele împinse către el. Dacă adresa corespunde liniei ifconfig-push din fișierul acelui client, căutarea a funcționat. Dacă clientul ajunge în continuare în pool-ul general, întoarce-te la numărul de linii din jurnal: zero importuri înseamnă că calea sau identitatea sunt greșite, un import cu conținut greșit înseamnă că editezi alt fișier decât cel pe care îl citește demonul.

Revino restabilind împreună unitatea și configurația anterioare, apoi repornește. Certificatele nu trebuie reemise pentru nimic din toate acestea, iar tratarea unei probleme de director ca problemă de acreditări este felul în care o corecție de cinci minute devine o fereastră de mentenanță.

Articole similare