Estou na minha VPN BTGuard e recebi aleatoriamente um pop-up de negação de conexão do Little Snitch. As notas da entrada em LS são:
Em 29 de maio de 2019, vpn.btguard.com tentou estabelecer uma conexão de entrada com openvpn. A solicitação foi negada automaticamente porque esse tipo de conexão não pode ser atrasada.
Provavelmente é algo como um pacote extraviado da última vez em que você se conectou. Por exemplo, o cliente OpenVPN reiniciou, mas o servidor ainda tentou enviar dados na sessão anterior.
O OpenVPN (por padrão e na configuração do BTGuard) é executado sobre UDP, que é um protocolo de transporte sem estado no qual não há pacotes explícitos de 'estabelecer conexão' ou 'desconectar', sem números de sequência, nada exceto um par de números de porta.
No TCP, hosts e firewalls começam a rastrear uma conexão assim que veem os pacotes SYN (handshake). Mas no UDP, como não há nenhum tipo de pacote 'conectado' (apenas pacotes de dados), os firewalls simplesmente começam a rastrear "conexões" após qualquer pacote que veem.
No TCP, hosts e firewalls esquecem uma conexão assim que veem os pacotes FIN (desconexão). Mas no UDP, como não há nenhum tipo de pacote 'desconectado', os firewalls devem usar tempos limite para expirar as "conexões" antigas (por exemplo, a entrada é removida sempre que fica ociosa por 60 segundos ou 180 segundos ou 10 minutos ou similar).
É claro que programas como o OpenVPN podem ter comandos 'conectar' / 'desconectar' em seu protocolo de camada de aplicativo, mas um firewall não sabe nada sobre isso – ele apenas vê o UDP com alguns dados internos.
Então o que às vezes acontece é:
Ou o OpenVPN reinicia/sai e o firewall esquece todas as entradas associadas ao processo antigo, ou a conexão VPN fica ociosa por tanto tempo que o firewall esquece por atingir o tempo de expiração.
No entanto, o servidor BTGuard não recebeu o pacote de "desconexão" do OpenVPN e também não esqueceu a conexão devido ao tempo limite, então ele tenta enviar alguns dados de volta para você na sessão antiga.
O firewall vê o pacote que chega e não tem como saber se é uma nova "conexão" ou se pertence a uma já estabelecida. (E também não tem como saber se foi originalmente estabelecido para fora ou para dentro.)
Como o firewall não se lembra desse par de portas (devido ao esquecimento na parte 1), ele apenas assume que deve ser novo. E por ser um pacote de entrada, o firewall mostra um aviso sobre "conexão de entrada".
É um palpite, mas é um palpite decente.