Comment faire pour que les invités de VirtualBox partagent la connexion VPN de l'hôte?

37

Question

Lorsque je lance mon VPN sur mon ordinateur de bureau Ubuntu qui sert de routeur, le sous-réseau associé perd la connectivité Internet, mais reste accessible (LAN). Dans l'idéal, j'aimerais savoir comment activer le sous-réseau attaché pour retrouver l'accès à Internet en acheminant le tunnel VPN lorsque le VPN est actif.

Contexte

J'ai la disposition de réseau suivante:

sous-réseau 172.16.0.0/20 sur eth0 pour mes machines virtuelles VirtualBox.

sous-réseau 192.168.0.0/24 sur eth0: 0 qui se connecte à la passerelle 192.168.0.1 avec accès à Internet.

Ceci est montré dans le fichier / etc / network / interfaces:

auto lo
iface lo inet loopback

# This is the subnet dedicated to VB
auto eth0
iface eth0 inet static
    address 172.16.0.1
    netmask 255.255.0.0
    gateway 192.168.0.164
    dns-nameservers 8.8.8.8

# normal DHCP internet
auto eth0:0
iface eth0:0 inet static
    address 192.168.0.164
    netmask 255.255.255.0
    dns-nameservers 8.8.8.8
    gateway 192.168.0.1

Les paquets sur eth0 sont transmis via eth0: 0 avec masquage et la connectivité Internet normale est correcte. Cependant, lorsque je lance mon tunnel VPN sur ce routeur, la connectivité Internet est perdue pour les machines virtuelles sur le sous-réseau eth0 (mais reste pour le routeur).

Ci-dessous, la sortie de ifconfig lorsque le tunnel est actif:

eth0      Link encap:Ethernet  HWaddr 00:1f:bc:01:c3:ab  
          inet addr:172.16.0.1  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::21f:bcff:fe01:c3ab/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:165426 errors:0 dropped:0 overruns:0 frame:0
          TX packets:182601 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:208264321 (208.2 MB)  TX bytes:16660945 (16.6 MB)
          Interrupt:16 

