Profilo, kiu antaŭe ekfunkciis, nun malsukcesas pro opcia eraro, kaj la linio, kiun la analizilo citas, aspektas tute racia sur la ekrano. Tio estas la kaptilo: agorda dosiero estas listo de fizikaj linioj, ĉiu kun unu opcia ŝlosilvorto kaj ĝiaj argumentoj, kaj longa linio faldita de redaktilo aspektas identa al du linioj ĝis oni rigardas la bajtojn. Nenio pri la reto, la atestilo aŭ la tunelo partoprenas en ĉi tiu klaso de malsukceso. Du linioj, kiuj aspektas identaj sur la ekrano, povas diferi per unu sola bajto.

Trairu la subajn kontrolojn laŭ ordo kaj haltu ĉe la unua, kiu malsukcesas. Ĉiu estas pli malmultekosta ol la sekva, kaj ĉiu forigas alian klarigon.

Unu linio, unu direktivo

La analizilo legas linion, prenas la unuan vorton kiel la opcion kaj traktas la reston kiel argumentojn de tiu opcio. Linio kiel cert server.crt port 1194 do ne estas du instrukcioj sinsekve. Ĝi estas unu opcio cert kun tri argumentoj, kaj la tria ne estas dosiernomo, kiun la opcio akceptas. Legi la eraron kiel mankantan linisalton estas ĝuste; legi ĝin kiel mankantan direktivon ne estas.

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

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

Tiuj du korektitaj linioj estas fragmento, ne agordo. Ili ekzistas por montri, kie apartenas la limo. Ĉiu ordinara direktivo en profilo sekvas la saman regulon, kaj linio, kiu kunigas du el ili, produktas aŭ argumentan eraron aŭ valoron, kiun la opcio ne atendis.

Pruvu, ke la linisalto estas reala

Redaktiloj faldas por montrado. Iuj ankaŭ enmetas malmolajn rompojn, kiam oni algluas, kaj iuj ne, do la sama vida rezulto povas veni de du tre malsamaj dosieroj. Montru la linifinojn kaj kalkulu la liniojn antaŭ ol ŝanĝi ion ajn. Mezuri kostas unu komandon; diveni kostas vesperon.

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

En la unua eligo ĉiu reala linisalto aperas kiel $-markilo, do linio faldita sed ne dividita montras neniun markilon tie, kie via ekrano faldas. La dua komando presas numeritajn liniojn, kio estas la plej rapida maniero kompari tion, kion la analizilo raportas, kun tio, kion la dosiero enhavas.

Kromaj spacoj ankaŭ ne kreas direktivon. Deŝovo estas kosmetika, kaj linio, kiu komenciĝas per blankaĵo, estas ankoraŭ la sama unu opcio. Se la erarmesaĝo indikas linenumeron, legu precize tiun linion anstataŭ la alineon, al kiu ĝi apartenas.

Citu vojon, ne liston de direktivoj

Citisignoj ekzistas por argumentoj, kiuj enhavas spacojn, ne por grupigi opciojn. Atestila vojo kun spaco bezonas siajn proprajn citisignojn; du direktivoj, kiuj dividas paron da citisignoj, estas ankoraŭ unu fuŝa linio.

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

Kontrolu la opciajn nomojn samtempe kiel la aranĝon, ĉar kunigita linio povas produkti kredindan ĵetonon, kiu neniam ekzistis. La pord-direktivo estas port; profilo, kiu uzas ion alian por la sama ideo, malsukcesos eĉ post kiam la linilimoj estas korektitaj. Kiam nomo ŝajnas nekonata, komparu ĝin kun la opcia listo por la versio, kiun vi rulas, anstataŭ kun forumekzemplo.

Tenadu enliniajn blokojn kiel blokojn

Profiloj povas porti atestilojn kaj ŝlosilojn enlinie, kaj tiuj blokoj estas datumoj, ne agordo. La PEM-linioj ene de bloko ne estas opcioj por platigi, denove deŝovi aŭ kunigi, kaj la blokmarkiloj devas resti sur propraj linioj.

Traktu enlinian blokon kiel maldiafan regionon: korektu la opciajn liniojn ĉirkaŭ ĝi, lasu ĝian enhavon bajto post bajto netuŝita, kaj neniam algluu ĝin en publikan subtenan fadenon. Se formatilo reverkis la blokon, restarigu ĝin el via PKI anstataŭ ripari ĝin permane.

Riparu la plej malgrandan sekcion, ne la ŝablonon

La tentiga riparo estas anstataŭigi la tutan dosieron per agordo el lernilo, kiu «funkcias». Tio interŝanĝas unu fuŝan linion kontraŭ aro da politikaj ŝanĝoj, kiujn neniu reviziis: malsamaj DH-parametroj, kunpremaj agordoj, ĉifraj elektoj, duoblaj aŭskultantoj. La origina problemo estas malgranda kaj loka, kaj la anstataŭaĵo estas nek unu nek la alia.

Kopiu la profilon al protektita labora dosiero, korektu la linilimojn en tiu kopio, kaj lasu la normalan posedanton de la servo ŝargi ĝin. Poste startigu la instancon kaj legu la unuan eraron, se estas, de la komenco.

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

Kiam la analiza fazo pasas, la sekva malsukceso koncernos dosieron, atestilon aŭ ĉifron anstataŭ vortprovizon, kaj tio estas vera progreso. Konservu la laboran kopion kaj unulinian noton pri tio, kio estis kunigita; la sama algluo denove okazos al iu alia en la sama teamo.

Rilataj artikoloj