Un profil care a funcționat ani de zile refuză brusc să pornească, iar mesajul numește o directivă pe care nimeni nu își amintește că a adăugat-o: key-method. Următorul rezultat de căutare sugerează adăugarea lui key-method 2 pentru compatibilitate, ceea ce este un sfat dintr-o altă epocă. Parserul care a respins linia este unul actual și nu are deloc o astfel de opțiune. Eliminarea liniei repară pornirea și nu schimbă nimic în felul în care cele două părți protejează sesiunea.

Exact acest decalaj dintre ce conține un profil și ce face protocolul în realitate este întregul subiect aici, și explică mai multe alte modificări pe care oamenii le fac în același timp. Explică de asemenea de ce acele modificări ajung de obicei într-un singur pachet.

Simptomul este o eroare de parsare, nu o eșuare a strângerii de mână

Opțiunile sunt citite înainte de a fi trimis orice pachet. Un profil cu o directivă necunoscută eșuează în acea etapă, așa că procesul nu ajunge niciodată la rețea și nu produce niciodată o eroare de strângere de mână. Formularea identifică de obicei opțiunea și fișierul, ceea ce face din aceasta una dintre cele mai ușor de atribuit eșuări. Nu sunt implicate niciun pachet, nicio rută și niciun firewall.

openvpn --config /etc/openvpn/client/office.ovpn --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log

Dacă mesajul numește directiva, diagnosticul este încheiat: fișierul conține ceva ce această compilare nu acceptă. Dacă mesajul numește în schimb o cale de fișier, problema este o includere sau o cheie lipsă, ceea ce este o altă secțiune a aceleiași etape de pornire.

Ceea ce nu ar trebui să concluzionați este că clientul sau serverul are nevoie de un mod de protocol mai vechi. O eșuare de parsare este o problemă de vocabular între fișierul dumneavoastră și binar, iar binarul în acest caz a pur și simplu scăpat un cuvânt din vocabularul său.

Directiva și formatul de transmisie sunt două lucruri diferite

Vechea opțiune key-method alegea cum este încadrat schimbul de chei TLS, iar schimbul modern este metoda cu mai multe pachete pe care acea opțiune o solicita cândva. Opțiunea a dispărut pentru că nu mai alegea nimic; formatul pe care îl numea a devenit singurul. Așadar, eliminarea liniei lasă sesiunea cu aceeași încadrare ca înainte. O modificare de text nu poate schimba asta în nicio direcție.

De aceea reintroducerea unui binar vechi pentru a „restaura” metoda 2 este reparația greșită. Nu restaurează nimic în afară de un parser mai vechi cu valori implicite mai vechi și vă costă corectările care au venit după el. Același raționament se aplică la slăbirea unei verificări de certificat sau a unei liste de cifruri în speranța că conexiunea revine.

O verificare utilă este versiunea și configurația parsată, nu prezența cuvântului în fișier:

openvpn --version | head -n 1
grep -rn 'key-method' /etc/openvpn/ 2>/dev/null

Ce trebuie eliminat și din ce fișier

Editați fișierul pe care procesul aflat în execuție îl citește efectiv, și numai acel fișier. Pe sistemele împachetate este de obicei profilul din directorul clientului sau serverului numit de unitate, nu o copie din directorul dumneavoastră home pe care o păstrați ca referință. Un profil generat poate fi reconstruit dintr-un șablon, așa că o modificare făcută doar în copia implementată va reveni după următoarea rulare de provizionare.

Ștergeți linia învechită și lăsați în pace punctul final, certificatele, politica de cifruri și setările canalului de control. Acestea sunt opțiuni acceptate de care procesul are nevoie și nu sunt implicate în eroarea de parsare. Dacă același profil conține alte directive pe care nu le recunoașteți, verificați fiecare în raport cu versiunea pe care o rulați, în loc să ștergeți un grup dintre ele până când procesul pornește.

Apoi porniți instanța dorită și citiți ieșirea ei la pornire. O pornire curată cu ascultătorul prezent este confirmarea că această etapă s-a încheiat; un test de client după aceea răspunde la altă întrebare.

Un profil respins și un client respins arată la fel

Două eșuări produc fire de suport similare și necesită dovezi diferite. Un server care își respinge propria configurație nu pornește niciodată, așa că niciun client nu se poate conecta la el. Un server care pornește bine și refuză un client rulează, iar jurnalul său conține motivul: o problemă de certificat, o opțiune împinsă pe care clientul nu o acceptă, o nepotrivire de cifru.

Opțiunea eliminată nu este un diagnostic pentru al doilea caz, iar apelul la ea pierde aceeași oră de două ori. Dacă jurnalul clientului arată refuzul serverului, citiți acel refuz; dacă arată o eroare locală, fișierul de inspectat este profilul clientului. Apelul la o directivă care nu mai există întârzie ambele investigații cu aceeași măsură.

Întrebări de compatibilitate la care linia nu a răspuns niciodată

Profilurile care circulă cu această directivă poartă de obicei o poveste despre o platformă anume, iar povestea supraviețuiește motivului tehnic. Un client mobil sau de desktop are în continuare nevoie de un profil complet acceptat: un lanț de certificate de încredere, un cifru de date acceptat de ambele capete, un mod de canal de control implementat de ambele capete și nicio directivă pe care compilarea clientului o respinge. Niciunul dintre acestea nu este decis de prezența sau absența vechii linii key-method.

Compresia este o chestiune de politică separată cu aceeași formă. Eliminarea unei linii key-method nu spune nimic despre dacă o directivă de compresie este acceptată sau acceptabilă în implementarea dumneavoastră, iar cele două decizii ar trebui luate independent. Ștergerea mai multor setări relevante pentru securitate deodată până când ceva se conectează este felul în care un profil funcțional devine unul neexplicat.

Păstrați o notă scurtă despre ce ați eliminat și de ce: opțiunea, versiunea care a respins-o și comanda care a arătat eroarea. Următoarea persoană care moștenește profilul va avea nevoie exact de acele trei fapte, iar a le scrie acum este mai ieftin decât a le reconstrui mai târziu.

Articole similare