Un perfil que antes arrancaba ahora falla con un error de opciones, y la línea que cita el analizador parece perfectamente razonable en pantalla. Esa es la trampa: un archivo de configuración es una lista de líneas físicas, cada una con una palabra clave de opción y sus argumentos, y una línea larga ajustada por un editor se ve idéntica a dos líneas hasta que se miran los bytes. Nada de la red, del certificado ni del túnel interviene en esta clase de fallo. Dos líneas que se ven idénticas en pantalla pueden diferir en un solo byte.

Recorra las comprobaciones siguientes en orden y deténgase en la primera que falle. Cada una es más barata que la siguiente, y cada una descarta una explicación distinta.

Una línea, una directiva

El analizador lee una línea, toma la primera palabra como la opción y trata el resto como argumentos de esa opción. Una línea como cert server.crt port 1194 no son, por tanto, dos instrucciones en secuencia. Es una opción cert con tres argumentos, y el tercero no es un nombre de archivo que la opción acepte. Leer el error como un salto de línea ausente es correcto; leerlo como una directiva ausente no lo es.

# malformed: one option, three arguments
cert server.crt port 1194

# intended: two options, one argument each
cert server.crt
port 1194

Esas dos líneas corregidas son un fragmento, no una configuración. Existen para mostrar dónde va la frontera. Toda directiva ordinaria de un perfil sigue la misma regla, y una línea que une dos de ellas produce un error de argumento o un valor que la opción no esperaba.

Demuestre que el salto de línea es real

Los editores ajustan para mostrar. Algunos además insertan saltos duros al pegar, y otros no, así que el mismo resultado visual puede venir de dos archivos muy distintos. Muestre los finales de línea y cuente las líneas antes de cambiar nada. Medir cuesta un comando; adivinar cuesta una tarde.

cat -A /etc/openvpn/server/lab.conf | sed -n '10,20p'
awk 'NR>=10 && NR<=20 {printf "%d:%s\n", NR, $0}' /etc/openvpn/server/lab.conf

En la primera salida, cada salto de línea real aparece como un marcador $, de modo que una línea ajustada pero no dividida no muestra marcador donde su pantalla hace el ajuste. El segundo comando imprime las líneas numeradas, que es la forma más rápida de comparar lo que informa el analizador con lo que contiene el archivo.

Los espacios adicionales tampoco crean una directiva. La indentación es cosmética, y una línea que empieza con espacio en blanco sigue siendo la misma opción única. Si el mensaje de error señala un número de línea, lea esa línea exacta en lugar del párrafo al que pertenece.

Cite una ruta, no una lista de directivas

Las comillas existen para argumentos que contienen espacios, no para agrupar opciones. Una ruta de certificado con un espacio necesita sus propias comillas; dos directivas que comparten un par de comillas siguen siendo una línea mal formada.

cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"

Compruebe los nombres de las opciones al mismo tiempo que la disposición, porque una línea unida puede producir un token de aspecto plausible que nunca existió. La directiva de puerto es port; un perfil que use otra cosa para la misma idea fallará incluso después de corregir los límites de línea. Cuando un nombre resulte desconocido, compárelo con la lista de opciones de la versión que ejecuta en lugar de con un ejemplo de foro.

Mantenga los bloques en línea como bloques

Los perfiles pueden llevar certificados y claves en línea, y esos bloques son datos, no configuración. Las líneas PEM dentro de un bloque no son opciones que deban aplanarse, reindentarse o unirse, y los marcadores del bloque tienen que permanecer en sus propias líneas.

Trate un bloque en línea como una región opaca: corrija las líneas de opciones a su alrededor, deje su contenido byte por byte intacto y nunca lo pegue en un hilo público de soporte. Si una herramienta de formato reescribió el bloque, restáurelo desde su PKI en vez de repararlo a mano.

Arregle la sección más pequeña, no la plantilla

La reparación tentadora es sustituir todo el archivo por una configuración de un tutorial que «funciona». Eso cambia una línea mal formada por un conjunto de cambios de política que nadie revisó: parámetros DH distintos, ajustes de compresión, elección de cifrado, escuchas duplicadas. El problema original es pequeño y local, y el reemplazo no es ni lo uno ni lo otro.

Copie el perfil a un archivo de trabajo protegido, corrija los límites de línea en esa copia y deje que el propietario habitual del servicio lo cargue. Después inicie la instancia y lea el primer error, si lo hay, desde el principio.

openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log

Cuando la fase de análisis pase, el siguiente fallo será sobre un archivo, un certificado o un cifrado en lugar de sobre vocabulario, y eso es un avance real. Guarde la copia de trabajo y una nota de una línea sobre qué se unió; el mismo pegado volverá a ocurrirle a otra persona del mismo equipo.

Artículos relacionados