sistema operativo guest virtualbox tramite vpn


43

Ho un guest Oracle Linux che esegue un server Web in VirtualBox su un host Windows 7. Devo configurare la rete in modo da poter fare 3 cose:

  1. l'host può connettersi al guest tramite un browser e ssh
  2. l'ospite può parlare con altri server sulla rete interna tramite la VPN dell'host
  3. l'ospite può accedere a Internet esterno

Ho letto alcune risposte e provato alcune configurazioni, ed ecco cosa succede:

Bridged

  1. l'host non può raggiungere l'ospite
  2. l'ospite non può vedere attraverso la VPN
  3. gli ospiti possono raggiungere internet

NAT

  1. l'host non può raggiungere l'ospite
  2. gli ospiti possono vedere tramite VPN
  3. gli ospiti non possono raggiungere internet

Host-Only

tutte e 3 le condizioni falliscono.

NAT-Network

  1. l'host non può raggiungere l'ospite
  2. gli ospiti possono vedere tramite VPN
  3. gli ospiti non possono raggiungere internet

Devo anche sottolineare che a volte l'host è collegato tramite una VPN mentre altre volte è semplicemente collegato direttamente alla rete aziendale. Quando è collegato direttamente, un adattatore a ponte soddisfa tutte e 3 le condizioni. Idealmente, ci sarebbe una configurazione che soddisfa tutte e 3 le condizioni indipendentemente dal fatto che ci sia una VPN o una connessione diretta.


Una connessione VPN di solito ha un proprio adattatore, quindi il mio primo pensiero è che dovresti collegarlo all'adattatore VPN (quando collegato alla VPN).
Ƭᴇcʜιᴇ007,

Ho collegato la VM all'adattatore VPN e non ottiene un indirizzo IP
ewok il

Puoi dire se si tratta di un adattatore layer2 o layer3?
MariusMatutiae,

@MariusMatutiae scusa, non sono sicuro di cosa intendi.
Ewok,

Che tipo di VPN è?
MariusMatutiae,

Risposte:


63

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 NATmodalità, che consente al guest di accedere alle risorse di rete (compresa Internet) tramite l'interfaccia di rete dell'host.

Adattatore 1: NAT

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 Networksscheda e fare clic sulla piccola +icona per aggiungere un nuovo adattatore. Ti verrà richiesto di elevare le autorizzazioni di VirtualBox.

La compilazione della Adapterscheda è obbligatoria; dovrebbe assomigliare a questo (ignora l'adattatore etichettato #2; viene utilizzato per qualcosa di non correlato):

Preferenze di rete 1

I valori nella DHCPscheda 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:

Preferenze di rete 2

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:

Adattatore 2: solo host

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/interfacesin 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.dinvece 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.101e 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:

Client VPN Cisco: consente l'accesso alle risorse LAN

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".


5
Grazie mille per tutto lo sforzo in questa risposta (immagini e tutto). Ha aiutato molto la tua spiegazione!
Edenshaw,

Ben fatto, Ben! Questo mi ha aiutato a capire i miei problemi con la VPN e mi ha aiutato a articolare chiaramente il mio caso nel mio report sugli incidenti all'IT!
Mark Maglana,

1
Cordiali saluti, ho accesso alla funzione "Consenti accesso locale (LAN)" su AnyConnect e posso confermare che spuntando questa casella di controllo non si impedisce l'eliminazione dei percorsi.
Lqueryvg,

-1

Come uso il mio host di Windows VPN nella guest machine Linux

Imposta il mio VPN per utilizzare numeri di porta fissi nelle impostazioni

Impostare la rete VM su NAT

Configurare le impostazioni del proxy linux su ip 10.0.2.2 (Gateway NAT virtualbox predefinito) e le porte che ho inserito manualmente nel mio VPN

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.