ifconfig-noexec não salva a tua sessão SSH: o que ele faz na verdade
Suprime a configuração do endereço da interface feita pelo próprio OpenVPN. Não reserva uma rota de resposta para o SSH, não desativa todas as alterações de rota e não fornece o endereço em falta.
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.
| Option | What stops happening |
|---|---|
ifconfig-noexec | OpenVPN's own tunnel-address configuration; values go to scripts instead |
route-noexec | Automatic route addition and removal; route details go to a script |
route-nopull | Server-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.