Viena OpenVPN direktyva vienoje eilutėje, ir kodėl perkėlimas meluoja
Minkštai perkeltas ekranas nėra nauja eilutė faile. Patikrinkite tikruosius eilučių lūžius prieš pakeisdami sugadintą skyrių svetimu šablonu.
Profilis, kuris anksčiau startuodavo, dabar nepavyksta su parinkčių klaida, o eilutė, kurią cituoja analizatorius, ekrane atrodo visiškai pagrįstai. Tai spąstai: konfigūracijos failas yra fizinių eilučių sąrašas, kiekvienoje yra vienas parinkties raktinis žodis ir jo argumentai, o ilga eilutė, kurią perkelia redaktorius, atrodo taip pat kaip dvi eilutės, kol nepažvelgi į baitus. Niekas iš tinklo, sertifikato ar tunelio nedalyvauja šioje gedimų klasėje. Dvi eilutės, kurios ekrane atrodo vienodai, gali skirtis vienu baitu.
Atlikite toliau pateiktus patikrinimus iš eilės ir sustokite ties pirmuoju, kuris nepavyksta. Kiekvienas pigesnis už kitą, ir kiekvienas pašalina kitą paaiškinimą.
Viena eilutė, viena direktyva
Analizatorius nuskaito eilutę, pirmą žodį ima kaip parinktį, o likusią dalį traktuoja kaip tos parinkties argumentus. Eilutė, tokia kaip cert server.crt port 1194, todėl nėra dvi instrukcijos iš eilės. Tai viena parinktis cert su trimis argumentais, o trečiasis nėra failo vardas, kurį parinktis priimtų. Skaityti klaidą kaip trūkstamą naujos eilutės simbolį yra teisinga; skaityti ją kaip trūkstamą direktyvą nėra.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
Tos dvi pataisytos eilutės yra fragmentas, ne konfigūracija. Jos egzistuoja tam, kad parodytų, kur priklauso riba. Kiekviena įprasta profilio direktyva laikosi tos pačios taisyklės, o eilutė, sujungianti dvi iš jų, sukelia arba argumento klaidą, arba reikšmę, kurios parinktis nesitikėjo.
Įrodykite, kad eilutės lūžis yra tikras
Redaktoriai perkelia, kad būtų rodoma. Kai kurie įterpia ir kietuosius lūžius, kai įklijuojate, o kiti ne, todėl tas pats vizualus rezultatas gali kilti iš dviejų labai skirtingų failų. Parodykite eilučių pabaigas ir suskaičiuokite eilutes prieš ką nors keisdami. Matuoti kainuoja vieną komandą; spėlioti kainuoja vakarą.
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
Pirmoje išvestyje kiekvienas tikras eilutės lūžis rodomas kaip $ žymeklis, todėl perkelta, bet nepadalyta eilutė nerodo jokio žymeklio ten, kur jūsų ekranas perkelia. Antroji komanda spausdina sunumeruotas eilutes, o tai greičiausias būdas palyginti, ką praneša analizatorius, su tuo, ką faile yra.
Papildomi tarpai taip pat nesukuria direktyvos. Įtrauka yra kosmetinė, o eilutė, prasidedanti tarpu, vis dar yra ta pati viena parinktis. Jei klaidos pranešimas nurodo eilutės numerį, skaitykite būtent tą eilutę, o ne pastraipą, kuriai ji priklauso.
Cituokite kelią, ne direktyvų sąrašą
Kabutės egzistuoja argumentams, kuriuose yra tarpų, o ne parinktims grupuoti. Sertifikato kelias su tarpu turi savo kabutes; dvi direktyvos, dalijančios vieną kabučių porą, vis tiek yra viena sugadinta eilutė.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
Tikrinkite parinkčių pavadinimus kartu su išdėstymu, nes sujungta eilutė gali sukurti patikimai atrodantį žetoną, kurio niekada nebuvo. Prievado direktyva yra port; profilis, kuris tai pačiai idėjai naudoja ką nors kita, nepavyksta net ir pataisius eilučių ribas. Kai pavadinimas atrodo nepažįstamas, palyginkite jį su parinkčių sąrašu jūsų paleidžiamai versijai, o ne su forumo pavyzdžiu.
Laikykite įterptus blokus blokais
Profiliai gali turėti sertifikatų ir raktų įterptai, ir tie blokai yra duomenys, o ne konfigūracija. PEM eilutės bloko viduje nėra parinktys, kurias reikėtų išlyginti, iš naujo įtraukti ar sujungti, o bloko žymekliai turi likti savo eilutėse.
Elkitės su įterptu bloku kaip su nepermatoma sritimi: pataisykite parinkčių eilutes aplink jį, palikite jo turinį nepaliestą baitas po baito ir niekada neįklijuokite jo į viešą pagalbos giją. Jei formatavimo įrankis bloką perrašė, atkurkite jį iš savo PKI, o ne taisykite rankomis.
Taisykite mažiausią skyrių, ne šabloną
Viliojantis taisymas yra pakeisti visą failą konfigūracija iš pamokos, kuri „veikia“. Tai maino vieną sugadintą eilutę į politikos pakeitimų rinkinį, kurio niekas neperžiūrėjo: kiti DH parametrai, suspaudimo nustatymai, šifro pasirinkimai, dubliuoti klausytojai. Pradinė problema yra maža ir vietinė, o pakeitimas nėra nei viena, nei kita.
Nukopijuokite profilį į apsaugotą darbo failą, pataisykite eilučių ribas toje kopijoje ir leiskite įprastam paslaugos savininkui jį įkelti. Tada paleiskite egzempliorių ir skaitykite pirmąją klaidą, jei tokia yra, nuo pradžių.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
Kai analizės etapas praeina, kita klaida bus apie failą, sertifikatą ar šifrą, o ne apie žodyną, ir tai tikra pažanga. Išsaugokite darbo kopiją ir vienos eilutės pastabą apie tai, kas buvo sujungta; tas pats įklijavimas vėl nutiks kam nors kitam toje pačioje komandoje.