VirtualBox - гостевая Ubuntu теряет DNS, когда хост подключается к VPN


11

У меня есть гостевая ОС Ubuntu в VirtualBox с использованием NAT по умолчанию для eth0.

Хорошо работает в офисе и дома, за исключением случаев, когда в офисе VPN из дома.

Когда хост-ОС (Windows 7) подключена к VPN, поиск DNS не работает в гостевой системе Virtualbox. DNS-запросы в порядке на хосте. В Virtualbox я могу пинговать IP-адреса напрямую как внутри VPN, так и снаружи, так что это не проблема подключения.

Похоже, гость Ubuntu использует localhost в качестве точки входа DNS, согласно /etc/resolv.confи nslookup. Таким образом, похоже, что что-то локально отправляется в другой базовый DNS.

Как мне устранить это?


Что вы используете для VPN? Есть ли у вас доступ к настройкам VPN на устройстве, к которому подключаются эти машины? Обычно машины, подключающиеся к VPN, получают свои настройки от устройства VPN.
jmreicha

Чтобы выяснить, DNS-запросы на хосте работают нормально - это касается только гостя Virtualbox.
wrschneider

Ответы:


17

Это сработало по какой-то причине

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

Я подозреваю, что это потому, что когда VPN активен, хост делает что-то особенное для поиска DNS, помимо простой пересылки запросов на указанные DNS-серверы, которые VirtualBox обнаружил из конфигурации Windows.


1
Ты спас день чувак.
CantGetANick

Отлично сработало для меня!
Хай Минь Нгуен

1

У меня была очень похожая ситуация с Lubuntu 16.04 (должна быть идентична в других Ubuntus), но это исправление не улучшило ситуацию. По крайней мере, с 16.04 проблема, по-видимому, заключается в том, что NetworkManager использует локальный DNS-прокси (dnsmasq), и это плохо работает с VPN-соединениями, по крайней мере, в конфигурации по умолчанию.

Комментирование / удаление dns = dnsmasq в /etc/NetworkManager/NetworkManager.conf

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

Вероятно, есть способ настроить dnsmasq, но это дает (мне) эквивалентный доступ к хосту (dns и т. Д.), Поэтому я не исследовал. YMMV.


1

TL; DR:

  • перезагрузите виртуальную машину, убедившись, что статус VPN (подключен или отключен) хоста тем временем не изменяется;
  • позволить движку VirtualBox NAT перехватывать запросы DNS и пересылать их распознавателю хоста, то есть использовать API DNS хоста для запроса информации и возврата ее гостю. Вы устанавливаете это:

VBoxManage modifyvm "VM name" --natdnshostresolver1 on


Запуск виртуальной машины на хосте, подключенном к VPN, может привести к проблемам с DNS при каждом изменении статуса VPN. Есть два сценария:

  1. виртуальная машина порождается в хосте, подключенном к VPN, и в определенный момент VPN отключается;
  2. виртуальная машина порождается на хосте, не подключенном к VPN, и в определенный момент VPN подключается

1) VPN-подключен -> VPN-отключен

В этом случае виртуальная машина, вероятно, получит адрес DNS, который является частью сети VPN-провайдера. Обычно это будет внутренний частный IP-адрес. Проверьте содержание cat /etc/resolv.conf. В моем случае я получаю следующее:

nameserver 10.8.8.1 <--- Это внутренняя сеть VPN-провайдера

nameserver 192.168.178.1 <--- Это мой домашний шлюз (роутер)

Теперь отключите хост от VPN-подключения:

  • конфигурация DNS в виртуальных машинах не изменяется -> виртуальная машина все еще будет отправлять запросы DNS на IP-адрес назначения 10.8.8.1, который не может быть достигнут, так как хост больше не подключен к VPN

Более подробно:

  • пакет будет отправлен в def GW, определенный сетью VirtualBox NAT, источником NATTed (с IP-адресом хоста) и, наконец, обработан таблицей маршрутизации хоста, которая перенаправит его на ваш домашний шлюз.
  • Здесь пакет будет отброшен, поскольку ваш домашний шлюз не имеет записи для 10.8.8.1 на стороне LAN (частные адреса) и не может пересылать его на стороне WAN (публичные адреса), поскольку он является частным адресом.

2) VPN-отключен -> VPN-подключен

В этом случае виртуальная машина не получит DNS-адрес, который является частью поставщика сети VPN, поскольку хост не был подключен к VPN при запуске виртуальной машины. Проверьте содержание cat /etc/resolv.conf. В моем случае я получаю следующее:

nameserver 192.168.178.1 <--- Это мой домашний шлюз (роутер)

Теперь подключите хост к VPN-соединению:

  • конфигурация DNS в виртуальных машинах не изменяется -> виртуальная машина будет по-прежнему отправлять DNS-запросы на IP-адрес назначения 192.168.178.1, который не может быть достигнут (пинг до него все еще работает), поскольку теперь DNS-запрос от виртуальной машины обрабатывается интерфейс VPN Tap, который будет перенаправлять пакеты в сеть VPN, где невозможно достичь 192.168.178.1 (ваш внутренний IP-адрес домашнего шлюза).

Более подробно:

  • пакет будет отправлен в def GW, определенный сетью VirtualBox NAT, отправленный на интерфейс VPN Tap, который изменит заголовок IP, заменив IP-адрес источника виртуальной машины на IP-адрес, назначенный хосту сетью VPN, в то время как пункт назначения адрес остается DNS-адресом 192.168.178.1.
  • этот пакет затем будет инкапсулирован во внешний IP-заголовок, который будет иметь IP-адрес хоста в качестве источника (который впоследствии будет заменен на NAT источника на домашнем шлюзе) и VPN-сервер в качестве адреса назначения.
  • когда пакет достигает сети VPN, он декапсулируется. IP-адрес назначения теперь снова является DNS-адресом 192.168.178.1, к которому у сети провайдера VPN нет возможности связаться (за исключением исключительного совпадения, когда это точно такой же IP-адрес, который используется вашим провайдером сети VPN для своего DNS-сервера).
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.