Em algum lugar de um script de implantação há uma verificação se o túnel está ativo antes de a cópia começar. Há três respostas disponíveis, e elas não significam a mesma coisa: o estado do serviço que o scutil relata, a rota que o kernel escolheu e se o outro lado realmente responde. Compará-las é a diferença entre uma verificação que prevê a cópia e uma que apenas decora o log.

Três respostas para a pergunta se a VPN está ativa

O estado do serviço é um fato do plano de controle. O macOS sabe que uma configuração está conectada porque o processo cliente disse isso. A rota é um fato do plano de dados: o kernel enviará este destino por essa interface. A alcançabilidade é um fato de ponta a ponta, e pode falhar por motivos que nenhuma das outras duas vê.

SignalAnswersBlind spot
scutil --nc statusIs the service connected?Third-party clients, wrong routes
route -n getWhere would this go?The peer may be down
A request to the far sideDoes it work now?Slow, and it changes state

Uma verificação útil combina as duas primeiras e usa a terceira como confirmação de que as outras duas não mentiram. Qualquer uma sozinha é um palpite com carimbo de tempo.

Leia o identificador, não o nome de exibição

scutil --nc list
scutil --nc status "Office"

A listagem imprime uma linha por serviço, e cada linha traz um estado entre parênteses, seguido do identificador do serviço, do tipo e do nome de exibição. Escreva o script com base no identificador, porque o nome de exibição é o que alguém digitou nos Ajustes do Sistema e pode mudar sem aviso. O comando de estado imprime uma única palavra e, para alguns tipos de serviço, estatísticas depois dela; compare essa primeira palavra em vez de procurar o nome em toda a saída, que também aparece em outros lugares.

Iniciar um serviço pode gerar um pedido de autorização ou ser recusado de imediato quando o perfil é gerenciado. Essa recusa não é um defeito do túnel; é uma declaração de política sobre quem pode ativá-lo.

Um cliente de terceiros esconde-se da lista

Uma lista vazia não significa que não exista VPN. Configurações criadas nas próprias configurações de rede do sistema aparecem aqui; um cliente do fornecedor, um perfil de gerenciamento ou um aplicativo de terceiros pode manter um túnel ativo que este comando nunca vê. A ferramenta do próprio é a autoridade para o próprio serviço. Perguntar ao scutil sobre um cliente que nunca se registrou nele retorna nada, e nada não é a mesma resposta que desconectado.

Quando a lista está vazia mas o tráfego está claramente criptografado, procure a interface: um dispositivo utun ou ppp com um endereço na faixa esperada é evidência de que algo estabeleceu um túnel. Esse é um sinal mais fraco do que o estado do serviço, então combine-o com uma verificação de rota em vez de tratar a interface como prova de identidade. Vários clientes podem criar várias interfaces dessas, e apenas uma delas pertence ao túnel que você quis dizer.

Estado não é roteamento

Um serviço conectado diz que o túnel existe. Não diz que o seu destino o usa. Leia os endereços e depois pergunte ao kernel diretamente:

ifconfig | grep -A4 utun
netstat -rn -f inet
route -n get 10.40.0.20

Um cliente de túnel completo instala uma rota padrão pelo túnel; um cliente de túnel dividido instala prefixos privados específicos. Ambos relatam Connected, e um script que verifica apenas o estado vai correr alegremente pelo caminho errado. Parar um túnel não remove necessariamente rotas que outro cliente instalou, e essa é uma das maneiras de uma máquina ficar ao mesmo tempo com um serviço conectado e uma rota desatualizada. Olhe para o destino que lhe interessa, não para a tabela de rotas inteira.

Nomear é um problema separado

Outras máquinas não alcançam o Mac pelo nome enquanto o endereço funciona, e isso é relatado como falha de VPN. O nome local do host, o nome do host e o registro DNS são três coisas diferentes. scutil --get LocalHostName mostra o nome Bonjour; sudo scutil --set HostName mac-office define o nome que o sistema relata.

Nenhuma das configurações cria um registro na zona do escritório. Se outros hosts precisam resolver o nome via DNS, o dono da zona tem de adicioná-lo, ou o script deve usar o endereço. Definir um nome estável torna os anúncios consistentes; não faz o resolvedor responder.

Registre no script o identificador do serviço e a forma esperada da rota juntos, e verifique os dois antes da cópia. Um túnel ativo mas roteado para o lado errado falha exatamente como nenhum túnel, e a linha de log que diz Connected manda a próxima pessoa procurar no lugar errado.

Artigos relacionados