Једна OpenVPN директива по реду и зашто преламање редова лаже
Мекопрелмљен екран није нови ред у датотеци. Проверите стварне преломе редова пре него што замените неисправан одељак туђим шаблоном.
Профил који је раније покретао сада не успева са грешком опција, а ред који парсер цитира изгледа потпуно разумно на екрану. То је замка: конфигурациона датотека је листа физичких редова, сваки садржи једну кључну реч опције и њене аргументе, а дуг ред који едитор прелама изгледа идентично као два реда док се не погледају бајтови. Ништа о мрежи, сертификату или тунелу није укључено у ову класу грешке. Два реда која на екрану изгледају идентично могу се разликовати у једном бајту.
Прођите кроз провере испод по реду и зауставите се на првој која не успе. Свака је јефтинија од следеће, и свака искључује друго објашњење.
Један ред, једна директива
Парсер чита ред, узима прву реч као опцију и третира остатак као аргументе те опције. Ред као cert server.crt port 1194 дакле нису две инструкције заредом. То је једна опција cert са три аргумента, а трећи није назив датотеке који опција прихвата. Читати грешку као недостајући нови ред је исправно; читати је као недостајућу директиву није.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
Та два исправљена реда су фрагмент, не конфигурација. Постоје да покажу где граница припада. Свака обична директива у профилу следи исто правило, а ред који споји две од њих производи или грешку аргумента или вредност коју опција није очекивала.
Докажите да је прелом реда стваран
Едитори преламају због приказа. Неки такође умећу тврде преломе када налепите, а неки не, па исти визуелни резултат може доћи из две веома различите датотеке. Прикажите завршетке редова и пребројте редове пре него што било шта промените. Мерење кошта једну наредбу; нагађање кошта једно вече.
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
У првом излазу сваки стварни прелом реда појављује се као ознака $, па преломљен али нераздвојен ред не показује никакву ознаку тамо где се ваш екран прелама. Друга наредба исписује нумерисане редове, што је најбржи начин да упоредите оно што парсер пријављује са оним што датотека садржи.
Ни додатни размаци не стварају директиву. Увлачење је козметичко, а ред који почиње размаком и даље је иста појединачна опција. Ако порука о грешци показује на број реда, прочитајте тачно тај ред, а не одломак којем припада.
Цитирајте путању, не листу директива
Наводници постоје за аргументе који садрже размаке, не за груписање опција. Путања сертификата са размаком треба сопствене наводнике; две директиве које деле један пар наводника и даље су један неисправан ред.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
Проверите називе опција истовремено с изгледом, јер спојен ред може произвести уверљиво изгледајући токен који никада није постојао. Директива порта је port; профил који користи нешто друго за исту идеју неће успети чак и након исправљања граница редова. Када назив изгледа непознато, упоредите га са листом опција за верзију коју покрећете, а не са примером са форума.
Задржите уграђене блокове као блокове
Профили могу носити сертификате и кључеве уграђене, а ти блокови су подаци, не конфигурација. PEM редови унутар блока нису опције које треба спљоштити, поново увући или спојити, и ознаке блока морају остати на сопственим редовима.
Третирајте уграђени блок као непрозирну област: исправите редове опција око њега, оставите његов садржај бајт по бајт нетакнут и никада га не лепите у јавну тему подршке. Ако је алат за форматирање преписао блок, вратите га из своје PKI уместо да га поправљате ручно.
Поправите најмањи одељак, не шаблон
Примамљива поправка је заменити целу датотеку конфигурацијом из туторијала који „ради”. То мења један неисправан ред за скуп промена политике које нико није прегледао: други DH параметри, поставке компресије, избор шифре, дуплирани слушаоци. Изворни проблем је мали и локалан, а замена није ни једно ни друго.
Копирајте профил у заштићену радну датотеку, исправите границе редова у тој копији и пустите уобичајеног власника услуге да је учита. Затим покрените инстанцу и прочитајте прву грешку, ако је има, од почетка.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
Када фаза парсирања прође, следећи неуспех ће се односити на датотеку, сертификат или шифру уместо на речник, и то је стваран напредак. Сачувајте радну копију и једноредну белешку о томе шта је спојено; исто лепљење ће се поново догодити неком другом у истом тиму.