Üks OpenVPN direktiiv rea kohta ja miks murdmine valetab
Pehmelt murtud ekraan ei ole failis uus rida. Kontrollige tegelikke reavahetusi enne, kui asendate rikkis lõigu võõra malliga.
Profiil, mis varem käivitus, nurjub nüüd valikute veaga, ja rida, mida parser tsiteerib, tundub ekraanil täiesti mõistlik. See on lõks: konfiguratsioonifail on füüsiliste ridade loend, igas on üks valiku märksõna ja selle argumendid, ja pikk redaktori poolt murtud rida näeb välja identne kahe reaga, kuni vaatate baite. Midagi võrgust, sertifikaadist ega tunnelist ei ole selles tõrgete klassis kaasatud. Kaks rida, mis ekraanil näevad identsed välja, võivad erineda ühe baidi võrra.
Tehke allolevad kontrollid järjekorras ja peatuge esimesel, mis nurjub. Igaüks on odavam kui järgmine, ja igaüks välistab erineva seletuse.
Üks rida, üks direktiiv
Parser loeb rea, võtab esimese sõna valikuna ja käsitleb ülejäänut selle valiku argumentidena. Rida nagu cert server.crt port 1194 ei ole seega kaks järjestikust käsku. See on üks valik cert kolme argumendiga, ja kolmas ei ole failinimi, mille valik vastu võtaks. Vea lugemine puuduva reavahetusena on õige; selle lugemine puuduva direktiivina ei ole.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
Need kaks parandatud rida on fragment, mitte konfiguratsioon. Need on selleks, et näidata, kuhu piir kuulub. Iga tavaline profiili direktiiv järgib sama reeglit, ja rida, mis ühendab kaks neist, tekitab kas argumendivea või väärtuse, mida valik ei oodanud.
Tõestage, et reavahetus on tegelik
Redaktorid murravad kuvamiseks. Mõned sisestavad kleepimisel ka kõvasid murde, teised mitte, nii et sama visuaalne tulemus võib tulla kahest väga erinevast failist. Näidake rea lõppe ja loendage read enne, kui midagi muudate. Mõõtmine maksab ühe käsu; oletamine maksab õhtu.
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
Esimeses väljundis ilmub iga tegelik reavahetus $-märgina, nii et murtud, kuid jagamata rida ei näita märki seal, kus teie ekraan murrab. Teine käsk prindib nummerdatud read, mis on kiireim viis võrrelda seda, mida parser teatab, sellega, mida fail sisaldab.
Ka lisaruumid ei loo direktiivi. Taand on kosmeetiline, ja tühikuga algav rida on ikka seesama üksik valik. Kui veateade osutab reanumbrile, lugege täpselt seda rida, mitte lõiku, kuhu see kuulub.
Tsiteerige teed, mitte direktiivide loendit
Jutumärgid on mõeldud argumentidele, mis sisaldavad tühikuid, mitte valikute rühmitamiseks. Tühikuga sertifikaaditee vajab oma jutumärke; kaks direktiivi, mis jagavad ühte jutumärkide paari, on ikka üks rikkis rida.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
Kontrollige valikute nimesid samal ajal paigutusega, sest ühendatud rida võib tekitada usutava välimusega märgi, mida kunagi ei eksisteerinud. Pordi direktiiv on port; profiil, mis kasutab sama idee jaoks midagi muud, nurjub ka pärast reapiiride parandamist. Kui nimi tundub võõras, võrrelge seda teie käivitatava versiooni valikute loendiga, mitte foorumi näitega.
Hoidke manustatud plokid plokkidena
Profiilid võivad kanda sertifikaate ja võtmeid manustatult, ja need plokid on andmed, mitte konfiguratsioon. Ploki sees olevad PEM-read ei ole valikud, mida lamedaks muuta, uuesti taandada või ühendada, ja plokimärgid peavad jääma omaette ridadele.
Käsitlege manustatud plokki läbipaistmatu piirkonnana: parandage selle ümber olevad valikuread, jätke selle sisu bait-baidi haaval puutumata ja ärge kunagi kleepige seda avalikku tugiteemasse. Kui vormindusriist ploki ümber kirjutas, taastage see oma PKI-st, mitte parandage käsitsi.
Parandage väikseim lõik, mitte mall
Kiusatuslik parandus on asendada kogu fail konfiguratsiooniga õpetusest, mis „töötab”. See vahetab ühe rikkis rea hulga poliitikamuudatuste vastu, mida keegi ei vaadanud üle: teised DH-parameetrid, tihendusseaded, šifrivalikud, dubleeritud kuulajad. Algne probleem on väike ja kohalik, ja asendus ei ole kumbki.
Kopeerige profiil kaitstud tööfaili, parandage selle koopia reapiirid ja laske teenuse tavapärasel omanikul see laadida. Seejärel käivitage eksemplar ja lugege esimest viga, kui see on, algusest peale.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
Kui parsimisetapp läbib, puudutab järgmine tõrge faili, sertifikaati või šifrit, mitte sõnavara, ja see on tõeline edasiminek. Hoidke töökopeeritud faili ja üherealist märget selle kohta, mis ühendati; sama kleepimine juhtub uuesti kellelegi teisele samas meeskonnas.