Estado da VPN no Mac: verifique o perfil, o recurso ou o fluxo
Um único valor booleano não responde a três perguntas diferentes. Escolha primeiro o sujeito, use depois a interface que realmente o reporta e guarde os motivos da falha.
Alguém pergunta se a VPN está ativa, e três pessoas diferentes querem dizer três coisas diferentes. Um operador quer dizer que o perfil Office terminou a autenticação. Um agendador quer dizer que a API privada vai responder. Uma revisão de segurança quer dizer que este pedido concreto saiu pelo caminho protegido. Um script que procura com grep na tabela de rotas o nome de uma interface não responde de forma fiável a nenhuma delas.
Por isso a lista de verificação começa antes de qualquer comando correr: nomeie o sujeito da verificação. Tudo o que vem depois é escolher a interface que realmente o pode reportar.
Nomeie o sujeito antes do comando
Escreva a pergunta como um predicado com sujeito. «O perfil Office está ligado» é verificável e tem um responsável que pode responder. «Este trabalho consegue chegar à API interna» é um segundo predicado, com um modo de falha diferente. «Este pedido usa o caminho protegido» é um terceiro, e é o único que fala de um único fluxo e não da máquina inteira.
Misturá-los produz automação que mente com confiança. Um trabalho que verifica o estado do perfil e depois assume que a API está pronta vai avisar alguém na camada errada, e um trabalho que faz ping à API e o apresenta como prova de um túnel não distingue uma VPN a funcionar de um portátil que por acaso está na rede do escritório.
Um perfil: pergunte ao objeto que o detém
Para um serviço nativo do Mac, os controlos de ligação de rede em scutil reportam exatamente isto. Leem o estado de uma configuração com nome em vez de inferir algo de uma interface.
scutil --nc list
scutil --nc status "Office VPN"
O nome do perfil nesse comando tem de ser o verdadeiro da saída da lista, não um palpite. É um caminho só de leitura para serviços nativos, e não garante que um cliente de terceiros apareça ali; um fornecedor que gere o seu próprio túnel precisa da sua própria interface de estado suportada. Verifique a lista antes de escrever a chamada de estado, para que um nome em falta falhe de forma visível em vez de corresponder em silêncio a nada.
Dentro de uma app Network Extension, leia o estado dos objetos de gestor e de ligação em vez do sistema. Atenção ao âmbito: carregar configurações guardadas só devolve as criadas pela app que chama, por isso um resultado vazio significa «nenhuma minha», não «nenhuma VPN neste Mac». Distinga uma consulta falhada de um estado desligado confirmado, e trate os estados transitórios como resultados próprios em vez de tentar de novo uma ligação que já está a subir.
Um trabalho: a prontidão é um predicado à parte
Se a pergunta é se um trabalho pode avançar, teste a dependência real do trabalho depois de o dono da ligação reportar o estado pretendido. Uma verificação de prontidão limitada contra o recurso privado é a forma certa: prova o que o trabalho precisa e nada mais.
Continua a não poder provar que todos os pedidos da máquina usam o túnel, e não deve ser reportado como se pudesse. Da mesma forma, um recurso que responde pela rede comum não é prova de uma VPN, e é por isso que as duas verificações ficam separadas mesmo quando ambas têm sucesso.
Quando o trabalho exige mesmo um caminho protegido, esse requisito precisa do desenho de aplicação do próprio deployment: encaminhamento, exclusões de túnel dividido, uma regra de firewall ou um requisito ao nível da aplicação. A disponibilidade de um endpoint é um facto sobre um servidor. A aplicação é um facto sobre a configuração do cliente, e uma coisa não demonstra a outra.
Um fluxo: inspecione a rota escolhida
Para um único fluxo, olhe para o destino, a família de endereços e o contexto de origem com o diagnóstico de encaminhamento que reporta o caminho selecionado para esse destino específico. Essa saída nomeia a interface e o endereço de origem realmente usados, o que é uma afirmação muito mais forte do que uma entrada de rota predefinida.
As verificações amplas do browser respondem a uma pergunta completamente diferente. Um resultado de IP público descreve como um pedido pareceu do ponto de vista de um servidor, e não diz nada sobre DNS privado, aplicações excluídas ou um segundo contexto de rede que outro processo está a usar.
Devolva um resultado que o chamador possa usar
Escolha uma forma de retorno que encaixe no predicado: um estado de perfil com nome, um veredicto de prontidão do recurso ou um desconhecido explícito com a evidência que o produziu. Mantenha a identidade da configuração e o motivo da falha ao lado do veredicto.
É esse último hábito que faz a diferença entre automação que ajuda e automação que esconde problemas. «Office VPN: desligada, a última tentativa falhou na autenticação» diz a um operador onde olhar. «A VPN caiu» convida a reinstalar, e «interface encontrada» convida a um falso está tudo bem.
A referência Network Extension sobre carregar configurações de túnel guardadas é o sítio onde confirmar o âmbito da app que chama antes de construir algo em cima.