Jedna OpenVPN direktiva po redu, i zašto prelamanje laže
Meko prelomljen ekran nije novi red u datoteci. Provjerite stvarne prelome redova prije nego što zamijenite neispravan odjeljak tuđim predloškom.
Profil koji je prije pokretao sada ne uspijeva s greškom opcija, a red koji parser citira izgleda potpuno razumno na ekranu. To je zamka: konfiguracijska datoteka je lista fizičkih redova, svaki sadrži jednu ključnu riječ opcije i njene argumente, a dug red koji editor prelama izgleda identično kao dva reda dok se ne pogledaju bajtovi. Ništa o mreži, certifikatu ili tunelu nije uključeno u ovu klasu greške. Dva reda koja na ekranu izgledaju identično mogu se razlikovati u jednom bajtu.
Prođite kroz provjere ispod po redu i zaustavite se na prvoj koja ne uspije. Svaka je jeftinija od sljedeće, i svaka isključuje drugo objašnjenje.
Jedan red, jedna direktiva
Parser čita red, uzima prvu riječ kao opciju i tretira ostatak kao argumente te opcije. Red kao cert server.crt port 1194 dakle nisu dvije instrukcije zaredom. To je jedna opcija cert s tri argumenta, a treći nije naziv datoteke koji opcija prihvaća. Čitati grešku kao nedostajući novi red je ispravno; čitati je kao nedostajuću direktivu nije.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
Ta dva ispravljena reda su fragment, ne konfiguracija. Postoje da pokažu gdje granica pripada. Svaka obična direktiva u profilu slijedi isto pravilo, a red koji spoji dvije od njih proizvodi ili grešku argumenta ili vrijednost koju opcija nije očekivala.
Dokažite da je prelom reda stvaran
Editori prelamaju zbog prikaza. Neki također umeću tvrde prelome kada zalijepite, a neki ne, pa isti vizualni rezultat može doći iz dvije vrlo različite datoteke. Pokažite završetke redova i prebrojite redove prije nego što bilo šta promijenite. Mjerenje košta jednu naredbu; nagađanje košta jedno veče.
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
U prvom izlazu svaki stvarni prelom reda pojavljuje se kao oznaka $, pa prelomljen ali nerazdvojen red ne pokazuje nikakvu oznaku tamo gdje se vaš ekran prelama. Druga naredba ispisuje numerisane redove, što je najbrži način da uporedite ono što parser prijavljuje s onim što datoteka sadrži.
Ni dodatni razmaci ne stvaraju direktivu. Uvlačenje je kozmetičko, a red koji počinje razmakom i dalje je ista pojedinačna opcija. Ako poruka o grešci pokazuje na broj reda, pročitajte tačno taj red, a ne odlomak kojem pripada.
Citirajte putanju, ne listu direktiva
Navodnici postoje za argumente koji sadrže razmake, ne za grupisanje opcija. Putanja certifikata s razmakom treba vlastite navodnike; dvije direktive koje dijele jedan par navodnika i dalje su jedan neispravan red.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
Provjerite nazive opcija istovremeno s izgledom, jer spojeni red može proizvesti uvjerljivo izgledajući token koji nikada nije postojao. Direktiva porta je port; profil koji koristi nešto drugo za istu ideju neće uspjeti čak i nakon ispravljanja granica redova. Kada naziv izgleda nepoznato, uporedite ga s listom opcija za verziju koju pokrećete, a ne s primjerom s foruma.
Zadržite ugrađene blokove kao blokove
Profili mogu nositi certifikate i ključeve ugrađene, a ti blokovi su podaci, ne konfiguracija. PEM redovi unutar bloka nisu opcije koje treba spljoštiti, ponovo uvlačiti ili spajati, i oznake bloka moraju ostati na vlastitim redovima.
Tretirajte ugrađeni blok kao neprozirno područje: ispravite redove opcija oko njega, ostavite njegov sadržaj bajt po bajt netaknut i nikada ga ne lijepite u javnu temu podrške. Ako je alat za formatiranje prepisao blok, vratite ga iz svoje PKI umjesto da ga popravljate ručno.
Popravite najmanji odjeljak, ne predložak
Primamljiva popravka je zamijeniti cijelu datoteku konfiguracijom iz tutorijala koji „radi”. To mijenja jedan neispravan red za skup promjena politike koje niko nije pregledao: drugi DH parametri, postavke kompresije, izbor šifre, duplicirani slušaoci. Izvorni problem je mali i lokalan, a zamjena nije ni jedno ni drugo.
Kopirajte profil u zaštićenu radnu datoteku, ispravite granice redova u toj kopiji i pustite uobičajenog vlasnika usluge da je učita. Zatim pokrenite instancu i pročitajte prvu grešku, ako je ima, od početka.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
Kada faza parsiranja prođe, sljedeći neuspjeh će se odnositi na datoteku, certifikat ili šifru umjesto na rječnik, i to je stvaran napredak. Sačuvajte radnu kopiju i jednorednu bilješku o tome šta je spojeno; isto lijepljenje će se ponovo dogoditi nekome drugom u istom timu.