Um perfil que antes arrancava agora falha com um erro de opções, e a linha que o analisador cita parece perfeitamente razoável no ecrã. É a armadilha: um ficheiro de configuração é uma lista de linhas físicas, cada uma com uma palavra-chave de opção e os seus argumentos, e uma linha longa quebrada por um editor parece idêntica a duas linhas até se olhar para os bytes. Nada da rede, do certificado ou do túnel está envolvido nesta classe de falha. Duas linhas idênticas no ecrã podem diferir num único byte.

Execute as verificações abaixo por ordem e pare na primeira que falhar. Cada uma é mais barata do que a seguinte, e cada uma elimina uma explicação diferente.

Uma linha, uma diretiva

O analisador lê uma linha, toma a primeira palavra como a opção e trata o resto como os argumentos dessa opção. Uma linha como cert server.crt port 1194 não são, portanto, duas instruções em sequência. É uma opção cert com três argumentos, e o terceiro não é um nome de ficheiro que a opção aceite. Ler o erro como uma quebra de linha em falta está certo; lê-lo como uma diretiva em falta não está.

# malformed: one option, three arguments
cert server.crt port 1194

# intended: two options, one argument each
cert server.crt
port 1194

Essas duas linhas corrigidas são um fragmento, não uma configuração. Existem para mostrar onde fica a fronteira. Cada diretiva comum de um perfil segue a mesma regra, e uma linha que junte duas delas produz ou um erro de argumento, ou um valor que a opção não esperava.

Prove que a quebra de linha é real

Os editores quebram para apresentação. Alguns também inserem quebras rígidas ao colar, outros não, pelo que o mesmo resultado visual pode vir de dois ficheiros muito diferentes. Mostre os fins de linha e conte as linhas antes de alterar seja o que for. Medir custa um comando; adivinhar custa uma noite.

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

Na primeira saída, cada quebra de linha real aparece como um marcador $, pelo que uma linha quebrada mas não dividida não mostra marcador onde o ecrã quebra. O segundo comando imprime linhas numeradas, que é a forma mais rápida de comparar o que o analisador relata com o que o ficheiro contém.

Espaços extra também não criam uma diretiva. A indentação é cosmética, e uma linha que começa com espaço em branco continua a ser a mesma opção única. Se a mensagem de erro apontar para um número de linha, leia exatamente essa linha em vez do parágrafo a que pertence.

Cite um caminho, não uma lista de diretivas

As aspas existem para argumentos que contêm espaços, não para agrupar opções. Um caminho de certificado com um espaço precisa das suas próprias aspas; duas diretivas que partilham um par de aspas continuam a ser uma única linha malformada.

cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"

Verifique os nomes das opções ao mesmo tempo que a disposição, porque uma linha unida pode produzir um token de aspeto plausível que nunca existiu. A diretiva de porta é port; um perfil que use outra coisa para a mesma ideia falhará mesmo depois de corrigir os limites de linha. Quando um nome parecer desconhecido, compare-o com a lista de opções da versão que executa em vez de com um exemplo de fórum.

Mantenha os blocos embutidos como blocos

Os perfis podem transportar certificados e chaves embutidos, e esses blocos são dados, não configuração. As linhas PEM dentro de um bloco não são opções a achatar, a reindentar ou a juntar, e os marcadores do bloco têm de ficar nas suas próprias linhas.

Trate um bloco embutido como uma região opaca: corrija as linhas de opções à volta, deixe o conteúdo intacto byte a byte e nunca o cole num tópico público de suporte. Se uma ferramenta de formatação reescreveu o bloco, restaure-o a partir da sua PKI em vez de o reparar à mão.

Corrija a secção mais pequena, não o modelo

A reparação tentadora é substituir o ficheiro inteiro por uma configuração de um tutorial que «funciona». Isso troca uma linha malformada por um conjunto de alterações de política que ninguém reviu: parâmetros DH diferentes, definições de compressão, escolhas de cifra, ouvintes duplicados. O problema original é pequeno e local, e a substituição não é nem uma coisa nem outra.

Copie o perfil para um ficheiro de trabalho protegido, corrija os limites de linha nessa cópia e deixe o proprietário normal do serviço carregá-la. Depois inicie a instância e leia o primeiro erro, se houver, desde o início.

openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log

Quando a fase de análise passar, a falha seguinte será sobre um ficheiro, um certificado ou uma cifra em vez de sobre vocabulário, e isso é progresso real. Guarde a cópia de trabalho e uma nota de uma linha sobre o que foi unido; a mesma colagem voltará a acontecer a outra pessoa da mesma equipa.

Artigos relacionados