Come posso fare in modo che gli ospiti di VirtualBox condividano la connessione VPN dell'host?


51

Domanda

Quando avvio la mia VPN sul mio computer desktop Ubuntu che funge da router, la sottorete collegata perde la connettività Internet, ma è ancora accessibile (LAN). Idealmente, vorrei sapere come abilitare la subnet collegata per riottenere l'accesso a Internet instradando attraverso il tunnel VPN quando la VPN è attiva.

Contesto

Ho il seguente layout di rete:

sottorete 172.16.0.0/20 su eth0 per le mie macchine virtuali VirtualBox.

sottorete 192.168.0.0/24 su eth0: 0 che si collega al gateway 192.168.0.1 che ha accesso a Internet.

Questo è mostrato nel file / 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

I pacchetti su eth0 vengono inoltrati tramite eth0: 0 con mascheramento e la normale connettività Internet va bene. Tuttavia, quando avvio il tunnel VPN su questo router, la connettività Internet viene persa per le macchine virtuali nella sottorete eth0 (ma rimane per il router).

Di seguito è riportato l' output di ifconfig quando il tunnel è attivo:

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)

Sospetto che la soluzione abbia qualcosa a che fare con la tabella di routing . Mostra quanto segue quando il tunnel è attivo :

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

e quanto segue quando il tunnel è inattivo :

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

Configurazione di Virtualbox per Vms:

inserisci qui la descrizione dell'immagine

Uno dei /etc/network/interfacesfile VM :

# 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

Come sono configurate le reti della tua VM in VirtualBox?
zwets,

bridge to eth0 - aggiunte informazioni alla domanda.
Programster,

So che non è esattamente la risposta alla tua domanda, ma per me si è rivelato più facile impostare 2 connessioni VPN: 1 dal computer host, un altro dal computer guest
Zhenya,

Risposte:


28

Ciò non funzionerà in una configurazione di rete con bridge . Dalla documentazione di VirtualBox :

Collegamento in rete a ponte

Questo è per esigenze di rete più avanzate come simulazioni di rete e server in esecuzione in un guest. Quando abilitato, VirtualBox si collega a una delle schede di rete installate e scambia direttamente i pacchetti di rete, aggirando lo stack di rete del sistema operativo host.

Poiché le tue macchine virtuali stanno utilizzando eth0direttamente, non sono a conoscenza tun0dell'interfaccia con il tunnel che la attraversa. Sarà necessario utilizzare una diversa configurazione di rete virtuale.

Hai (tra gli altri) queste opzioni:

  • Network Address Translation (NAT) è di gran lunga la soluzione più semplice. VirtualBox eseguirà il NAT delle VM attraverso qualunque connessione Internet sia disponibile per l'host. Questo è completamente trasparente per le macchine virtuali. Tuttavia, ciò impedisce le connessioni dall'host alle macchine virtuali o le connessioni tra le macchine virtuali.

  • Utilizzare Networking solo host per creare una subnet corretta contenente le macchine virtuali e l'host. Ciò richiederà cambiamenti nella configurazione dell'interfaccia ora avete in macchine virtuali, ma sarà necessario configurare l'host per essere il gateway e router, e renderlo Nat le macchine virtuali verso l'esterno (sia in tutta la sua eth0o tun0).

  • Combina quanto sopra: dai a ciascuna VM due interfacce, una gateway verso il mondo esterno (attraverso il NAT di VirtualBox ) e l'altra collegata alla LAN solo host .

  • Prova la configurazione sperimentale di rete NAT di VirtualBox . Aggiornamento 2019: questa funzionalità è maturata: collegarsi al NAT dell'host e scegliere il tipo di adattatore di rete Paravirtualized (virtio-net) .


35

Per VirtualBox con host Windows e guest Linux (pari), vai alla scheda UI di rete e imposta "Adapter" => "Attaccato a: NAT" e "Tipo di adattatore: Rete paravirtualizzata". Successivamente, avvia la VM e dovresti essere in grado di utilizzare la rete VPN.


1
Per me ha funzionato alla grande, grazie! Uso Ubuntu 16.04LTS come mio ospite e host di Windows 10, con Virtual Box 5.0.24.
womp,

1
Brillante! Questo funziona per il mio host Windows 10 e VirtualBox (5.0.26) ospite CentOS 7.
Zaki,

1
Sorprendente! Dovrebbe essere la risposta accettata. Stavo cercando questa soluzione da anni. Molte grazie!
Mr Spock,

1
migliore risposta qui!
Mike,

Perché diamine non è questa la risposta accettata? Così semplice e corretto!
Michael Goldshteyn,

6

Dopo aver cercato questa soluzione ovunque, ho finalmente trovato una soluzione funzionante che non richiede molte modifiche alla configurazione ed è davvero semplice. Utilizzare la rete NAT predefinita e digitarla nel terminale:

VBoxManage modifyvm "VM name" --natdnsproxy1 on

fonte: https://www.virtualbox.org/ticket/13993


4

Ho avuto lo stesso problema. Ecco come l'ho risolto:

  1. Modificare il tipo di rete del sistema guest in "Solo host"
  2. Imposta il gateway predefinito di Guest come punto di accesso all'IP dell'host ifconfig vboxnet0per trovarlo.

L'ultimo passaggio è il routing dei pacchetti provenienti da vboxnet0 nella tua VPN.

Se instrada tutto il traffico tramite 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

Dov'è il 10.8.0.5tuo gateway tun0 ed 192.168.5.0/24è il tuo intervallo di rete vboxnet0.

Se instradi solo un determinato traffico tramite 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

Dov'è il 10.8.0.5tuo gateway tun0, il 192.168.43.95tuo wlan0gateway e il 192.168.5.0/24tuo raggio di rete vboxnet0.

Nota: questa soluzione consente al sistema operativo guest di essere trattato allo stesso modo del sistema operativo host. Solo gli IP configurati per passare tramite VPN nel sistema operativo host lo attraverseranno in Guest.


3

Ecco alcune informazioni utili per le scatole vagabonde che usano l'host vpn. Fondamentalmente è necessario impostare l'opzione natdnshostresolver1 Notare che NON funzionerà quando si utilizza l'impostazione public_network di 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-guest http://blog.geekslikeshinythings.com/2016/05/sharing-host-vpn-with-vagrant -Rob-allen.html


1
Il primo link aveva la soluzione per me. Mostra come attivare l'opzione natdnshostresolver1 per la VM.
kol,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.