eth0:0    Link encap:Ethernet  HWaddr 00:1f:bc:01:c3:ab  
          inet addr:192.168.0.164  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:16 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:381963 errors:0 dropped:0 overruns:0 frame:0
          TX packets:381963 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:22755054 (22.7 MB)  TX bytes:22755054 (22.7 MB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.10  P-t-P:10.8.0.9  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Je pense que la solution a quelque chose à voir avec la table de routage . Il montre les éléments suivants lorsque le tunnel est actif :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.8.0.9        128.0.0.0       UG    0      0        0 tun0
default         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
10.8.0.0        10.8.0.9        255.255.255.0   UG    0      0        0 tun0
10.8.0.9        *               255.255.255.255 UH    0      0        0 tun0
37.139.23.49    192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
128.0.0.0       10.8.0.9        128.0.0.0       UG    0      0        0 tun0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.16.0.0      *               255.255.0.0     U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

et lorsque le tunnel est inactif :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.16.0.0      *               255.255.0.0     U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

Configuration de Virtualbox pour Vms:

Un des fichiers VM /etc/network/interfaces :

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 172.16.0.3
        netmask 255.255.0.0
        network 172.16.0.0
        broadcast 172.16.255.255
        gateway 172.16.0.1
        dns-nameservers 8.8.8.8
    
posée Programster 11.02.2014 - 09:05
la source

5 réponses

21

Cela ne fonctionnera pas dans une configuration Bridged Networking . De la documentation de VirtualBox :

  

Mise en réseau pontée

     

Ceci est pour les besoins de réseau plus avancés tels que les simulations de réseau   et exécuter des serveurs dans un invité. Lorsque activé, VirtualBox   se connecte à l'un de vos cartes réseau installées et à votre réseau d'échange   paquets directement, contournant le réseau de votre système d'exploitation hôte   pile.

Étant donné que vos machines virtuelles utilisent eth0 directement, elles ne sont pas au courant de l’interface tun0 vers le tunnel qui l’exécute. Vous devrez utiliser une autre configuration de réseau virtuel.

Vous avez (entre autres) ces options:

  • La traduction d'adresses réseau (NAT) est de loin la solution la plus simple. VirtualBox NAT utilisera les VM sur toutes les connexions Internet disponibles pour l'hôte. Ceci est totalement transparent pour les VM. Cependant, cela empêche les connexions de l'hôte aux machines virtuelles ou aux connexions entre les ordinateurs virtuels.

  • Utilisez Réseau uniquement hôte pour créer un sous-réseau contenant les ordinateurs virtuels et l’hôte. Cela ne nécessitera aucune modification de la configuration de l'interface que vous avez maintenant dans les ordinateurs virtuels, mais vous devrez configurer l'hôte pour qu'il soit la passerelle et le routeur, et pour le rendre NAT (que ce soit à travers ses eth0 ou tun0 ).

  • Combinez les éléments ci-dessus: attribuez à chaque machine virtuelle deux interfaces, une passerelle vers le monde extérieur (via le NAT VirtualBox) et l’autre connectée au réseau local hôte uniquement. >.

  • Essayez la configuration expérimentale de NAT Networking de VirtualBox. Je n'ai pas examiné cela, mais sa description suggère que cela pourrait être la solution idéale.

réponse donnée zwets 11.02.2014 - 14:42
la source
18

Pour VirtualBox avec hôte Windows et invité Linux (mint), accédez à l'onglet Interface utilisateur du réseau et définissez pour "Adapter" = & gt; "Attaché à: NAT" et "Type d'adaptateur: réseau paravirtualisé". Après cela, démarrez votre VM et vous devriez pouvoir utiliser le réseau VPN.

    
réponse donnée Aks 08.07.2016 - 21:11
la source
3

Voici quelques informations utiles pour les boîtes vagabondes utilisant le VPN hôte. Fondamentalement, vous devez définir l'option natdnshostresolver1 Notez que cela ne fonctionnera PAS lorsque vous utilisez le paramètre public_network de Vagrant.

  config.vm.provider :virtualbox do |vb|
      # ---- other options....
      vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  end

lien lien

    
réponse donnée Artistan 12.05.2016 - 17:28
la source
3

Après avoir cherché cette solution partout, j'ai finalement trouvé une solution qui ne nécessite pas beaucoup de modifications de configuration et qui est vraiment simple. Utilisez le réseau NAT par défaut et tapez-le dans le terminal:

VBoxManage modifyvm "VM name" --natdnsproxy1 on

source: lien

    
réponse donnée Arier 21.09.2017 - 04:29
la source
2

eu le même problème. Voici comment je l'ai résolu:

  1. Modifiez le type de réseau du système invité pour qu'il soit "hôte uniquement"
  2. Faites en sorte que la passerelle par défaut de l'invité pointe vers l'adresse IP ifconfig vboxnet0 de l'hôte pour la retrouver.

La dernière étape consiste à router les paquets provenant de vboxnet0 dans votre VPN.

Si vous routez tout le trafic via VPN:

iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5

10.8.0.5 est votre passerelle tun0 et que 192.168.5.0/24 est votre plage réseau vboxnet0.

Si vous acheminez uniquement certains trafics via VPN:

iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o wlan0 -j SNAT --to-source 192.168.43.95

10.8.0.5 est votre passerelle tun0 et que 192.168.43.95 est votre passerelle wlan0 et que 192.168.5.0/24 est votre plage réseau vboxnet0.

Remarque: cette solution permet à Guest OS d'être traité de la même manière que le système d'exploitation hôte. Seules les adresses IP configurées pour passer par VPN dans le système d’exploitation hôte seront traitées dans Guest.

    
réponse donnée Ramast 27.01.2016 - 10:38
la source

Lire d'autres questions sur les étiquettes