El túnel s'aixeca i el client es connecta, però l'adreça fixa i les rutes enviades que vas definir per a aquest usuari concret falten. Al registre no hi diu “file not found”, i això és el que porta la gent a regenerar certificats. En la majoria d'aquests casos el dimoni s'executa des d'un directori diferent del de l'intèrpret on vas provar, i client-config-dir no es va resoldre mai com donaves per fet. La correcció és esmenar el camí, no restablir les credencials.

Llegeix la unitat abans de tocar la configuració

Comença pel procés que realment s'executa, no pel fitxer que has editat. Demana a systemd la línia executable, el directori de treball i el compte al qual baixa. Aquestes tres respostes expliquen la majoria de fallades d'aquesta classe:

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

Un WorkingDirectory buit vol dir que la unitat s'inicia a /, així que un client-config-dir ccd relatiu es busca a /ccd. Aquest directori gairebé no existeix mai, i el dimoni no considera fatal la seva absència.

Compara-ho amb l'engegada interactiva que vas fer servir durant les proves, on el directori actual del teu intèrpret era probablement el de configuració. El mateix fitxer, les mateixes paraules clau, dos resultats diferents.

Respecte de què es resol un camí relatiu

La paraula clau es resol respecte del directori de treball del procés en el moment d'usar l'opció. No vol dir “al costat del fitxer de configuració que he passat amb --config”. OpenVPN llegirà de bon grat una configuració des d'un camí absolut i tot i així resoldrà els valors relatius en un altre lloc, i aquesta és exactament la trampa. El manual d'OpenVPN 2.6 exposa la regla sota --client-config-dir i de nou sota --cd.

La paraula clau cd canvia aquest context abans que es llegeixin altres fitxers, així que una unitat que defineix cd /etc/openvpn/server i després client-config-dir ccd es resol a /etc/openvpn/server/ccd. Si hi afegeixes cd, revisa l'ordre de les directives i recorda que afecta qualsevol altra referència relativa del mateix fitxer.

Recorre el camí com el compte del dimoni

Un camí pot ser correcte i tot i així no ser llegible. Després de deixar anar privilegis el dimoni ja no és root, així que cada directori pare necessita permís de cerca per a aquest compte, i el fitxer del client necessita permís de lectura. Un sol bit d'execució absent en un pare n'hi ha prou per amagar el fitxer, i l'error només es manifesta com un client que rep en silenci el grup per defecte.

namei imprimeix el permís de cada component en ordre, cosa més ràpida que comprovar els directoris d'un en un:

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

Després prova la lectura com a compte del servei i no com a tu mateix:

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

Si la unitat utilitza chroot, el directori ha d'existir dins de la presó, i el camí de la configuració s'interpreta després d'aplicar el chroot. Un fitxer que és a l'host fora de la presó és invisible des de dins.

Confirma la cerca en lloc d'endevinar

Puja el nivell del registre per a un reinici i llegeix què diu el servidor sobre les opcions específiques del client. A verb 4 el dimoni informa de la configuració per client que ha importat, així que una línia absent és prova directa que no s'ha llegit cap fitxer per a aquesta connexió.

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

Executa això en primer pla en un port lliure i connecta un client. Això treu systemd completament de l'equació: si les substitucions apareixen aquí i no sota el servei, la diferència és el context de la unitat, no el fitxer.

Decideix què ha de passar quan cap fitxer coincideix. Sense ccd-exclusive el client s'admet només amb la configuració global del grup, i aquesta és la fallada silenciosa descrita abans. Amb aquesta opció, un fitxer absent es converteix en una connexió rebutjada, i aquest rebuig és més fàcil de veure però més difícil de depurar sota càrrega.

Corregeix, reinicia, verifica

Fes el directori absolut a la configuració i deixa'l així. Els camins relatius només són segurs quan la unitat fixa el directori de treball, i fixar-lo és una peça mòbil extra que algú traurà més endavant.

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

Reinicia la instància, torna a connectar un client conegut i llegeix l'adreça que ha rebut juntament amb les rutes enviades cap a ell. Si l'adreça coincideix amb la línia ifconfig-push del fitxer d'aquest client, la cerca ha funcionat. Si el client encara cau al grup general, torna al recompte de línies del registre: zero importacions vol dir que el camí o la identitat són incorrectes, una importació amb contingut equivocat vol dir que estàs editant un fitxer diferent del que llegeix el dimoni.

Fes marxa enrere restaurant la unitat i la configuració anteriors juntes, i després reinicia. Els certificats no cal reemetre'ls per res d'això, i tractar un problema de directori com un problema de credencials és com una correcció de cinc minuts es converteix en una finestra de manteniment.

Articles relacionats