Un perfil que antes arrincaba agora falla cun erro de opcións, e a liña que cita o analizador parece perfectamente razoable na pantalla. Ese é o truco: un ficheiro de configuración é unha lista de liñas físicas, cada unha cunha palabra clave de opción e os seus argumentos, e unha liña longa axustada por un editor parece idéntica a dúas liñas ata que se miran os bytes. Nada da rede, do certificado nin do túnel intervé nesta clase de fallo. Dúas liñas idénticas na pantalla poden diferir nun só byte.

Realice as comprobacións seguintes en orde e detéñase na primeira que falle. Cada unha é máis barata ca a seguinte, e cada unha elimina unha explicación distinta.

Unha liña, unha directiva

O analizador le unha liña, toma a primeira palabra como a opción e trata o resto como argumentos desa opción. Unha liña como cert server.crt port 1194 non son, polo tanto, dúas instrucións en secuencia. É unha opción cert con tres argumentos, e o terceiro non é un nome de ficheiro que a opción acepte. Ler o erro como un salto de liña ausente é correcto; lelo como unha directiva ausente non o é.

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

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

Eses dúas liñas corrixidas son un fragmento, non unha configuración. Existen para mostrar onde vai a fronteira. Cada directiva ordinaria dun perfil segue a mesma regra, e unha liña que une dúas delas produce ou un erro de argumento ou un valor que a opción non esperaba.

Demostre que o salto de liña é real

Os editores axustan para amosar. Algúns tamén insiren saltos duros ao pegar, e outros non, así que o mesmo resultado visual pode vir de dous ficheiros moi distintos. Amose os finais de liña e conte as liñas antes de cambiar nada. Medir custa unha orde; adiviñar custa unha noite.

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

Na primeira saída, cada salto de liña real aparece como un marcador $, de xeito que unha liña axustada pero non dividida non amosa ningún marcador onde a pantalla fai o axuste. A segunda orde imprime liñas numeradas, que é a forma máis rápida de comparar o que informa o analizador co que contén o ficheiro.

Os espazos adicionais tampouco crean unha directiva. A indentación é cosmética, e unha liña que comeza con espazo en branco segue a ser a mesma opción única. Se a mensaxe de erro apunta a un número de liña, lea exactamente esa liña en lugar do parágrafo ao que pertence.

Cite un camiño, non unha lista de directivas

As comiñas existen para argumentos que conteñen espazos, non para agrupar opcións. Un camiño de certificado cun espazo precisa as súas propias comiñas; dúas directivas que comparten un par de comiñas seguen a ser unha única liña mal formada.

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

Comprobe os nomes das opcións ao mesmo tempo ca a disposición, porque unha liña unida pode producir un token de aspecto plausible que nunca existiu. A directiva de porto é port; un perfil que use outra cousa para a mesma idea fallará mesmo despois de corrixir os límites de liña. Cando un nome pareza descoñecido, compáreo coa lista de opcións da versión que executa en lugar de cun exemplo de foro.

Manteña os bloques incrustados como bloques

Os perfís poden levar certificados e chaves incrustados, e eses bloques son datos, non configuración. As liñas PEM dentro dun bloque non son opcións que se deban achandar, reindentar ou unir, e os marcadores do bloque teñen que ficar nas súas propias liñas.

Trate un bloque incrustado como unha rexión opaca: corrixa as liñas de opcións arredor, deixe o contido intacto byte a byte e nunca o pegue nun fío público de soporte. Se unha ferramenta de formato reescribiu o bloque, restáureo desde a súa PKI en vez de reparalo á man.

Arranxe a sección máis pequena, non o modelo

A reparación tentadora é substituír todo o ficheiro por unha configuración dun titorial que «funciona». Iso cambia unha liña mal formada por un conxunto de cambios de política que ninguén revisou: parámetros DH distintos, axustes de compresión, elección de cifrado, oíntes duplicados. O problema orixinal é pequeno e local, e o substituto non é nin unha cousa nin a outra.

Copie o perfil a un ficheiro de traballo protexido, corrixa os límites de liña nesa copia e deixe que o propietario habitual do servizo a cargue. Despois inicie a instancia e lea o primeiro erro, se o hai, desde o principio.

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

Cando a fase de análise pase, o seguinte fallo será sobre un ficheiro, un certificado ou un cifrado en lugar de sobre vocabulario, e iso é un progreso real. Garde a copia de traballo e unha nota dunha liña sobre o que se uniu; o mesmo pegado volverá ocorrer a outra persoa do mesmo equipo.

Artigos relacionados