As configurações de OpenVPN no router voltam após reiniciar: conserte o gerador
O firmware que reconstrói a configuração de OpenVPN a cada arranque descarta as suas edições. Corrija o gancho do gerador e depois compare o ficheiro gerado após um reinício.
O firmware de um router doméstico ou de um NAS reconstrói muitas vezes a configuração de OpenVPN a cada arranque, pelo que uma diretiva que acrescenta sobrevive exatamente até ao próximo arranque. O mesmo se aplica às chaves escritas num formulário web, onde o valor guardado pode voltar corrompido após guardar. Nenhum destes sintomas significa que a alteração foi rejeitada. Significa que a edição ficou num ficheiro que o firmware trata como saída, e que o local duradouro está um passo antes na sequência de arranque.
Porque o ficheiro editado é regenerado
Um script de arranque monta a configuração do servidor a partir de um modelo e depois inicia o daemon, o que faz do ficheiro renderizado um artefacto de compilação em vez de uma fonte. Tudo o que é acrescentado após o arranque é invisível para a execução seguinte desse script. O segundo padrão é mais subtil: as entradas de chave e certificado na interface web são guardadas numa forma escapada, e guardar o formulário pode empurrar esse texto escapado para o ficheiro que o daemon lê. De qualquer forma, a configuração renderizada é o local errado para uma alteração duradoura.
Veja o que a sequência de arranque escreve e quando. A resposta é quase sempre um script no diretório init ou de arranque automático do firmware.
Insira a diretiva onde o script constrói o ficheiro
Os equipamentos QTS regeneram a configuração do servidor OpenVPN dentro do script init que inicia o daemon, pelo que a edição tem de acontecer aí. Acrescente o apêndice imediatamente antes do comando de arranque em vez de editar o ficheiro gerado.
sed -i '/daemon_mgr/i echo client-config-dir clientconfig >>/etc/openvpn/server.conf' /etc/init.d/vpn_openvpn.sh
grep -c client-config-dir /etc/openvpn/server.confAncore a inserção num comando que não se desloque, porque os números de linha mudam entre compilações. Como o próprio script init é substituído durante o arranque, a alteração tem de ser reemitida a partir do gancho de arranque automático do firmware sempre que o sistema inicia. Após um reinício, conte as ocorrências no ficheiro gerado: uma linha significa que a correção funcionou, enquanto duas significam que o gancho corre mais do que uma vez. Investigue a execução dupla em separado, porque não é a mesma falha que uma alteração que desapareceu.
Corrija um formulário que guardou chaves escapadas
Nas páginas ao estilo Asus, os campos de certificado e chave mostram texto escapado, e guardar após um ajuste não relacionado pode escrever essas entidades de volta no disco. Trabalhe a partir de uma cópia descodificada e guarde apenas uma vez, quando todas as edições estiverem prontas.
openssl dhparam -out dh2048.pem 2048
grep -n "BEGIN DH PARAMETERS" dh2048.pemAo substituir um novo conjunto de parâmetros, cole apenas o payload base64 se o rótulo pedir o corpo da chave, e mantenha as linhas de armadura apenas quando o campo espera um bloco PEM completo. Recuperar uma página já guardada na sua forma escapada significa geralmente limpar os campos afetados e aplicar, o que permite ao firmware reconstruí-los. Gere tudo o que estiver acima de 2048 bits numa estação de trabalho, porque o fornecimento de entropia do router torna a operação lenta e por vezes pouco fiável. Guarde o ficheiro de parâmetros num local a que consiga chegar após uma reposição de fábrica.
Verifique novamente após atualizações
As atualizações de firmware substituem os scripts init e podem apagar o diretório de arranque automático, pelo que a correção tem de ser reinstalada e testada novamente. Compare o ficheiro regenerado com a cópia que guardou e confirme que a diretiva está presente exatamente uma vez. Um valor visível na interface web não é prova de que o daemon o recebeu, porque a página lê campos guardados. Escreva o comando da correção e a versão do firmware nas notas de manutenção para que a próxima atualização as transporte.
Depois ligue um cliente e leia o registo do servidor para a opção enviada. Uma definição que só existiu alguma vez num formulário é uma definição que ninguém testou.