Jedna direktíva OpenVPN na riadok a prečo zalamovanie klame
Mäkké zalamovanie na obrazovke nie je nový riadok v súbore. Skontrolujte skutočné konce riadkov, kým nahradíte poškodenú sekciu cudzou šablónou.
Profil, ktorý predtým štartoval, teraz zlyháva s chybou volieb, a riadok, ktorý parser cituje, vyzerá na obrazovke úplne rozumne. To je pasca: konfiguračný súbor je zoznam fyzických riadkov, každý obsahuje jedno kľúčové slovo voľby a jej argumenty, a dlhý riadok zalamovaný editorom vyzerá rovnako ako dva riadky, kým sa nepozriete na bajty. Nič zo siete, certifikátu ani tunela do tejto triedy zlyhania nezasahuje. Dva riadky, ktoré na obrazovke vyzerajú rovnako, sa môžu líšiť jediným bajtom.
Prejdite kontroly nižšie v poradí a zastavte pri prvej, ktorá zlyhá. Každá je lacnejšia ako tá nasledujúca a každá vylučuje iné vysvetlenie.
Jeden riadok, jedna direktíva
Parser prečíta riadok, vezme prvé slovo ako voľbu a zvyšok považuje za argumenty tejto voľby. Riadok ako cert server.crt port 1194 teda nie sú dve inštrukcie za sebou. Je to jedna voľba cert s tromi argumentmi, a tretí nie je názov súboru, ktorý by voľba prijímala. Čítať chybu ako chýbajúci nový riadok je správne; čítať ju ako chýbajúcu direktívu správne nie je.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
Tieto dva opravené riadky sú fragment, nie konfigurácia. Existujú, aby ukázali, kam patrí hranica. Každá bežná direktíva v profile sa riadi rovnakým pravidlom a riadok, ktorý dve z nich spojí, vyprodukuje buď chybu argumentu, alebo hodnotu, ktorú voľba neočakávala.
Dokážte, že koniec riadku je skutočný
Editori zalamujú kvôli zobrazeniu. Niektoré pri vkladaní vkladajú aj tvrdé konce riadkov, iné nie, takže rovnaký vizuálny výsledok môže pochádzať z dvoch veľmi odlišných súborov. Ukážte konce riadkov a spočítajte riadky, kým čokoľvek zmeníte. Meranie stojí jeden príkaz; hádanie stojí večer.
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
V prvom výstupe sa každý skutočný koniec riadku objaví ako značka $, takže zalamovaný, ale nerozdelený riadok neukáže žiadnu značku tam, kde sa váš displej zalamuje. Druhý príkaz vypisuje očíslované riadky, čo je najrýchlejší spôsob, ako porovnať, čo parser hlási, s tým, čo súbor obsahuje.
Ani medzery navyše direktívu nevytvoria. Odsadenie je kozmetické a riadok začínajúci prázdnym znakom je stále tá istá jediná voľba. Ak chybová správa ukazuje na číslo riadku, čítajte presne ten riadok, nie odsek, ku ktorému patrí.
Citovanie cesty, nie zoznamu direktív
Úvodzovky existujú pre argumenty s medzerami, nie pre zoskupovanie volieb. Cesta k certifikátu s medzerou potrebuje vlastné úvodzovky; dve direktívy zdieľajúce jeden pár úvodzoviek sú stále jeden poškodený riadok.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
Skontrolujte názvy volieb súčasne s rozvrhnutím, pretože spojený riadok môže vytvoriť vierohodne vyzerajúci token, ktorý nikdy neexistoval. Direktíva portu je port; profil, ktorý pre rovnakú myšlienku používa niečo iné, zlyhá aj po oprave hraníc riadkov. Keď sa názov zdá neznámy, porovnajte ho so zoznamom volieb pre verziu, ktorú prevádzkujete, namiesto príkladu z fóra.
Inline bloky nechajte ako bloky
Profily môžu niesť certifikáty a kľúče inline a tieto bloky sú dáta, nie konfigurácia. Riadky PEM vnútri bloku nie sú voľby, ktoré by sa mali splošťovať, znovu odsadzovať alebo spájať, a značky bloku musia zostať na vlastných riadkoch.
Zaobchádzajte s inline blokom ako s nepriehľadnou oblasťou: opravte riadky volieb okolo neho, jeho obsah nechajte bajt po bajte byť a nikdy ho nevkladajte do verejného vlákna podpory. Ak blok prepísal nástroj na formátovanie, obnovte ho z vašej PKI, namiesto toho, aby ste ho opravovali ručne.
Opravte najmenšiu časť, nie šablónu
Lákavá oprava je nahradiť celý súbor konfiguráciou z návodu, ktorý „funguje“. To vymení jeden poškodený riadok za súbor zmien zásad, ktoré nikto neskontroloval: iné parametre DH, nastavenia kompresie, voľbu šifry, duplicitných poslucháčov. Pôvodný problém je malý a lokálny a náhrada nie je ani jedno.
Skopírujte profil do chráneného pracovného súboru, opravte hranice riadkov v tejto kópii a nechajte bežného vlastníka služby, aby ju načítal. Potom spustite inštanciu a prečítajte prvú chybu, ak nejaká je, od začiatku.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
Keď fáza parsovania prejde, ďalšie zlyhanie sa bude týkať súboru, certifikátu alebo šifry, nie slovnej zásoby, a to je skutočný pokrok. Ponechajte si pracovnú kópiu a jednořádkovú poznámku o tom, čo bolo spojené; rovnaké vloženie sa stane znova niekomu inému v tom istom tíme.