Профил што порано се стартуваше сега не успева со грешка за опции, а редот што парсерот го цитира изгледа сосема разумно на екранот. Тоа е стапицата: конфигурациската датотека е список од физички редови, секој со еден клучен збор за опција и неговите аргументи, а долг ред префрлен од уредувач изгледа идентично со два реда додека не се погледнат бајтите. Ништо од мрежата, сертификатот или тунелот не учествува во оваа класа на неуспех. Два реда што изгледаат исто на екранот можат да се разликуваат по еден бајт.

Изведете ги проверките подолу по ред и застанете на првата што не успева. Секоја е поевтина од следната и секоја исклучува различно објаснување.

Еден ред, една директива

Парсерот чита ред, првиот збор го зема како опција и го третира остатокот како аргументи на таа опција. Затоа ред како 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

Кога фазата на парсирање ќе помине, следниот неуспех ќе биде за датотека, сертификат или шифра наместо за лексика, и тоа е вистински напредок. Зачувајте го работното копие и белешка на еден ред за тоа што е поврзано; истото лепење повторно ќе се случи кај некој друг во истиот тим.

Поврзани статии