Ho avuto l' esatto lo stesso problema, e ho visto che fino alla risoluzione, quindi sono felice di spiegare il problema e la soluzione in dettaglio.
Senza coinvolgere una VPN
È importante comprendere la configurazione richiesta per soddisfare le tue esigenze senza coinvolgere una VPN. Inoltre, queste informazioni presuppongono che nessun firewall software stia interferendo, né sull'host né sul guest.
Senza una VPN, questo viene normalmente risolto creando due adattatori di rete nella configurazione della macchina virtuale.
Il primo adattatore deve essere impostato in NAT
modalità, che consente al guest di accedere alle risorse di rete (compresa Internet) tramite l'interfaccia di rete dell'host.
Il secondo adattatore deve essere impostato su Host-only
, che consente la comunicazione bidirezionale tra l'host e il guest.
Questo adattatore è leggermente più complesso da configurare rispetto al primo, poiché richiede la modifica delle preferenze di rete globali di VirtualBox per configurare l'adattatore solo host (nota: ciò richiede i privilegi di amministratore).
In VirtualBox, vai a File -> Preferences -> Network
. Fare clic sulla Host-only Networks
scheda e fare clic sulla piccola +
icona per aggiungere un nuovo adattatore. Ti verrà richiesto di elevare le autorizzazioni di VirtualBox.
La compilazione della Adapter
scheda è obbligatoria; dovrebbe assomigliare a questo (ignora l'adattatore etichettato #2
; viene utilizzato per qualcosa di non correlato):
I valori nella DHCP
scheda server sono facoltativi. Se si intende codificare l'indirizzo IP per questo adattatore all'interno della configurazione di rete del guest, questi valori non sono necessari. Se, d'altra parte, si intende utilizzare DHCP, i valori potrebbero assomigliare a questo:
L'ultimo passo per quanto riguarda la configurazione di VirtualBox è tornare alla configurazione di rete della VM e aggiungere il secondo adattatore, che fa riferimento all'adattatore solo host che abbiamo appena creato:
Ora, nel sistema operativo guest, la rete deve essere configurata per utilizzare queste due interfacce di rete.
Su Debian o Ubuntu GNU / Linux, la configurazione è semplice come modificare /etc/network/interfaces
in questo modo:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
# The secondary network interface
auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0
(il purista potrebbe preferire /etc/network/interfaces.d
invece utilizzare la directory, ma questo va oltre lo scopo di questa spiegazione)
Riavvia i servizi di rete del guest, o più semplicemente, riavvia l'intera VM del guest e tutto dovrebbe "funzionare".
A questo punto, si dovrebbe essere in grado di eseguire il ping della VM guest 192.168.56.101
e ricevere una risposta (a condizione che un firewall software non interferisca).
Allo stesso modo, si dovrebbe essere in grado di eseguire il ping dell'host su 10.0.2.2
. Questo indirizzo IP sembra essere "codificato" nell'implementazione NAT di VirtualBox, o almeno specificato tramite una direttiva di configurazione non ovvia, e ci sono poche informazioni disponibili sulla sua origine. Ma, ahimè, "funziona".
Data questa configurazione, tutte e tre le condizioni descritte nella tua domanda sono soddisfatte.
Enter: la VPN
Ma ecco il problema. L'introduzione della VPN provoca un problema di interruzione dello spettacolo (beh, a seconda della VPN specifica e della sua configurazione).
Le VPN moderne sono in grado di dividere il tunneling , che è necessario per la configurazione di VirtualBox sopra menzionata per funzionare in base ai tre requisiti. Per (buone) ragioni di sicurezza, il tunneling diviso è spesso disabilitato, e questo è esattamente il problema nel tuo caso (e nel mio).
Quando ci si connette alla VPN, il client VPN (Cisco AnyConnect Secure Mobility Client, 3.1.02026, nel mio caso) esamina le tabelle di routing del computer host, le memorizza e quindi le analizza con valori che generalmente provengono da alcuni posizione gestita (ovvero, anche con privilegi di amministratore locale, è impossibile ignorare le impostazioni).
Puoi esaminare tu stesso le tabelle di routing aprendo command.exe
(su Windows):
C:\>route print
Prima di connettersi alla VPN, la tabella di routing contiene voci cruciali che consentono a questa configurazione di VirtualBox di funzionare correttamente. La connessione alla VPN comporta la rimozione di queste voci, impedendo la comunicazione tra l'host e il guest.
(Ci sono molte altre voci, che ho omesso qui, poiché sono irrilevanti per la causa principale di questo comportamento.)
Prima di connettersi alla VPN:
192.168.56.0 255.255.255.0 On-link 192.168.56.1 266
192.168.56.1 255.255.255.255 On-link 192.168.56.1 266
192.168.56.255 255.255.255.255 On-link 192.168.56.1 266
224.0.0.0 240.0.0.0 On-link 192.168.56.1 266
255.255.255.255 255.255.255.255 On-link 192.168.56.1 266
Dopo la connessione alla VPN:
192.168.56.1 255.255.255.255 On-link 192.168.56.1 266
224.0.0.0 240.0.0.0 On-link 192.168.56.1 266
255.255.255.255 255.255.255.255 On-link 192.168.56.1 266
Il client VPN rimuove le seguenti righe:
192.168.56.0 255.255.255.0 On-link 192.168.56.1 266
192.168.56.255 255.255.255.255 On-link 192.168.56.1 266
Senza queste ultime due voci, l'host e il guest non possono comunicare, e questo è esattamente il comportamento previsto quando il tunneling diviso è disabilitato nella configurazione VPN.
Normalmente, questi due comandi ripristinano quei percorsi:
C:\>route ADD 192.168.56.0 MASK 255.255.255.0 192.168.56.1 METRIC 266
C:\>route ADD 192.168.56.255 MASK 255.255.255.255 192.168.56.1 METRIC 266
Ma il client VPN rimane vigile: intercetta i tentativi di modificare la tabella di routing. Il mio client sembra consentire la seconda voce, ma non la prima. (E può pavimentare entrambi su base periodica; non ho provato per quello.)
Se la tua VPN specifica e la relativa configurazione dell'operatore consentono di abilitare il tunneling diviso, in genere viene attivata in questo modo:
Al momento della disconnessione dalla VPN, i client VPN ben educati ripristineranno le tabelle di routing che erano in atto prima della connessione. Il mio client VPN sembra farlo in modo affidabile, il che è vantaggioso perché significa che non è necessario riavviare la VM guest quando mi connetto o disconnetto dalla VPN. In tali casi, l'adattatore secondario della VM viene ripristinato, ma riacquista il suo indirizzo IP automaticamente e in modo trasparente, ripristinando la comunicazione tra host e guest quasi immediatamente. Meglio ancora, i montaggi NFS tra host e guest (sto usando montaggi CIFS) rimangono connessi attraverso le operazioni di connessione / disconnessione VPN.
Nel caso improbabile che la tua VPN permetta il tunneling diviso, potrebbe essere una semplice questione di abilitarlo, nel qual caso, mi piacerebbe sapere da te se "tutto funziona o meno".