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:
- la VM se genera en un host conectado a VPN y en cierto punto la VPN se desconecta;
- 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).