TL; DR:
- reinicie a VM, certificando-se de que o status da VPN (conectado ou desconectado) do host não seja alterado;
- permita que o mecanismo NAT do VirtualBox intercepte as solicitações de DNS e encaminhe-as para o resolvedor do host, ou seja, use a API DNS do host para consultar as informações e devolvê-las ao convidado. Você define isso por:
VBoxManage modifyvm "VM name" --natdnshostresolver1 on
A execução de uma VM em um host conectado a uma VPN pode levar a problemas de DNS sempre que o status da VPN for alterado. Existem dois cenários:
- a VM é gerada em um host conectado à VPN e, em um determinado momento, a VPN se desconecta;
- a VM é gerada em um host não conectado à VPN e, em um determinado momento, a VPN se conecta
1) VPN conectado -> VPN desconectado
Nesse caso, a VM provavelmente receberá um endereço DNS que faz parte da rede do provedor de VPN. Geralmente, esse é um endereço IP privado interno. Verifique o conteúdo de cat /etc/resolv.conf
. No meu caso, recebo o seguinte:
nameserver 10.8.8.1
<--- Isso é interno à rede do provedor de VPN
nameserver 192.168.178.1
<--- Este é o meu gateway doméstico (roteador)
Agora desconecte o host da conexão VPN:
- a configuração de DNS nas VMs não muda -> a VM ainda enviará solicitações de DNS para o IP 10.8.8.1 de destino que não pode ser alcançado, pois o host não está mais conectado à VPN
Em mais detalhes:
- o pacote será enviado para o GW definido pela rede NAT do VirtualBox, origem NATTed (com o endereço IP do host) e, finalmente, tratado pela tabela de roteamento do host que o encaminhará para o gateway doméstico.
- Aqui o pacote será descartado, pois seu gateway doméstico não tem entrada para 10.8.8.1 no lado da LAN (endereços privados) e não pode encaminhá-lo no lado da WAN (endereços públicos), pois é um endereço privado.
2) VPN desconectado -> VPN conectado
Nesse caso, a VM não receberá o endereço DNS que faz parte do provedor de rede VPN, pois o host não estava conectado à VPN quando a VM foi iniciada. Verifique o conteúdo de cat /etc/resolv.conf
. No meu caso, recebo o seguinte:
nameserver 192.168.178.1
<--- Este é o meu gateway doméstico (roteador)
Agora conecte o host à conexão VPN:
- a configuração de DNS nas VMs não muda -> a VM ainda estará enviando solicitações de DNS para o IP 192.168.178.1 de destino que não pode ser alcançado (o ping ainda funciona), pois agora a solicitação de DNS da VM está sendo manipulada por a interface VPN Tap que encaminhará os pacotes para a rede VPN onde 192.168.178.1 (seu endereço IP do gateway doméstico interno) não pode ser alcançado.
Em mais detalhes:
- o pacote será enviado ao GW def definido pela rede NAT do VirtualBox, enviado à interface VPN Tap que modificará o cabeçalho IP, substituindo o endereço de origem IP da VM por um endereço IP atribuído ao host pela rede VPN, enquanto o destino endereço permanece o endereço DNS 192.168.178.1.
- esse pacote será encapsulado em um cabeçalho IP externo que terá o endereço IP do host como origem (que btw será posteriormente substituído pelo NAT de origem no gateway doméstico) e o servidor VPN como endereço de destino.
- quando o pacote atinge a rede VPN, é decapsulado. O endereço IP de destino agora é novamente o endereço DNS 192.168.178.1 que a Rede de Provedores de VPN não tem como alcançar (a não ser na extraordinária confiança de que este é exatamente o mesmo endereço IP usado pelo seu provedor de rede VPN para o servidor DNS).