O túnel levanta e o cliente conéctase, pero a dirección fixa e as rutas empurradas que definiches para ese usuario concreto faltan. No rexistro non pon “file not found”, e iso é xusto o que manda á xente rexenerar certificados. Na maioría destes casos o demo execútase desde un directorio distinto da consola na que probaches, e client-config-dir nunca se resolveu como supuñas. O arranxo é corrixir a ruta, non restablecer credenciais.

Le a unidade antes de tocar a configuración

Empeza polo proceso que realmente se executa, non polo ficheiro que editaches. Pregúntalle a systemd pola liña de execución, o directorio de traballo e a conta á que baixa. Esas tres respostas explican a maioría dos fallos desta clase:

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

Un WorkingDirectory baleiro significa que a unidade arrinca en /, así que un client-config-dir ccd relativo búscase en /ccd. Ese directorio case nunca existe, e o demo non considera fatal a súa ausencia.

Compárao co arranque interactivo que usaches durante as probas, onde o directorio actual da túa consola era probablemente o de configuración. O mesmo ficheiro, as mesmas palabras clave, dous resultados distintos.

Fronte a que se resolve unha ruta relativa

A palabra clave resólvese fronte ao directorio de traballo do proceso no momento en que se usa a opción. Non significa “xunto ao ficheiro de configuración que pasei con --config”. OpenVPN lerá de bo grado unha configuración desde unha ruta absoluta e aínda así resolverá os valores relativos noutro sitio, e esa é exactamente a trampa. O manual de OpenVPN 2.6 expón a regra baixo --client-config-dir e de novo baixo --cd.

A palabra clave cd cambia ese contexto antes de que se lean outros ficheiros, así que unha unidade que define cd /etc/openvpn/server e despois client-config-dir ccd resólvese en /etc/openvpn/server/ccd. Se engades cd, revisa a orde das directivas e lembra que afecta calquera outra referencia relativa do mesmo ficheiro.

Percorre a ruta como a conta do demo

Unha ruta pode ser correcta e aínda así non ser lexible. Tras soltar privilexios o demo xa non é root, así que cada directorio pai necesita permiso de busca para esa conta, e o ficheiro do cliente necesita permiso de lectura. Basta un bit de execución ausente nun pai para ocultar o ficheiro, e o erro só se manifesta como un cliente que recibe en silencio o grupo por defecto.

namei imprime o permiso de cada compoñente en orde, o que é máis rápido que comprobar os directorios un a un:

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

Logo proba a lectura como a conta do servizo e non como ti mesmo:

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

Se a unidade usa chroot, o directorio debe existir dentro da gaiola, e a ruta da configuración interprétase despois de aplicar o chroot. Un ficheiro que está no host fóra da gaiola é invisible desde dentro.

Confirma a busca en lugar de adiviñar

Sube o nivel do rexistro para un reinicio e le o que di o servidor sobre as opcións específicas do cliente. Con verb 4 o demo informa da configuración por cliente que importou, así que unha liña ausente é proba directa de que non se leu ningún ficheiro para esa conexión.

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

Executa iso en primeiro plano nun porto libre e conecta un cliente. Así systemd sae por completo da ecuación: se as substitucións aparecen aquí e non baixo o servizo, a diferenza é o contexto da unidade, non o ficheiro.

Decide que debe pasar cando ningún ficheiro coincide. Sen ccd-exclusive o cliente admítese só cos axustes globais do grupo, e ese é o fallo silencioso descrito arriba. Con ela, un ficheiro ausente convértese nunha conexión rexeitada, e ese rexeitamento é máis fácil de ver pero máis difícil de depurar baixo carga.

Corrixe, reinicia, verifica

Fai o directorio absoluto na configuración e déixao así. As rutas relativas só son seguras cando a unidade fixa o directorio de traballo, e fixalo é unha peza móbil extra que alguén quitará máis adiante.

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

Reinicia a instancia, volve conectar un cliente coñecido e le a dirección que recibiu xunto coas rutas empurradas cara a el. Se a dirección coincide coa liña ifconfig-push do ficheiro dese cliente, a busca funcionou. Se o cliente segue caendo no grupo xeral, volve á conta de liñas do rexistro: cero importacións significa que a ruta ou a identidade son incorrectas, unha importación con contido equivocado significa que estás editando un ficheiro distinto do que le o demo.

Desfai restaurando a unidade e a configuración anteriores xuntas e logo reinicia. Non fai falta reemitir certificados por nada disto, e tratar un problema de directorio como un problema de credenciais é como un arranxo de cinco minutos se converte nunha xanela de mantemento.

Artigos relacionados