web-dev-qa-db-fra.com

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

Question

Lorsque je démarre mon VPN sur mon ordinateur de bureau Ubuntu qui fait office de routeur, le sous-réseau connecté perd la connexion à Internet, mais reste accessible (LAN). Idéalement, j'aimerais savoir comment permettre au sous-réseau connecté de reprendre l'accès à Internet en acheminant via le tunnel VPN lorsque le VPN est actif.

contexte

J'ai la disposition du 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 qui dispose d’un accès Internet.

Ceci est indiqué 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 l'eth0 sont transférés via eth0: 0 avec masquerading et la connectivité Internet normale convient. Toutefois, lorsque je démarre mon tunnel VPN sur ce routeur, la connectivité Internet est perdue pour les ordinateurs virtuels du sous-réseau eth0 (mais il en reste pour le routeur).

Ci-dessous, le 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 soupçonne que la solution aura quelque chose à voir avec le table de routage. Il montre ce qui suit 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 les suivants 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:

enter image description here

Un des fichiers VMs /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
50
Programster

Cela ne fonctionnera pas dans une configuration en réseau ponté . Depuis le documentation VirtualBox :

Réseau ponté

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

Étant donné que vos machines virtuelles utilisent directement eth0, elles ne sont pas conscientes de l'interface tun0 avec le tunnel qui les traverse. 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 va NAT les machines virtuelles, quelle que soit la connexion Internet disponible pour l'hôte. Ceci est totalement transparent pour les VM. Toutefois, cela empêche les connexions de l'hôte aux machines virtuelles ou les connexions entre les machines virtuelles.

  • Utilisez la mise en réseau hôte uniquement pour créer un sous-réseau approprié contenant les ordinateurs virtuels et l'hôte. Cela ne nécessitera aucun changement dans la configuration d'interface que vous avez maintenant dans les VM, mais vous devrez configurer l'hôte pour qu'il soit la passerelle et le routeur, et en font NAT les machines virtuelles vers l'extérieur (que ce soit par son eth0 ou son tun0).

  • Combinez ce qui précède: attribuez à chaque VM deux interfaces, l’une assurant la passerelle vers le monde extérieur (entre VirtualBox NAT) et l’autre associée au LAN avec hôte uniquement .

  • Essayez la configuration expérimentale de mise en réseau NAT de VirtualBox. Mise à jour 2019: , cette fonctionnalité est depuis arrivée à échéance: attachez-vous au NAT de l'hôte et choisissez le réseau paravirtualisé. (virtio-net) type d'adaptateur.

27
zwets

Pour VirtualBox avec l'hôte Windows et l'invité Linux (mint), accédez à l'onglet Interface utilisateur réseau et définissez-le sur "Adaptateur" => "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.

32
Aks

Après avoir recherché cette solution partout, j’ai finalement trouvé une solution fonctionnelle qui n’exige pas beaucoup de changements de configuration et qui est très simple. Utilisez le réseau NAT par défaut et tapez-le dans le terminal:

VBoxManage modifyvm "VM name" --natdnsproxy1 on

source: https://www.virtualbox.org/ticket/1399

4
Arier

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

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

http://renier.morales-rodriguez.net/post/90674523562/sharing-Host-vpn-with-virtualbox-guesthttp://blog.geekslikeshinythings.com/2016/ 05/sharing-Host-vpn-with-vagrant-rob-allen.html

3
Artistan

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

  1. Modifier le type de réseau du système invité en "hôte uniquement"
  2. Définissez la passerelle par défaut du point d'invité sur l'adresse ip de l'hôte ifconfig vboxnet0 pour la trouver.

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

Si vous acheminez 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 192.168.5.0/24 est votre plage réseau vboxnet0.

Si vous n'acheminez que 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 192.168.43.95 est votre passerelle wlan0 et 192.168.5.0/24 est votre plage réseau vboxnet0.

Remarque: Cette solution permet au système d'exploitation invité 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 un réseau privé virtuel dans le système d'exploitation hôte le traversent en tant qu'invité.

3
Ramast