VirtualBox - Ubuntu invité perd DNS lorsque l'hôte se connecte au VPN

11

J'ai un OS invité Ubuntu dans VirtualBox utilisant le NAT par défaut pour eth0.

Fonctionne bien au bureau et à la maison SAUF lorsque vous utilisez le VPN de bureau à domicile.

Lorsque le système d'exploitation hôte (Windows 7) est connecté au VPN, les recherches DNS ne fonctionnent pas dans l'invité Virtualbox. Les recherches DNS sont correctes sur l'hôte. Dans Virtualbox, je peux cingler des IP directement à la fois dans le VPN et à l'extérieur, donc ce n'est pas un problème de connectivité.

Il semble que l'invité Ubuntu utilise localhost comme point d'entrée DNS, selon /etc/resolv.confet nslookup. Il semble donc que quelque chose localement soit distribué à un autre DNS sous-jacent.

Comment puis-je résoudre ce problème?

wrschneider
la source
Qu'utilisez-vous pour VPN? Avez-vous accès aux paramètres VPN de l'appareil auquel ces machines se connectent? En règle générale, les machines se connectant au VPN tirent leurs paramètres du périphérique VPN.
jmreicha
Pour clarifier les recherches DNS sur l'hôte fonctionnent bien - c'est seulement l'invité Virtualbox qui est affecté.
wrschneider

Réponses:

17

Cela a fonctionné pour une raison quelconque

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

Je soupçonne que c'est parce que lorsque le VPN est actif, l'hôte fait quelque chose de spécial pour les recherches DNS en plus de simplement transférer les demandes aux serveurs DNS spécifiés que VirtualBox a récupérés de la configuration Windows.

wrschneider
la source
1
Vous avez sauvé le mec du jour.
CantGetANick
A parfaitement fonctionné pour moi!
Hai Minh Nguyen
1

J'ai eu une situation très similaire avec Lubuntu 16.04 (devrait être identique dans les autres Ubuntus) mais ce correctif n'a pas amélioré la situation. Au moins avec 16.04, le problème semble être que NetworkManager utilise un proxy DNS local (dnsmasq), et cela ne fonctionne pas bien avec les connexions VPN, au moins dans la configuration par défaut.

Commenter / supprimer dns = dnsmasq dans /etc/NetworkManager/NetworkManager.conf

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

Il existe probablement un moyen de configurer dnsmasq mais cela me donne un accès équivalent à l'hôte (dns, etc.), donc je n'ai pas enquêté. YMMV.

AntonOfTheWoods
la source
1

TL; DR:

  • redémarrez la machine virtuelle en vous assurant que l'état VPN (connecté ou déconnecté) de l'hôte ne change pas entre-temps;
  • laissez le moteur NAT VirtualBox intercepter les requêtes DNS et les transmettre au résolveur de l'hôte, c'est-à-dire utiliser l'API DNS de l'hôte pour interroger les informations et les renvoyer à l'invité. Vous définissez cela par:

VBoxManage modifyvm "VM name" --natdnshostresolver1 on


L'exécution d'une machine virtuelle sur un hôte connecté à un VPN peut entraîner des problèmes DNS à chaque fois que l'état du VPN change. Il existe deux scénarios:

  1. la machine virtuelle apparaît sur un hôte connecté au VPN et à un certain moment, le VPN se déconnecte;
  2. la machine virtuelle apparaît sur un hôte non connecté au VPN et à un certain point, le VPN se connecte

1) VPN connecté -> VPN déconnecté

Dans ce cas, la machine virtuelle aura probablement reçu une adresse DNS qui fait partie du réseau du fournisseur VPN. Il s'agit généralement d'une adresse IP privée interne. Vérifiez le contenu de cat /etc/resolv.conf. Dans mon cas, je reçois ce qui suit:

nameserver 10.8.8.1 <--- Ceci est interne au réseau du fournisseur VPN

nameserver 192.168.178.1 <--- Ceci est ma passerelle domestique (routeur)

Déconnectez maintenant l'hôte de la connexion VPN:

  • la configuration DNS dans les VMs ne change pas -> VM enverra toujours des requêtes DNS à l'adresse IP de destination 10.8.8.1 qui ne peut pas être atteinte car l'hôte n'est plus connecté au VPN

Plus de détails:

  • le paquet sera envoyé au GW par défaut défini par le réseau NAT VirtualBox, source NATTed (avec l'adresse IP de l'hôte), et finalement géré par la table de routage de l'hôte qui le transmettra à votre passerelle domestique.
  • Ici, le paquet sera abandonné car votre passerelle domestique n'a pas d'entrée pour 10.8.8.1 du côté LAN (adresses privées) et ne peut pas le transmettre du côté WAN (adresses publiques) car c'est une adresse privée.

2) VPN déconnecté -> VPN connecté

Dans ce cas, la machine virtuelle ne recevra pas l'adresse DNS qui fait partie du fournisseur de réseau VPN car l'hôte n'était pas connecté au VPN au démarrage de la machine virtuelle. Vérifiez le contenu de cat /etc/resolv.conf. Dans mon cas, je reçois ce qui suit:

nameserver 192.168.178.1 <--- Ceci est ma passerelle domestique (routeur)

Connectez maintenant l'hôte à la connexion VPN:

  • la configuration DNS dans les machines virtuelles ne change pas -> la machine virtuelle enverra toujours des demandes DNS à l'adresse IP de destination 192.168.178.1 qui ne peut pas être atteinte (le ping fonctionne toujours), car maintenant la demande DNS de la machine virtuelle est gérée par l'interface VPN Tap qui transmettra les paquets au réseau VPN où 192.168.178.1 (votre adresse IP de passerelle domestique) ne peut pas être atteinte.

Plus de détails:

  • le paquet sera envoyé au GW par défaut défini par le réseau NAT VirtualBox, envoyé à l'interface VPN Tap qui modifiera l'en-tête IP en remplaçant l'adresse source IP de la machine virtuelle par une adresse IP attribuée à l'hôte par le réseau VPN, tandis que la destination l'adresse reste l'adresse DNS 192.168.178.1.
  • ce paquet va ensuite être encapsulé dans un en-tête IP externe qui aura l'adresse IP hôte comme source (ce btw sera ensuite remplacé par le NAT source sur la passerelle domestique) et le serveur VPN comme adresse de destination.
  • lorsque le paquet atteint le réseau VPN, il est décapsulé. L'adresse IP de destination est à nouveau l'adresse DNS 192.168.178.1 que le réseau du fournisseur VPN n'a aucun moyen d'atteindre (sauf dans l'extraordinaire situation où c'est exactement la même adresse IP utilisée par votre fournisseur de réseau VPN pour son serveur DNS).
StefTN
la source