Un perfil que abans arrencava ara falla amb un error d’opcions, i la línia que cita l’analitzador sembla del tot raonable a la pantalla. Aquesta és la trampa: un fitxer de configuració és una llista de línies físiques, cadascuna amb una paraula clau d’opció i els seus arguments, i una línia llarga ajustada per un editor és idèntica a dues línies fins que es miren els bytes. Res de la xarxa, del certificat ni del túnel no intervé en aquesta classe de fallada. Dues línies idèntiques a la pantalla poden diferir en un sol byte.

Feu les comprovacions següents en ordre i atureu-vos a la primera que falli. Cadascuna és més barata que la següent, i cadascuna descarta una explicació diferent.

Una línia, una directiva

L’analitzador llegeix una línia, pren la primera paraula com a opció i tracta la resta com a arguments d’aquesta opció. Una línia com cert server.crt port 1194 no són, doncs, dues instruccions en seqüència. És una opció cert amb tres arguments, i el tercer no és un nom de fitxer que l’opció accepti. Llegir l’error com un salt de línia que falta és correcte; llegir-lo com una directiva que falta no ho és.

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

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

Aquestes dues línies corregides són un fragment, no una configuració. Serveixen per mostrar on va la frontera. Cada directiva ordinària d’un perfil segueix la mateixa regla, i una línia que n’uneixi dues produeix o un error d’argument o un valor que l’opció no esperava.

Demostreu que el salt de línia és real

Els editors ajusten per mostrar. Alguns també insereixen salts durs en enganxar, i d’altres no, de manera que el mateix resultat visual pot venir de dos fitxers molt diferents. Mostreu els finals de línia i compteu les línies abans de canviar res. Mesurar costa una ordre; endevinar costa un vespre.

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

A la primera sortida, cada salt de línia real apareix com un marcador $, de manera que una línia ajustada però no dividida no mostra cap marcador on la pantalla fa l’ajust. La segona ordre imprimeix línies numerades, que és la manera més ràpida de comparar el que informa l’analitzador amb el que conté el fitxer.

Els espais addicionals tampoc no creen una directiva. La indentació és cosmètica, i una línia que comença amb espai continua sent la mateixa opció única. Si el missatge d’error apunta a un número de línia, llegiu exactament aquella línia en lloc del paràgraf al qual pertany.

Citeu un camí, no una llista de directives

Les cometes existeixen per als arguments que contenen espais, no per agrupar opcions. Un camí de certificat amb un espai necessita les seves pròpies cometes; dues directives que comparteixen un parell de cometes continuen sent una única línia mal formada.

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

Comproveu els noms de les opcions alhora que la disposició, perquè una línia unida pot produir un testimoni d’aspecte plausible que mai no ha existit. La directiva de port és port; un perfil que faci servir una altra cosa per a la mateixa idea fallarà fins i tot després de corregir els límits de línia. Quan un nom sembli desconegut, compareu-lo amb la llista d’opcions de la versió que executeu en lloc de amb un exemple de fòrum.

Mantingueu els blocs incrustats com a blocs

Els perfils poden portar certificats i claus incrustats, i aquests blocs són dades, no configuració. Les línies PEM dins d’un bloc no són opcions que s’hagin d’aplanar, reindentar o unir, i els marcadors del bloc han de romandre a les seves pròpies línies.

Tracteu un bloc incrustat com una regió opaca: corregiu les línies d’opcions del voltant, deixeu el contingut intacte byte a byte i no l’enganxeu mai en un fil públic de suport. Si una eina de format ha reescrit el bloc, restaureu-lo des de la vostra PKI en lloc de reparar-lo a mà.

Repareu la secció més petita, no la plantilla

La reparació temptadora és substituir tot el fitxer per una configuració d’un tutorial que «funciona». Això canvia una línia mal formada per un conjunt de canvis de política que ningú no ha revisat: paràmetres DH diferents, ajustos de compressió, elecció de xifratge, oients duplicats. El problema original és petit i local, i el reemplaçament no és ni una cosa ni l’altra.

Copieu el perfil a un fitxer de treball protegit, corregiu els límits de línia en aquesta còpia i deixeu que el propietari habitual del servei la carregui. Després inicieu la instància i llegiu el primer error, si n’hi ha, des del principi.

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

Quan la fase d’anàlisi passi, la fallada següent serà sobre un fitxer, un certificat o un xifratge en lloc de sobre vocabulari, i això és un progrés real. Guardeu la còpia de treball i una nota d’una línia sobre què s’ha unit; el mateix enganxat tornarà a passar a algú altre del mateix equip.

Articles relacionats