Un costat del túnel signa el canal de control amb una ranura de clau que l'altre costat no comprova mai, i la connexió mor amb un error d'autenticació abans que s'intercanviï cap certificat. Així és com es veu un desajust de direcció a tls-auth, i és determinista: els mateixos dos fitxers fallen a cada intent, des de qualsevol xarxa. Res al registre no anomena l'opció que busqueu, i per això la gent refà claus i reemeten certificats que mai no estaven trencats. La solució és fer els dos extrems complementaris, o deixar-los tots dos bidireccionals, en lloc d'afeblir la verificació.

La fallada arriba abans dels certificats

Amb tls-auth, tots dos parells tenen la mateixa clau compartida i cadascun usa una de les dues ranures derivades: una ranura signa els paquets de control sortints, l'altra verifica els entrants. La direcció 0 i la direcció 1 assignen aquests papers en ordre oposat, així que la parella ha de ser complementària perquè les comprovacions HMAC coincideixin. Quan l'assignació s'inverteix en un costat, el receptor busca una signatura a la ranura equivocada i rebutja el paquet. La sessió acaba aquí, i per això l'error afecta l'autenticació de paquets i no res que produís el magatzem de certificats.

El determinisme importa per al diagnòstic, perquè un problema de temps o de camí deixa una empremta diferent: talls intermitents, un sentit que falla o una sessió que mor només en una xarxa concreta. Un desajust de direcció falla a la primera encaixada de mans cada vegada, i falla igual en una altra màquina amb els mateixos dos fitxers. Llegiu el registre a --verb 4 i trobeu el primer paquet rebutjat en lloc de l'última línia. Si aquest rebuig passa abans de qualsevol intercanvi de certificats, la clau compartida i la seva direcció són les dues coses que val la pena comprovar.

What you seeWhat it rules outNext check
Authentication error before any certificate is sentThe data channel is irrelevant; the control channel never authenticatedCompare tls-auth and its direction on both ends
Certificate or handshake failure after the control channel authenticatesThe shared key and its direction already agreeCheck the CA, the certificate dates and the hostname
Session completes but throughput or cipher warnings appearDirection was never the problemCompare the data-channel cipher settings
Startup stops on an options errorThe number itself is not the issueRe-read the inline versus external directive syntax

On viu el número

El manual d'OpenVPN 2.6 documenta dos llocs per a la direcció: el segon argument de tls-auth quan la clau és en un fitxer propi, i una línia key-direction independent quan la clau és incrustada al perfil. Tots dos fixen el mateix valor, així que un perfil ha d'usar una forma o l'altra, mai les dues. Ometre-ho també és una opció, i posa els dos parells en un arranjament bidireccional que funciona quan cap costat no anomena una direcció. Dos parells amb el mateix número no són en aquest arranjament: cadascun espera signar en una ranura i verificar a l'altra, i tots dos ho fan en el mateix sentit.

# server.conf, external key
tls-auth ta.key 0

# client.ovpn, external key
tls-auth ta.key 1

# client.ovpn, inline key
key-direction 1

La forma incrustada és una directiva en una línia pròpia, no un atribut a l'etiqueta d'obertura del bloc de clau, i afegir-hi un argument és un error, no un canvi de direcció. La col·locació també importa: la directiva queda fora del bloc a què pertany, així que un valor escrit dins del bloc es llegeix com a material de clau. Copieu l'arranjament que volia el distribuïdor del perfil en lloc d'inventar una parella, perquè un perfil que funciona contra un servidor potser ja està mirallat a l'altre costat.

Què deixa intacte l'opció

No xifra el trànsit d'aplicacions. tls-auth posa un HMAC al voltant dels paquets del canal de control, mentre que el canal de dades està protegit per claus de sessió negociades durant l'encaixada de mans, així que una pregunta de rendiment o de xifratge no té res a veure amb el número de direcció. El paràmetre tampoc afegeix una segona capa de xifratge, i aquesta és la suposició que envia la gent a buscar una clau més llarga.

No s'aplica a tls-crypt, un altre mecanisme de canal de control amb opcions i gestió de claus pròpies, i no diu res sobre la identitat del certificat de cap parell. Per tant, una coincidència de direcció que funciona només demostra que els dos extrems acorden com autenticar el canal de control, no que la cadena de confiança s'hagi validat.

Alineeu la parella i torneu a connectar

Compareu les dues configuracions abans de canviar-ne cap, perquè editar el costat que ja era correcte duplica la feina. El grep de sota mostra quin mecanisme tria cada fitxer; l'execució detallada mostra si el canal de control s'ha autenticat. Guardeu les dues sortides, perquè el proper canvi es pugui comparar amb un estat conegut.

grep -n -E 'tls-auth|tls-crypt|key-direction' server.conf client.ovpn
openvpn --config client.ovpn --verb 4 2>&1 | grep -i -E 'hmac|tls error|control channel'

Reinicieu tots dos parells després de qualsevol canvi, perquè aquests paràmetres es llegeixen una vegada a l'arrencada i recarregar un costat deixa la parella inconsistent durant tota la vida de la sessió antiga. Si el desplegament funciona ara sense direcció configurada, afegir el paràmetre en un parell reprodueix la fallada amb què vau començar; o deixeu-los tots dos o configureu-los tots dos. Canvieu un extrem alhora i guardeu el fitxer anterior, perquè una regressió sigui una reversió de dos minuts i no una reconstrucció.

Anoteu el mecanisme, el fitxer de clau i la direcció de cada extrem a les notes de desplegament, perquè si no la propera persona llegirà dos fitxers semblants i suposarà que els números s'han de correspondre. La direcció és un detall de coordinació, no una millora de seguretat: separa les dues direccions del canal de control i no fa res més.

Articles relacionats