En profil som før startet, feiler nå med en alternativfeil, og linjen parseren siterer ser helt rimelig ut på skjermen. Det er fellen: en konfigurasjonsfil er en liste av fysiske linjer, hver med ett alternativnøkkelord og argumentene sine, og en lang linje som ombrytes av en editor ser identisk ut med to linjer helt til man ser på bytene. Ingenting ved nettverket, sertifikatet eller tunnelen er involvert i denne typen feil. To linjer som ser identiske ut på skjermen kan avvike med én enkelt byte.

Gå gjennom kontrollene nedenfor i rekkefølge og stopp ved den første som feiler. Hver av dem er billigere enn den neste, og hver av dem utelukker en annen forklaring.

Én linje, én direktiv

Parseren leser en linje, tar det første ordet som alternativet og behandler resten som argumentene til det alternativet. En linje som cert server.crt port 1194 er derfor ikke to instruksjoner i rekkefølge. Det er ett cert-alternativ med tre argumenter, og det tredje er ikke et filnavn som alternativet godtar. Å lese feilen som et manglende linjeskift er riktig; å lese den som en manglende direktiv er det 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 linjene er et fragment, ikke en konfigurasjon. De finnes for å vise hvor grensen hører hjemme. Hver vanlige direktiv i en profil følger samme regel, og en linje som slår sammen to av dem gir enten en argumentfeil eller en verdi som alternativet ikke forventet.

Bevis at linjeskiftet er ekte

Editorer ombryter for visning. Noen setter også inn harde brudd når du limer inn, andre ikke, så det samme visuelle resultatet kan komme fra to svært ulike filer. Vis linjesluttene og tell linjene før du endrer noe. Å måle koster én kommando; å gjette koster en kveld.

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 den første utskriften vises hvert ekte linjeskift som en $-markør, så en ombrutt men udelt linje viser ingen markør der skjermen bryter. Den andre kommandoen skriver ut nummererte linjer, som er den raskeste måten å sammenligne det parseren rapporterer med det filen inneholder.

Ekstra mellomrom lager heller ikke en direktiv. Innrykk er kosmetisk, og en linje som begynner med hvitt rom er fortsatt det samme enkeltalternativet. Hvis feilmeldingen peker på et linjenummer, les akkurat den linjen i stedet for avsnittet den tilhører.

Siter en sti, ikke en direktivliste

Anførselstegn finnes for argumenter som inneholder mellomrom, ikke for å gruppere alternativer. En sertifikatsti med et mellomrom trenger sine egne anførselstegn; to direktiver som deler et par anførselstegn er fortsatt én feilaktig linje.

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

Kontroller alternativnavnene samtidig med oppsettet, fordi en sammenføyd linje kan gi en troverdig token som aldri har eksistert. Portdirektivet er port; en profil som bruker noe annet for samme idé vil feile selv etter at linjegrensene er rettet. Når et navn virker ukjent, sammenlign det med alternativlisten for versjonen du kjører i stedet for med et forumseksempel.

Hold innebygde blokker som blokker

Profiler kan bære sertifikater og nøkler innebygd, og disse blokkene er data snarere enn konfigurasjon. PEM-linjene inne i en blokk er ikke alternativer som skal flates ut, innrykkes på nytt eller slås sammen, og blokkmarkørene må bli på egne linjer.

Behandle en innebygd blokk som et ugjennomsiktig område: rett alternativlinjene rundt den, la innholdet være byte for byte, og lim det aldri inn i en offentlig støttetråd. Hvis et formateringsverktøy har skrevet om blokken, gjenopprett den fra PKI-en din i stedet for å reparere den for hånd.

Rett den minste delen, ikke malen

Den fristende reparasjonen er å erstatte hele filen med en konfigurasjon fra en veiledning som «fungerer». Det bytter én feilaktig linje mot en rekke policyendringer som ingen har gjennomgått: andre DH-parametere, komprimeringsinnstillinger, chiffervalg, dupliserte lyttere. Det opprinnelige problemet er lite og lokalt, og erstatningen er ingen av delene.

Kopier profilen til en beskyttet arbeidsfil, rett linjegrensene i den kopien, og la tjenestens vanlige eier laste den. Start deretter instansen og les den første feilen, hvis noen, fra begynnelsen.

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

Når parsingen passerer, vil neste feil handle om en fil, et sertifikat eller en chiffer i stedet for om ordforråd, og det er reell fremgang. Ta vare på arbeidskopien og et enlinjes notat om hva som ble slått sammen; den samme innlimingen vil skje igjen for noen andre på samme team.

Relaterte artikler