Jedna direktiva OpenVPN na řádek a proč zalamování lže
Měkké zalamování na obrazovce není nový řádek v souboru. Zkontrolujte skutečné konce řádků, než nahradíte poškozenou sekci cizí šablonou.
Profil, který dřív startoval, teď selhává s chybou voleb, a řádek, který parser cituje, vypadá na obrazovce naprosto rozumně. To je past: konfigurační soubor je seznam fyzických řádků, každý obsahuje jedno klíčové slovo volby a jeho argumenty, a dlouhý řádek zalamovaný editorem vypadá stejně jako dva řádky, dokud se nepodíváte na bajty. Nic ze sítě, certifikátu ani tunelu do této třídy selhání nezasahuje. Dva řádky, které na obrazovce vypadají stejně, se mohou lišit jediným bajtem.
Projděte kontroly níže v pořadí a zastavte u první, která selže. Každá je levnější než ta následující a každá vylučuje jiné vysvětlení.
Jeden řádek, jedna direktiva
Parser přečte řádek, vezme první slovo jako volbu a zbytek považuje za argumenty této volby. Řádek jako cert server.crt port 1194 tedy nejsou dvě instrukce za sebou. Je to jedna volba cert se třemi argumenty, a třetí není název souboru, který by volba přijímala. Číst chybu jako chybějící nový řádek je správné; číst ji jako chybějící direktivu správné není.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
Tyto dva opravené řádky jsou fragment, ne konfigurace. Existují, aby ukázaly, kam patří hranice. Každá běžná direktiva v profilu se řídí stejným pravidlem a řádek, který dvě z nich spojí, vyprodukuje buď chybu argumentu, nebo hodnotu, kterou volba neočekávala.
Dokažte, že konec řádku je skutečný
Editory zalamují kvůli zobrazení. Některé při vkládání vkládají i tvrdé konce řádků, jiné ne, takže stejný vizuální výsledek může pocházet ze dvou velmi odlišných souborů. Ukažte konce řádků a spočítejte řádky, než cokoli změníte. Měření stojí jeden příkaz; hádání 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 prvním výstupu se každý skutečný konec řádku objeví jako značka $, takže zalamovaný, ale nerozdělený řádek neukáže žádnou značku tam, kde se váš displej zalamuje. Druhý příkaz vypisuje očíslované řádky, což je nejrychlejší způsob, jak porovnat, co parser hlásí, s tím, co soubor obsahuje.
Ani mezery navíc direktivu nevytvoří. Odsazení je kosmetické a řádek začínající prázdným znakem je pořád tatáž jediná volba. Pokud chybová zpráva ukazuje na číslo řádku, čtěte přesně ten řádek, ne odstavec, ke kterému patří.
Citování cesty, ne seznamu direktiv
Uvozovky existují pro argumenty s mezerami, ne pro seskupování voleb. Cesta k certifikátu s mezerou potřebuje vlastní uvozovky; dvě direktivy sdílející jeden pár uvozovek jsou pořád jeden poškozený řádek.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
Zkontrolujte názvy voleb současně s rozvržením, protože spojený řádek může vytvořit věrohodně vypadající token, který nikdy neexistoval. Direktiva portu je port; profil, který pro stejnou myšlenku používá něco jiného, selže i po opravě hranic řádků. Když se název zdá neznámý, porovnejte ho se seznamem voleb pro verzi, kterou provozujete, místo s příkladem z fóra.
Inline bloky nechte jako bloky
Profily mohou nést certifikáty a klíče inline a tyto bloky jsou data, ne konfigurace. Řádky PEM uvnitř bloku nejsou volby, které by se měly zplošťovat, znovu odsazovat nebo spojovat, a značky bloku musí zůstat na vlastních řádcích.
Zacházejte s inline blokem jako s neprůhlednou oblastí: opravte řádky voleb kolem něj, jeho obsah nechte bajt po bajtu být a nikdy ho nevkládejte do veřejného vlákna podpory. Pokud blok přepsal nástroj pro formátování, obnovte ho z vaší PKI, místo abyste ho opravovali ručně.
Opravte nejmenší část, ne šablonu
Lákavá oprava je nahradit celý soubor konfigurací z návodu, který „funguje“. To vymění jeden poškozený řádek za soubor změn zásad, které nikdo nezkontroloval: jiné parametry DH, nastavení komprese, volbu šifry, duplicitní posluchače. Původní problém je malý a lokální a náhrada není ani jedno.
Zkopírujte profil do chráněného pracovního souboru, opravte hranice řádků v této kopii a nechte běžného vlastníka služby, aby ji načetl. Pak spusťte instanci a přečtěte první chybu, pokud nějaká je, od začátku.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
Když fáze parsování projde, další selhání se bude týkat souboru, certifikátu nebo šifry, nikoli slovní zásoby, a to je skutečný pokrok. Ponechte si pracovní kopii a jednořádkovou poznámku o tom, co bylo spojeno; stejné vložení se stane znovu někomu jinému ve stejném týmu.