O directivă OpenVPN pe linie și de ce ambalarea minte
Un ecran cu ambalare moale nu este o linie nouă în fișier. Verificați întreruperile reale de linie înainte de a înlocui o secțiune malformată cu șablonul unui străin.
Un profil care pornea odinioară eșuează acum cu o eroare de opțiuni, iar linia pe care o citează parserul pare perfect rezonabilă pe ecran. Aceasta este capcana: un fișier de configurare este o listă de linii fizice, fiecare cu un cuvânt-cheie de opțiune și argumentele sale, iar o linie lungă înfășurată de un editor arată identic cu două linii până când te uiți la octeți. Nimic din rețea, din certificat sau din tunel nu este implicat în această clasă de eșec. Două linii care arată identic pe ecran pot diferi printr-un singur octet.
Parcurgeți verificările de mai jos în ordine și opriți-vă la prima care eșuează. Fiecare este mai ieftină decât următoarea și fiecare elimină o explicație diferită.
O linie, o directivă
Parserul citește o linie, ia primul cuvânt drept opțiune și tratează restul ca argumente ale acelei opțiuni. O linie precum cert server.crt port 1194 nu sunt, așadar, două instrucțiuni la rând. Este o singură opțiune cert cu trei argumente, iar al treilea nu este un nume de fișier pe care opțiunea îl acceptă. Să citești eroarea ca pe o linie nouă lipsă este corect; să o citești ca pe o directivă lipsă nu este.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
Acele două linii corectate sunt un fragment, nu o configurație. Ele există pentru a arăta unde îi este locul graniței. Fiecare directivă obișnuită dintr-un profil urmează aceeași regulă, iar o linie care unește două dintre ele produce fie o eroare de argument, fie o valoare pe care opțiunea nu o aștepta.
Dovediți că întreruperea de linie este reală
Editorii înfășoară pentru afișare. Unele inserează și întreruperi dure când lipiți, altele nu, așa că același rezultat vizual poate veni din două fișiere foarte diferite. Afișați terminațiile de linie și numărați liniile înainte de a schimba ceva. Măsurarea costă o comandă; ghicitul costă o seară.
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
În prima ieșire, fiecare întrerupere reală de linie apare ca un marcator $, așa că o linie înfășurată dar nedespărțită nu arată niciun marcator acolo unde ecranul dvs. înfășoară. A doua comandă tipărește linii numerotate, care este cel mai rapid mod de a compara ce raportează parserul cu ce conține fișierul.
Nici spațiile suplimentare nu creează o directivă. Indentarea este cosmetică, iar o linie care începe cu spațiu alb rămâne aceeași opțiune unică. Dacă mesajul de eroare indică un număr de linie, citiți exact acea linie, nu paragraful din care face parte.
Citați o cale, nu o listă de directive
Ghilimelele există pentru argumentele care conțin spații, nu pentru gruparea opțiunilor. O cale de certificat cu un spațiu are nevoie de propriile ghilimele; două directive care împart o pereche de ghilimele rămân o singură linie malformată.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
Verificați numele opțiunilor în același timp cu aspectul, deoarece o linie unită poate produce un token plauzibil care nu a existat niciodată. Directiva de port este port; un profil care folosește altceva pentru aceeași idee va eșua chiar și după corectarea limitelor de linie. Când un nume pare necunoscut, comparați-l cu lista de opțiuni pentru versiunea pe care o rulați, nu cu un exemplu de forum.
Păstrați blocurile inline ca blocuri
Profilurile pot purta certificate și chei inline, iar acele blocuri sunt date, nu configurație. Liniile PEM dintr-un bloc nu sunt opțiuni de aplatizat, reindentat sau unit, iar marcatorii blocului trebuie să rămână pe liniile lor.
Tratați un bloc inline ca pe o regiune opacă: corectați liniile de opțiuni din jur, lăsați conținutul neatins octet cu octet și nu îl lipiți niciodată într-un fir public de asistență. Dacă un instrument de formatare a rescris blocul, restaurați-l din PKI-ul dvs. în loc să îl reparați manual.
Reparați cea mai mică secțiune, nu șablonul
Reparația tentantă este să înlocuiți întregul fișier cu o configurație dintr-un tutorial care „funcționează”. Aceasta schimbă o linie malformată pe un set de modificări de politică pe care nimeni nu le-a revizuit: alți parametri DH, setări de compresie, alegeri de cifrare, ascultători duplicați. Problema originală este mică și locală, iar înlocuirea nu este nici una, nici alta.
Copiați profilul într-un fișier de lucru protejat, corectați limitele de linie în acea copie și lăsați proprietarul obișnuit al serviciului să îl încarce. Apoi porniți instanța și citiți prima eroare, dacă există, de la început.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
Când etapa de parsare trece, următorul eșec va fi despre un fișier, un certificat sau o cifrare, nu despre vocabular, iar acesta este progres real. Păstrați copia de lucru și o notă de o linie despre ce a fost unit; aceeași lipire se va întâmpla din nou cuiva din aceeași echipă.