Yksi OpenVPN-direktiivi per rivi, ja miksi rivitys valehtelee
Pehmeästi rivitetty näkymä ei ole tiedoston uusi rivi. Tarkista todelliset rivinvaihdot ennen kuin korvaat viallisen osan vieraan mallipohjalla.
Profiili, joka ennen käynnistyi, epäonnistuu nyt asetusvirheeseen, ja rivi, jonka jäsennin mainitsee, näyttää ruudulla täysin järkevältä. Siinä ansa: asetustiedosto on luettelo fyysisistä riveistä, joista jokaisessa on yksi asetusavainsana ja sen argumentit, ja pitkä, editorin rivityttämä rivi näyttää identtiseltä kahden rivin kanssa, kunnes katsoo tavuja. Verkko, varmenteet tai tunneli eivät liity tähän virheluokkaan. Kaksi ruudulla identtiseltä näyttävää riviä voivat erota yhdellä tavulla.
Käy alla olevat tarkistukset järjestyksessä ja pysähdy ensimmäiseen, joka epäonnistuu. Jokainen on halvempi kuin seuraava, ja jokainen sulkee pois eri selityksen.
Yksi rivi, yksi direktiivi
Jäsennin lukee rivin, ottaa ensimmäisen sanan asetukseksi ja käsittelee loput kyseisen asetuksen argumentteina. Rivi kuten cert server.crt port 1194 ei siis ole kaksi peräkkäistä käskyä. Se on yksi cert-asetus, jolla on kolme argumenttia, eikä kolmas ole tiedostonimi, jonka asetus hyväksyisi. Virheen lukeminen puuttuvana rivinvaihtona on oikein; sen lukeminen puuttuvana direktiivinä ei ole.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
Ne kaksi korjattua riviä ovat katkelma, eivät asetustiedosto. Ne ovat olemassa näyttääkseen, mihin raja kuuluu. Jokainen tavallinen profiilin direktiivi noudattaa samaa sääntöä, ja rivi, joka yhdistää kaksi niistä, tuottaa joko argumenttivirheen tai arvon, jota asetus ei odottanut.
Todista, että rivinvaihto on todellinen
Editorit rivityttävät näyttöä varten. Jotkin lisäävät liittäessä myös kovia rivinvaihtoja, toiset eivät, joten sama visuaalinen tulos voi tulla kahdesta hyvin erilaisesta tiedostosta. Näytä rivien loput ja laske rivit ennen kuin muutat mitään. Mittaaminen maksaa yhden komennon; arvaaminen maksaa illan.
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
Ensimmäisessä tulosteessa jokainen todellinen rivinvaihto näkyy $-merkkinä, joten rivitetty mutta jakamaton rivi ei näytä merkkiä siinä, missä ruutu rivityttää. Toinen komento tulostaa numeroidut rivit, mikä on nopein tapa verrata sitä, mitä jäsennin raportoi, siihen, mitä tiedosto sisältää.
Ylimääräiset välilyönnitkään eivät luo direktiiviä. Sisennys on kosmeettinen, ja välilyönnillä alkava rivi on edelleen sama yksittäinen asetus. Jos virheilmoitus osoittaa rivinumeroon, lue juuri se rivi äläkä kappaletta, johon se kuuluu.
Lainaa polkua, älä direktiiviluetteloa
Lainausmerkit ovat argumentteja varten, joissa on välilyöntejä, ei asetusten ryhmittelyyn. Välilyönnin sisältävä varmentepolku tarvitsee omat lainausmerkkinsä; kaksi direktiiviä, jotka jakavat yhden lainausmerrkiparin, ovat edelleen yksi viallinen rivi.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
Tarkista asetusten nimet samaan aikaan asettelun kanssa, koska yhdistetty rivi voi tuottaa uskottavalta näyttävän tokenin, jota ei koskaan ollut. Portin direktiivi on port; profiili, joka käyttää samaan ideaan jotain muuta, epäonnistuu myös rivirajojen korjaamisen jälkeen. Kun nimi näyttää tuntemattomalta, vertaa sitä käyttämäsi version asetusluetteloon äläkä foorumiesimerkkiin.
Pidä rivinsisäiset lohkot lohkoina
Profiilit voivat sisältää varmenteita ja avaimia rivinsisäisesti, ja ne lohkot ovat dataa, eivät asetuksia. Lohkon sisällä olevat PEM-rivit eivät ole asetuksia, joita pitäisi litistää, sisentää uudelleen tai yhdistää, ja lohkon merkkien on pysyttävä omilla riveillään.
Kohtele rivinsisäistä lohkoa läpinäkymättömänä alueena: korjaa sen ympärillä olevat asetusrivit, jätä sen sisältö tavu tavulta rauhaan äläkä koskaan liitä sitä julkiseen tukiketjuun. Jos muotoilutyökalu kirjoitti lohkon uudelleen, palauta se PKI:stäsi sen sijaan että korjaisit sitä käsin.
Korjaa pienin osa, älä mallipohjaa
Houkuuttava korjaus on korvata koko tiedosto ohjeen asetuksilla, joka „toimii”. Se vaihtaa yhden viallisen rivin joukkoon käytäntömuutoksia, joita kukaan ei tarkistanut: eri DH-parametrit, pakkausasetukset, salausvalinnat, päällekkäiset kuuntelijat. Alkuperäinen ongelma on pieni ja paikallinen, eikä korvaus ole kumpaakaan.
Kopioi profiili suojattuun työtiedostoon, korjaa rivirajat siinä kopiossa ja anna palvelun tavanomaisen omistajan ladata se. Käynnistä sitten instanssi ja lue ensimmäinen virhe, jos sellainen on, alusta alkaen.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
Kun jäsennysvaihe menee läpi, seuraava virhe koskee tiedostoa, varmennetta tai salausta eikä sanastoa, ja se on todellista edistystä. Säilytä työkopio ja yhden rivin muistiinpano siitä, mitä yhdistettiin; sama liittäminen tapahtuu uudelleen jollekulle toiselle samassa tiimissä.