VirtualBox: Ubuntu invitado pierde DNS cuando el host se conecta a VPN

11

Tengo el sistema operativo invitado de Ubuntu en VirtualBox usando NAT predeterminado para eth0.

Funciona bien en la oficina y en casa EXCEPTO cuando está en la oficina VPN desde casa.

Cuando el sistema operativo host (Windows 7) está conectado a la VPN, las búsquedas de DNS no funcionan dentro del huésped Virtualbox. Las búsquedas de DNS están bien en el host. Dentro de Virtualbox, puedo hacer ping a IP directamente tanto dentro de la VPN como en el exterior, por lo que no es un problema de conectividad.

Parece que el invitado de Ubuntu está usando localhost como punto de entrada DNS, de acuerdo con /etc/resolv.confy nslookup. Entonces parece que algo local se está enviando a otro DNS subyacente.

¿Cómo soluciono esto?

wrschneider
fuente
¿Qué estás usando para VPN? ¿Tiene acceso a la configuración de VPN en el dispositivo al que se conectan estas máquinas? Por lo general, las máquinas que se conectan a la VPN obtienen su configuración del dispositivo VPN.
jmreicha
Para aclarar que las búsquedas de DNS en el host están funcionando bien, solo se ve afectado el invitado Virtualbox.
wrschneider

Respuestas:

17

Esto funcionó por alguna razón

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

Sospecho que es porque cuando la VPN está activa, el host está haciendo algo especial para las búsquedas de DNS además de simplemente enviar solicitudes a los servidores DNS especificados que VirtualBox recogió de la configuración de Windows.

wrschneider
fuente
1
Salvaste el día amigo.
CantGetANick
¡Funcionó perfectamente para mí!
Hai Minh Nguyen
1

Tuve una situación muy similar con Lubuntu 16.04 (debería ser idéntica en otros Ubuntus) pero esta solución no mejoró la situación. Al menos con 16.04, el problema parece ser que NetworkManager usa un proxy DNS local (dnsmasq), y esto no funciona bien con las conexiones VPN, al menos en la configuración predeterminada.

Comentando / borrando dns = dnsmasq en /etc/NetworkManager/NetworkManager.conf

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

Probablemente haya una forma de configurar dnsmasq, pero esto me da acceso equivalente al host (dns, etc.), por lo que no he investigado. YMMV.

AntonOfTheWoods
fuente
1

TL; DR:

  • reinicie la VM asegurándose de que el estado de VPN (ya sea conectado o desconectado) del host no cambie mientras tanto;
  • deje que el motor NAT de VirtualBox intercepte las solicitudes de DNS y las reenvíe a la resolución del host, es decir, utilice la API de DNS del host para consultar la información y devolverla al invitado. Lo configuras por:

VBoxManage modifyvm "VM name" --natdnshostresolver1 on


Ejecutar una VM en un host conectado a una VPN puede generar problemas de DNS cada vez que cambia el estado de la VPN. Hay dos escenarios:

  1. la VM se genera en un host conectado a VPN y en cierto punto la VPN se desconecta;
  2. la VM se genera en un host no conectado a VPN y, en cierto punto, la VPN se conecta

1) VPN conectado -> VPN desconectado

En este caso, la VM probablemente habrá recibido una dirección DNS que forma parte de la red del proveedor de VPN. Por lo general, será una dirección IP privada interna. Verifique el contenido de cat /etc/resolv.conf. En mi caso me sale lo siguiente:

nameserver 10.8.8.1 <--- Esto es interno a la red del proveedor de VPN

nameserver 192.168.178.1 <--- Esta es mi puerta de enlace (enrutador)

Ahora desconecte el host de la conexión VPN:

  • la configuración de DNS en las máquinas virtuales no cambia -> VM seguirá enviando solicitudes de DNS a la IP de destino 10.8.8.1 que no se puede alcanzar ya que el host ya no está conectado a la VPN

En mas detalles:

  • el paquete se enviará a la definición GW definida por la red NAT de VirtualBox, la fuente NATTed (con la dirección IP del host), y finalmente será manejada por la tabla de enrutamiento del host que lo reenviará a su puerta de enlace de origen.
  • Aquí el paquete se descartará ya que su puerta de enlace doméstica no tiene entrada para 10.8.8.1 en el lado LAN (direcciones privadas) y no puede reenviarlo en el lado WAN (direcciones públicas) como una dirección privada.

2) VPN desconectado -> VPN conectado

En este caso, la VM no recibirá la dirección DNS que forma parte del proveedor de red VPN ya que el host no estaba conectado a la VPN cuando se inició la VM. Verifique el contenido de cat /etc/resolv.conf. En mi caso me sale lo siguiente:

nameserver 192.168.178.1 <--- Esta es mi puerta de enlace (enrutador)

Ahora conecte el host a la conexión VPN:

  • la configuración de DNS en las máquinas virtuales no cambia -> VM seguirá enviando solicitudes DNS a la IP de destino 192.168.178.1 que no se puede alcanzar (aunque el ping todavía funciona) ya que ahora la solicitud DNS de la VM está siendo manejada por la interfaz VPN Tap que reenviará los paquetes a la red VPN donde no se puede acceder a 192.168.178.1 (la dirección IP de su puerta de enlace interna).

En mas detalles:

  • el paquete se enviará al def GW definido por la red NAT de VirtualBox, se enviará a la interfaz VPN Tap que modificará el encabezado IP reemplazando la dirección de origen IP de VM con una dirección IP asignada al host por la red VPN, mientras que el destino dirección sigue siendo la dirección DNS 192.168.178.1.
  • este paquete se encapsulará en un encabezado IP externo que tendrá la dirección IP del host como fuente (que por cierto será reemplazada por la fuente NAT en la puerta de enlace de origen) y el servidor VPN como dirección de destino.
  • cuando el paquete llega a la red VPN, se desencapsula. La dirección IP de destino ahora es nuevamente la dirección DNS 192.168.178.1 que la red de proveedores de VPN no tiene forma de alcanzar (a menos que sea en la extraordinaria conicidencia donde esta es exactamente la misma dirección IP utilizada por su proveedor de red VPN para su servidor DNS).
StefTN
fuente