VirtualBox - guest Ubuntu perde DNS quando l'host si connette alla VPN


11

Ho un SO guest Ubuntu in VirtualBox usando il NAT predefinito per eth0.

Funziona bene in ufficio e a casa TRANNE quando in ufficio VPN da casa.

Quando il sistema operativo host (Windows 7) è connesso alla VPN, le ricerche DNS non funzionano nel guest Virtualbox. Le ricerche DNS vanno bene sull'host. All'interno di Virtualbox, posso eseguire il ping degli IP direttamente sia all'interno della VPN che all'esterno, quindi non è un problema di connettività.

Sembra che il guest Ubuntu stia usando localhost come punto di ingresso DNS, secondo /etc/resolv.confe nslookup. Quindi sembra che qualcosa localmente stia inviando ad altri DNS sottostanti.

Come posso risolvere questo problema?


Cosa stai usando per VPN? Hai accesso alle impostazioni VPN sul dispositivo a cui queste macchine si stanno connettendo? In genere le macchine che si connettono alla VPN traggono le loro impostazioni dal dispositivo VPN.
jmreicha,

Per chiarire che le ricerche DNS sull'host funzionano correttamente, è interessato solo il guest Virtualbox.
wrschneider,

Risposte:


17

Questo ha funzionato per qualche motivo

C:\...\VirtualBox\VBoxManage modifyvm "VM name" --natdnshostresolver1 on

Sospetto perché, quando la VPN è attiva, l'host sta facendo qualcosa di speciale per le ricerche DNS oltre a inoltrare le richieste ai server DNS specificati che VirtualBox ha raccolto dalla configurazione di Windows.


1
Hai salvato la giornata amico.
CantGetANick,

Ha funzionato perfettamente per me!
Hai Minh Nguyen,

1

Ho avuto una situazione molto simile con Lubuntu 16.04 (dovrebbe essere identico in altri Ubuntus) ma questa correzione non ha migliorato la situazione. Almeno con 16.04, il problema sembra essere che NetworkManager utilizzi un proxy DNS locale (dnsmasq) e questo non funziona bene con le connessioni VPN, almeno nella configurazione predefinita.

Commentare / eliminare dns = dnsmasq in /etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile,ofono
# dns=dnsmasq

C'è probabilmente un modo per configurare dnsmasq ma questo dà (me) un accesso equivalente all'host (dns, ecc.), Quindi non ho studiato. YMMV.


1

TL; DR:

  • riavviare la VM assicurandosi che lo stato VPN (connesso o disconnesso) dell'host non cambi nel frattempo;
  • lasciare che il motore NAT VirtualBox intercetti le richieste DNS e le inoltri al risolutore dell'host, ovvero utilizzare l'API DNS dell'host per interrogare le informazioni e restituirle al guest. Puoi impostare questo per:

VBoxManage modifyvm "VM name" --natdnshostresolver1 on


L'esecuzione di una macchina virtuale in un host collegato a una VPN può causare problemi DNS ogni volta che lo stato della VPN cambia. Esistono due scenari:

  1. la VM viene generata in un host connesso alla VPN e ad un certo punto la VPN si disconnette;
  2. la VM viene generata in un host non connesso a VPN e ad un certo punto la VPN si connette

1) VPN connesso -> VPN disconnesso

In questo caso, probabilmente la VM avrà ricevuto un indirizzo DNS che fa parte della rete del provider VPN. Questo di solito sarà un indirizzo IP privato interno. Controlla il contenuto di cat /etc/resolv.conf. Nel mio caso ottengo quanto segue:

nameserver 10.8.8.1 <--- Questo è interno alla rete del provider VPN

nameserver 192.168.178.1 <--- Questo è il mio gateway di casa (router)

Ora disconnetti l'host dalla connessione VPN:

  • la configurazione DNS nelle macchine virtuali non cambia -> La macchina virtuale invierà comunque richieste DNS all'IP 10.8.8.1 di destinazione che non è possibile raggiungere poiché l'host non è più connesso alla VPN

Più in dettaglio:

  • il pacchetto verrà inviato al def GW definito dalla rete NAT VirtualBox, sorgente NATTed (con l'indirizzo IP dell'host) e infine gestito dalla tabella di routing dell'host che lo inoltrerà al gateway di casa.
  • Qui il pacchetto verrà eliminato poiché il gateway di casa non ha alcuna voce per 10.8.8.1 nel lato LAN (indirizzi privati) e non può inoltrarlo sul lato WAN (indirizzi pubblici) in quanto indirizzo privato.

2) VPN disconnesso -> VPN connesso

In questo caso la VM non riceverà l'indirizzo DNS che fa parte del provider di rete VPN poiché l'host non era connesso alla VPN all'avvio della VM. Controlla il contenuto di cat /etc/resolv.conf. Nel mio caso ottengo quanto segue:

nameserver 192.168.178.1 <--- Questo è il mio gateway di casa (router)

Ora collega l'host alla connessione VPN:

  • la configurazione DNS nelle macchine virtuali non cambia -> La macchina virtuale invierà comunque richieste DNS a IP 192.168.178.1 di destinazione che non è possibile raggiungere (il ping funziona comunque) poiché ora la richiesta DNS dalla macchina virtuale viene gestita da l'interfaccia Tap VPN che inoltrerà i pacchetti alla rete VPN dove 192.168.178.1 (il tuo indirizzo IP interno del gateway home) non può essere raggiunto.

Più in dettaglio:

  • il pacchetto verrà inviato al def GW definito dalla rete NAT VirtualBox, inviato all'interfaccia Tap VPN che modificherà l'intestazione IP sostituendo l'indirizzo di origine IP VM con un indirizzo IP assegnato all'host dalla rete VPN, mentre la destinazione l'indirizzo rimane l'indirizzo DNS 192.168.178.1.
  • questo pacchetto verrà quindi incapsulato in un'intestazione IP esterna che avrà l'indirizzo IP dell'host come sorgente (che tra l'altro verrà successivamente sostituito dal NAT di origine sul gateway principale) e il server VPN come indirizzo di destinazione.
  • quando il pacchetto raggiunge la rete VPN, viene decapsulato. L'indirizzo IP di destinazione è ora di nuovo l'indirizzo DNS 192.168.178.1 che la rete del provider VPN non ha modo di raggiungere (a meno che nella straordinaria conicidenza in cui questo è esattamente lo stesso indirizzo IP utilizzato dal provider di rete VPN per il suo server DNS).
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.