TL; DR:
- перезавантажте VM, переконавшись, що статус VPN (підключений або відключений) хоста тим часом не змінюється;
- нехай VirtualBox NAT движок перехоплює запити DNS та пересилає їх до вирішувача хоста, тобто використовує API DNS хоста для запиту інформації та повернення її гостю. Ви встановили це:
VBoxManage modifyvm "VM name" --natdnshostresolver1 on
Запуск VM в хості, підключеному до VPN, може призводити до проблем DNS щоразу, коли статус VPN змінюється. Є два сценарії:
- VM створюється в хості, підключеному до VPN, і в певний момент VPN відключається;
- VM нереєструється в хост, який не пов'язаний з VPN, і в певний момент VPN з'єднується
1) VPN-підключено -> VPN-відключено
У цьому випадку VM, ймовірно, отримає адресу DNS, яка є частиною мережі постачальника VPN. Зазвичай це внутрішня приватна IP-адреса. Перевірте вміст cat /etc/resolv.conf
. У моєму випадку я отримую наступне:
nameserver 10.8.8.1
<--- Це внутрішнє значення для мережі постачальника VPN
nameserver 192.168.178.1
<--- Це мій домашній шлюз (маршрутизатор)
Тепер відключіть хост від VPN-з'єднання:
- конфігурація DNS у віртуальних машинах не змінюється -> VM все одно буде надсилати запити DNS до пункту призначення IP 10.8.8.1, який неможливо досягти, оскільки хост більше не підключений до VPN
Більш детально:
- пакет буде надісланий до Def GW, визначеному мережею VirtualBox NAT, джерелом NATTed (з IP-адресою хоста) і, нарешті, обробляється таблицею маршрутизації хоста, яка передасть його на ваш домашній шлюз.
- Тут пакет буде викинутий, оскільки ваш домашній шлюз не має запису на 10.8.8.1 в локальній мережі (приватні адреси) і не може переслати його на сторону WAN (загальнодоступні адреси), оскільки це приватна адреса.
2) VPN-відключений -> VPN-підключено
У цьому випадку VM не отримає адресу DNS, яка є частиною провайдера мережі VPN, оскільки хост не був підключений до VPN, коли VM запускався. Перевірте вміст cat /etc/resolv.conf
. У моєму випадку я отримую наступне:
nameserver 192.168.178.1
<--- Це мій домашній шлюз (маршрутизатор)
Тепер підключіть хост до VPN-з'єднання:
- конфігурація DNS у віртуальних машинах не змінюється -> VM все одно буде надсилати запити DNS до пункту призначення IP 192.168.178.1, до якого неможливо досягти (хоча до нього все ще працює), оскільки тепер запит DNS від VM обробляється інтерфейс VPN Tap, який перенаправить пакети до мережі VPN, де не може бути досягнуто 192.168.178.1 (IP-адреса вашого внутрішнього домашнього шлюзу).
Більш детально:
- пакет буде надісланий до def GW, визначеному NAT VirtualBox NAT, надісланий до інтерфейсу VPN Tap, який модифікує заголовок IP, замінюючи IP-адресу джерела VM IP-адресою, призначену хосту мережею VPN, при цьому призначення адреса залишається адресою DNS 192.168.178.1.
- цей пакет потім буде інкапсульований у зовнішній заголовок IP, який матиме IP-адресу хоста як джерело (цей btw буде згодом замінений джерелом NAT на домашньому шлюзі) та VPN-сервер як адреса призначення.
- коли пакет досягає мережі VPN, він декапсулюється. Цільова IP-адреса тепер знову є DNS-адресою 192.168.178.1, до якої мережа постачальників VPN не може дійти (крім випадків, коли це точно та сама IP-адреса, яку використовує ваш постачальник VPN-мережі для свого DNS-сервера).