Én OpenVPN-direktiv pr. linje, og hvorfor ombrydning lyver
En blødt ombrudt skærm er ikke et linjeskift i filen. Kontrollér de rigtige linjeskift, før du erstatter et fejlbehæftet afsnit med en fremmeds skabelon.
En profil, der før startede, fejler nu med en tilvalgsfejl, og den linje, parseren citerer, ser helt rimelig ud på skærmen. Det er fælden: en konfigurationsfil er en liste af fysiske linjer, hver med ét tilvalsnøgleord og dets argumenter, og en lang linje, der ombrydes af en editor, ser identisk ud med to linjer, indtil man ser på bytene. Intet ved netværket, certifikatet eller tunnelen er involveret i denne type fejl. To linjer, der ser identiske ud på skærmen, kan afvige med en enkelt byte.
Arbejd gennem kontrollerne nedenfor i rækkefølge, og stop ved den første, der fejler. Hver af dem er billigere end den næste, og hver af dem udelukker en anden forklaring.
Én linje, ét direktiv
Parseren læser en linje, tager det første ord som tilvalget og behandler resten som dette tilvals argumenter. En linje som cert server.crt port 1194 er derfor ikke to instrukser i rækkefølge. Det er ét cert-tilvalg med tre argumenter, og det tredje er ikke et filnavn, som tilvalget accepterer. At læse fejlen som et manglende linjeskift er rigtigt; at læse den som et manglende direktiv er ikke.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
De to rettede linjer er et fragment, ikke en konfiguration. De findes for at vise, hvor grænsen hører til. Hvert almindeligt direktiv i en profil følger samme regel, og en linje, der samler to af dem, giver enten en argumentfejl eller en værdi, som tilvalget ikke forventede.
Bevis, at linjeskiftet er ægte
Editorer ombryder til visning. Nogle indsætter også hårde linjeskift, når man indsætter, og nogle gør ikke, så det samme visuelle resultat kan komme fra to meget forskellige filer. Vis linjeafslutningerne, og tæl linjerne, før du ændrer noget. At måle koster en kommando; at gætte koster en aften.
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
I det første output vises hvert ægte linjeskift som en $-markør, så en ombrudt, men ubrudt linje viser ingen markør der, hvor skærmen ombryder. Den anden kommando udskriver nummererede linjer, hvilket er den hurtigste måde at sammenligne, hvad parseren rapporterer, med hvad filen indeholder.
Ekstra mellemrum skaber heller ikke et direktiv. Indrykning er kosmetisk, og en linje, der begynder med hvidrum, er stadig det samme enkelte tilvalg. Hvis fejlmeddelelsen peger på et linjenummer, skal du læse netop den linje i stedet for det afsnit, den hører til.
Citér en sti, ikke en direktivliste
Anførselstegn findes til argumenter, der indeholder mellemrum, ikke til at gruppere tilvalg. En certifikatsti med et mellemrum har brug for sine egne anførselstegn; to direktiver, der deler et par anførselstegn, er stadig én fejlbehæftet linje.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
Kontrollér tilvalsnavnene samtidig med layoutet, fordi en sammenføjet linje kan give et troværdigt tegn, der aldrig har eksisteret. Port-direktivet er port; en profil, der bruger noget andet til den samme idé, vil fejle, selv efter at linjegrænserne er rettet. Når et navn ser ukendt ud, skal du sammenligne det med tilvalslisten for den version, du kører, i stedet for med et forum-eksempel.
Hold inline-blokke som blokke
Profiler kan bære certifikater og nøgler inline, og disse blokke er data snarere end konfiguration. PEM-linjerne inde i en blok er ikke tilvalg, der skal flades ud, genindrykkes eller samles, og blokmarkørerne skal blive på deres egne linjer.
Behandl en inline-blok som et uigennemsigtigt område: ret tilvalslinjerne omkring den, lad dens indhold være byte for byte, og indsæt den aldrig i en offentlig supporttråd. Hvis et formateringsværktøj har skrevet blokken om, skal du gendanne den fra din PKI i stedet for at reparere den i hånden.
Ret det mindste afsnit, ikke skabelonen
Den fristende reparation er at erstatte hele filen med en konfiguration fra en vejledning, der “virker”. Det bytter én fejlbehæftet linje for en række politikændringer, som ingen har gennemgået: andre DH-parametre, komprimeringsindstillinger, cifervalg, duplikerede lyttere. Det oprindelige problem er lille og lokalt, og erstatningen er ingen af delene.
Kopiér profilen til en beskyttet arbejdsfil, ret linjegrænserne i den kopi, og lad tjenestens normale ejer indlæse den. Start derefter instansen, og læs den første fejl, hvis der er nogen, fra begyndelsen.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
Når parsefasen passerer, vil den næste fejl handle om en fil, et certifikat eller en cipher snarere end om ordforråd, og det er reel fremgang. Behold arbejdskopien og en enlinjes note om, hvad der blev sammenføjet; den samme indsættelse vil ske igen for en anden på samme hold.