Num tópico de fórum, ifconfig-noexec é apresentado como a correção que mantém uma sessão SSH viva quando um túnel sobe. O raciocínio parece plausível até verificares o que a opção realmente toca. Impede o OpenVPN de configurar o endereço da interface do túnel e entrega esses valores a scripts; sobre para onde vão as respostas à tua ligação de gestão, não diz nada. Acreditar no contrário produz um túnel sem endereço utilizável e uma sessão SSH que continua a morrer.

O que a opção realmente delega

Por omissão, o cliente sobe o dispositivo do túnel e atribui os endereços local e remoto que o servidor lhe deu. Com ifconfig-noexec definido, esse passo é ignorado, e os valores negociados são exportados para o ambiente dos scripts para que outra coisa os possa aplicar.

A propriedade muda de mãos. No seu lugar não se inventa nada.

Portanto, a pergunta a que a opção responde é quem configura a interface, e a pergunta a que não responde é como os pacotes encontram o caminho de volta até ti. Mantém as duas separadas, ou vais passar uma noite a editar rotas para compensar uma interface sem endereço.

Três opções semelhantes com tarefas diferentes

A família é fácil de confundir porque os nomes diferem numa palavra e os sintomas sobrepõem-se. Lê o que cada uma suprime antes de escolher qualquer delas.

OptionWhat stops happening
ifconfig-noexecOpenVPN's own tunnel-address configuration; values go to scripts instead
route-noexecAutomatic route addition and removal; route details go to a script
route-nopullServer-pushed routes and related options such as DNS are rejected

Estas são alternativas para compreender individualmente, não um conjunto para colar em conjunto. Suprimir a configuração de endereço não suprime alterações de rota, regras de firewall ou as opções empurradas que transportam DNS. Um script delegado também é livre de alterar rotas, o que é uma decisão que estás a entregar em vez de evitar.

Se um cliente de fornecedor envolve o motor, usa a integração suportada em vez de colocar uma diretiva de baixo nível num perfil e esperar que o invólucro a respeite. Os invólucros regeneram muitas vezes o perfil ao ligar, pelo que uma edição manual desaparece sem erro. Verifica onde o cliente guarda as suas definições antes de passar uma noite com o ficheiro. Isso aplica-se a todas as linhas da tabela, não apenas àquela para que vieste.

A sessão SSH que querias proteger

Uma ligação SSH tem um endereço de origem, um endereço de destino e um caminho de resposta. Num servidor que acabou de instalar a predefinição de túnel completo, a resposta ao teu endereço público coincide com o túnel, e o gateway VPN descarta-a.

Nada na configuração de endereços da interface do túnel muda isso.

O que o resolve é uma rota mais específica para o teu endereço de gestão através do gateway anterior ao túnel, ou uma regra de política que encaminhe esse tráfego, mais as definições de filtro que o teu anfitrião aplica. Os dois problemas aparecem às vezes juntos, e é assim que um é tomado como a cura do outro. Testa-os separadamente: sobe o túnel sem a opção, olha para o endereço da interface e para o caminho de resposta, e depois decide qual dos dois está realmente avariado.

O que um script delegado tem de assumir

Se queres mesmo que outro dono configure a interface, enumera o trabalho: aplica o endereço local e o remoto, sobe o dispositivo, restaura ou remove o endereçamento ao desmontar e faz o mesmo outra vez após uma reconexão. Os valores de uma sessão bem-sucedida não devem ser codificados, porque o servidor pode dar outro par da próxima vez.

As variáveis de ambiente exportadas pelo cliente são a única entrada suportada para esse trabalho.

env | grep -E '^ifconfig_|^route_'

Dentro de um script route-up essas variáveis estão disponíveis; a partir de uma tarefa cron ou de uma shell manual não estão. Confirma que hook do ciclo de vida a tua versão usa, e confirma que o hook corre com privilégios suficientes para alterar a interface, porque o cliente pode já ter descido para um utilizador sem privilégios.

Testa todo o ciclo de vida, não uma sessão

Sobe o túnel, verifica o endereço no dispositivo, depois volta a ligar e verifica outra vez. Uma configuração que funciona uma vez e falha à segunda tentativa significa normalmente que o passo delegado só corre na primeira ligação.

Depois testa os dois critérios de aceitação em conjunto: uma nova ligação SSH pelo caminho de gestão pretendido funciona, e uma aplicação permitida usa o túnel corretamente.

Uma sessão SSH antiga que sobrevive por acaso enquanto o túnel não tem endereço não é um sucesso, e é exatamente o estado que esta opção produz quando ninguém assume o trabalho. Verifica primeiro o endereço da interface, depois o caminho de resposta da gestão, depois a aplicação. Se dois dos três estiverem errados, a opção moveu trabalho sem lhe dar um dono.

Artigos relacionados