’n Profiel wat vroeër begin het, misluk nou met ’n opsiefout, en die reël wat die ontleder aanhaal, lyk heeltemal redelik op die skerm. Dit is die lokval: ’n konfigurasielêer is ’n lys fisiese reëls, elk met een opsietrefwoord en sy argumente, en ’n lang reël wat deur ’n redigeerder teruggevou word, lyk identies aan twee reëls totdat jy na die grepe kyk. Niks aan die netwerk, die sertifikaat of die tonnel is by hierdie klas fout betrokke nie. Twee reëls wat op die skerm identies lyk, kan met ’n enkele greep verskil.

Werk die kontroles hieronder in volgorde deur en stop by die eerste een wat misluk. Elkeen is goedkoper as die volgende, en elkeen skakel ’n ander verklaring uit.

Een reël, een riglyn

Die ontleder lees ’n reël, neem die eerste woord as die opsie en behandel die res as daardie opsie se argumente. ’n Reël soos cert server.crt port 1194 is dus nie twee instruksies in volgorde nie. Dit is een cert-opsie met drie argumente, en die derde een is nie ’n lêernaam wat die opsie aanvaar nie. Om die fout as ’n ontbrekende nuwe reël te lees, is reg; om dit as ’n ontbrekende riglyn te lees, is nie.

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

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

Daardie twee reggestelde reëls is ’n fragment, nie ’n konfigurasie nie. Hulle bestaan om te wys waar die grens hoort. Elke gewone riglyn in ’n profiel volg dieselfde reël, en ’n reël wat twee daarvan saamvoeg, lewer óf ’n argumentfout óf ’n waarde wat die opsie nie verwag het nie.

Bewys dat die reëlbreuk werklik is

Redigeerders vou vir vertoning. Sommige voeg ook harde breuke in wanneer jy plak, en sommige nie, so dieselfde visuele resultaat kan uit twee baie verskillende lêers kom. Wys die reël-eindes en tel die reëls voordat jy iets verander. Om te meet kos een opdrag; om te raai kos ’n aand.

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

In die eerste uitvoer verskyn elke werklike nuwe reël as ’n $-merker, so ’n teruggevoude maar ongebreekte reël wys geen merker waar jou skerm vou nie. Die tweede opdrag druk genommerde reëls, wat die vinnigste manier is om te vergelyk wat die ontleder rapporteer met wat die lêer bevat.

Ekstra spasies skep ook nie ’n riglyn nie. Indentasie is kosmeties, en ’n reël wat met witruimte begin, is steeds dieselfde enkele opsie. As die foutboodskap na ’n reëlnommer wys, lees daardie presiese reël eerder as die paragraaf waaraan dit behoort.

Haal ’n pad aan, nie ’n lys riglyne nie

Aanhalingstekens bestaan vir argumente wat spasies bevat, nie vir die groepering van opsies nie. ’n Sertifikaatpad met ’n spasie het sy eie aanhalingstekens nodig; twee riglyne wat ’n paar aanhalingstekens deel, is steeds een foutiewe reël.

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

Kontroleer die opsiename terselfdertyd as die uitleg, want ’n saamgevoegde reël kan ’n geloofwaardige teken lewer wat nooit bestaan het nie. Die poort-riglyn is port; ’n profiel wat iets anders vir dieselfde idee gebruik, sal misluk selfs nadat die reëlgrense reggestel is. Wanneer ’n naam onbekend lyk, vergelyk dit met die opsielys vir die weergawe wat jy hardloop eerder as met ’n forumvoorbeeld.

Hou ingebedde blokke as blokke

Profiele kan sertifikate en sleutels ingebed dra, en daardie blokke is data eerder as konfigurasie. Die PEM-reëls binne ’n blok is nie opsies wat platgemaak, heringedeel of saamgevoeg moet word nie, en die blokmerkers moet op hul eie reëls bly.

Behandel ’n ingebedde blok as ’n ondeursigtige gebied: korrigeer die opsiereëls daaromheen, laat die inhoud greep vir greep alleen, en plak dit nooit in ’n openbare ondersteuningsdraad nie. As ’n formateringsinstrument die blok herskryf het, herstel dit uit jou PKI eerder as om dit met die hand te herstel.

Maak die kleinste gedeelte reg, nie die sjabloon nie

Die aanloklike herstel is om die hele lêer te vervang met ’n konfigurasie uit ’n handleiding wat “werk”. Dit ruil een foutiewe reël vir ’n stel beleidsveranderinge wat niemand nagegaan het nie: ander DH-parameters, kompressie-instellings, syferkeuses, duplikaat-luisteraars. Die oorspronklike probleem is klein en plaaslik, en die vervanging is nie een van die twee nie.

Kopieer die profiel na ’n beskermde werklêer, korrigeer die reëlgrense in daardie kopie, en laat die normale eienaar van die diens dit laai. Begin dan die instansie en lees die eerste fout, indien enige, van die begin af.

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

Wanneer die ontledingstadium slaag, sal die volgende mislukking oor ’n lêer, ’n sertifikaat of ’n syfer gaan eerder as oor woordeskat, en dit is werklike vordering. Hou die werkkopie en ’n eenreël-nota oor wat saamgevoeg is; dieselfde plak sal weer met iemand anders in dieselfde span gebeur.

Verwante artikels