У меня была точно такая же проблема, и я дошел до ее разрешения, поэтому я с удовольствием объясню проблему и ее решение в деталях.
Без привлечения VPN
Важно понимать конфигурацию, которая требуется для удовлетворения ваших требований без использования VPN. Кроме того, эта информация предполагает, что ни один программный брандмауэр не мешает ни на хосте, ни на госте.
Без VPN это обычно решается путем создания двух сетевых адаптеров в конфигурации виртуальной машины.
Первый адаптер должен быть установлен в NAT
режим, который позволяет гостю получать доступ к сетевым ресурсам (включая Интернет) через сетевой интерфейс хоста.
Второй адаптер должен быть установлен на Host-only
, что позволяет двунаправленную связь между хостом и гостем.
Этот адаптер немного сложнее в настройке, чем первый, поскольку он требует изменения глобальных сетевых настроек VirtualBox для настройки адаптера только для хоста (примечание: для этого требуются права администратора).
В VirtualBox перейдите на File -> Preferences -> Network
. Нажмите на Host-only Networks
вкладку и нажмите маленький +
значок, чтобы добавить новый адаптер. Вам будет предложено повысить разрешения VirtualBox.
Заполнение Adapter
вкладки обязательно; это должно выглядеть примерно так (игнорируйте адаптер с надписью #2
; он используется для чего-то не связанного):
Значения на DHCP
вкладке сервера являются необязательными. Если вы собираетесь жестко закодировать IP-адрес для этого адаптера в конфигурации сети гостя, тогда эти значения не нужны. Если, с другой стороны, вы собираетесь использовать DHCP, значения могут выглядеть примерно так:
Последний шаг в настройке VirtualBox - вернуться к сетевой конфигурации виртуальной машины и добавить второй адаптер, который ссылается на только что созданный адаптер хоста:
Теперь в гостевой операционной системе сеть должна быть настроена на использование этих двух сетевых интерфейсов.
В Debian или Ubuntu GNU / Linux конфигурация так же проста, как изменение, /etc/network/interfaces
чтобы выглядеть так:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
# The secondary network interface
auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0
(пурист может предпочесть использовать /etc/network/interfaces.d
каталог вместо этого, но это выходит за рамки этого объяснения)
Перезапустите гостевые сетевые службы или, проще говоря, перезапустите всю гостевую виртуальную машину, и все должно «просто работать».
На этом этапе необходимо иметь возможность пинговать гостевую виртуальную машину 192.168.56.101
и получать ответ (при условии, что программный брандмауэр не вмешивается).
Аналогично, нужно иметь возможность пинговать хост на 10.0.2.2
. Этот IP-адрес, по-видимому, «жестко запрограммирован» в реализации NAT VirtualBox или, по крайней мере, указан в какой-то неочевидной директиве конфигурации, и информации о его происхождении мало. Но, увы, «это просто работает».
Учитывая эту конфигурацию, все три условия, изложенные в вашем вопросе, выполнены.
Введите: VPN
Но вот в чем дело. Введение VPN вызывает проблему остановки показа (ну, в зависимости от конкретной VPN и ее конфигурации).
Современные VPN способны к разделенному туннелированию , которое требуется для работы вышеупомянутой конфигурации VirtualBox в соответствии с вашими тремя требованиями. По (хорошим) причинам безопасности разделенное туннелирование часто отключается, и это как раз проблема в вашем случае (и моем).
Когда вы подключаетесь к VPN, VPN-клиент (в моем случае Cisco AnyConnect Secure Mobility Client, 3.1.02026) проверяет таблицы маршрутизации хост-компьютера, запоминает их, а затем передает их значениям, которые обычно поступают из некоторого централизованно- управляемое местоположение (т. е. даже с правами локального администратора невозможно изменить настройки).
Вы можете самостоятельно проверить таблицы маршрутизации, открыв command.exe
(в Windows):
C:\>route print
Перед подключением к VPN таблица маршрутизации содержит важные записи, которые позволяют этой конфигурации VirtualBox работать правильно. Подключение к VPN приводит к удалению этих записей, что предотвращает связь между хостом и гостем.
(Есть много других записей, которые я здесь пропустил, так как они не имеют отношения к основной причине такого поведения.)
Перед подключением к VPN:
192.168.56.0 255.255.255.0 On-link 192.168.56.1 266
192.168.56.1 255.255.255.255 On-link 192.168.56.1 266
192.168.56.255 255.255.255.255 On-link 192.168.56.1 266
224.0.0.0 240.0.0.0 On-link 192.168.56.1 266
255.255.255.255 255.255.255.255 On-link 192.168.56.1 266
После подключения к VPN:
192.168.56.1 255.255.255.255 On-link 192.168.56.1 266
224.0.0.0 240.0.0.0 On-link 192.168.56.1 266
255.255.255.255 255.255.255.255 On-link 192.168.56.1 266
VPN-клиент удаляет следующие строки:
192.168.56.0 255.255.255.0 On-link 192.168.56.1 266
192.168.56.255 255.255.255.255 On-link 192.168.56.1 266
Без этих двух последних записей хост и гость не могут обмениваться данными, и это именно то, что предполагается, когда раздельное туннелирование отключено в конфигурации VPN.
Обычно эти две команды восстанавливают эти маршруты:
C:\>route ADD 192.168.56.0 MASK 255.255.255.0 192.168.56.1 METRIC 266
C:\>route ADD 192.168.56.255 MASK 255.255.255.255 192.168.56.1 METRIC 266
Но VPN-клиент остается бдительным: он перехватывает попытки изменить таблицу маршрутизации. Кажется, мой клиент разрешает вторую запись, но не первую. (И это может периодически отменять оба варианта; я не проверял это.)
Если ваша конкретная VPN и ее сопутствующая конфигурация позволяют включить раздельное туннелирование, оно обычно включается следующим образом:
После отключения от VPN клиенты VPN с хорошим поведением восстановят таблицы маршрутизации, которые были до подключения. Мой VPN-клиент, кажется, делает это надежно, что полезно, поскольку это означает, что гостевую виртуальную машину не нужно перезапускать, когда я подключаюсь или отключаюсь от VPN. В таких случаях вторичный адаптер виртуальной машины сбрасывается, но он автоматически и прозрачно повторно получает свой IP-адрес, почти немедленно восстанавливая связь между хостом и гостем. Более того, NFS-монтирования между хостом и гостем (я использую CIFS-монтирования) остаются подключенными при операциях подключения / отключения VPN.
В том маловероятном случае, если ваш VPN разрешает раздельное туннелирование, может быть достаточно просто включить его, и в этом случае я хотел бы услышать от вас, будет ли «все просто работает».