Адна дырэктыва 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
Калі этап разбору пройдзены, наступная памылка будзе пра файл, сертыфікат або шыфр, а не пра лексіку, і гэта сапраўдны прагрэс. Захавайце рабочую копію і нататку ў адзін радок пра тое, што было злучана; тое самае ўстаўленне паўторыцца ў кагосьці іншага ў той самай камандзе.