VirtualBox - Ubuntu convidado perde DNS quando o host se conecta à VPN

11

Eu tenho o SO convidado do Ubuntu no VirtualBox usando o NAT padrão para eth0.

Funciona bem no escritório e em casa, EXCETO quando estiver no escritório VPN em casa.

Quando o sistema operacional host (Windows 7) está conectado à VPN, as pesquisas de DNS não funcionam no convidado do Virtualbox. As pesquisas de DNS são boas no host. No Virtualbox, eu posso efetuar ping de IPs diretamente, tanto na VPN quanto na parte externa, para que não seja um problema de conectividade.

Parece que o convidado do Ubuntu está usando o host local como ponto de entrada do DNS, de acordo com /etc/resolv.confe nslookup. Portanto, parece que algo localmente está sendo enviado para outro DNS subjacente.

Como faço para solucionar isso?

wrschneider
fonte
O que você está usando para VPN? Você tem acesso às configurações de VPN no dispositivo ao qual essas máquinas estão se conectando? Normalmente, as máquinas que se conectam à VPN extraem suas configurações do dispositivo VPN.
jmreicha
Para esclarecer que as pesquisas de DNS no host estão funcionando bem, apenas o convidado do Virtualbox é afetado.
wrschneider

Respostas:

17

Isso funcionou por algum motivo

C:\...\VirtualBox\VBoxManage modifyvm "VM name" --natdnshostresolver1 on

Eu suspeito que é porque quando a VPN está ativa, o host está fazendo algo especial para pesquisas de DNS, além de apenas encaminhar solicitações aos servidores DNS especificados que o VirtualBox capturou na configuração do Windows.

wrschneider
fonte
11
Você salvou o dia cara.
CantGetANick
Funcionou perfeitamente para mim!
Hai Minh Nguyen
1

Eu tive uma situação muito semelhante ao Lubuntu 16.04 (deveria ser idêntica em outros Ubuntus), mas essa correção não melhorou a situação. Pelo menos com 16.04, o problema parece ser que o NetworkManager usa um proxy DNS local (dnsmasq), e isso não funciona bem com conexões VPN, pelo menos na configuração padrão.

Comentando / excluindo dns = dnsmasq em /etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile,ofono
# dns=dnsmasq

Provavelmente existe uma maneira de configurar o dnsmasq, mas isso me dá acesso equivalente ao host (dns, etc.), por isso não investiguei. YMMV.

AntonOfTheWoods
fonte
1

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:

  1. a VM é gerada em um host conectado à VPN e, em um determinado momento, a VPN se desconecta;
  2. 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).
StefTN
fonte