32

У меня есть гость Oracle Linux, на котором установлен веб-сервер в VirtualBox на хосте Windows 7. Мне нужно настроить сеть так, чтобы я мог делать 3 вещи:

  1. хост может подключиться к гостю через браузер и ssh
  2. гость может общаться с другими серверами во внутренней сети через VPN хоста
  3. гость может выйти на внешний интернет

Я прочитал несколько ответов и попробовал несколько конфигураций, и вот что происходит:

Мостовое

  1. хозяин не может связаться с гостем
  2. гость не может видеть через VPN
  3. гость может выйти в интернет

NAT

  1. хозяин не может связаться с гостем
  2. Гость может видеть через VPN
  3. гость не может выйти в интернет

Внутрикомпьютерная

все 3 условия не выполняются.

NAT-сети

  1. хозяин не может связаться с гостем
  2. Гость может видеть через VPN
  3. гость не может выйти в интернет

Следует также отметить, что иногда хост подключается через VPN, а иногда просто подключается напрямую к корпоративной сети. Когда он подключен напрямую, мостовой адаптер удовлетворяет всем 3 условиям. В идеале должна быть конфигурация, которая удовлетворяет всем трем условиям, независимо от того, есть ли VPN или прямое соединение.

1 ответ1

51

У меня была точно такая же проблема, и я дошел до ее разрешения, поэтому я с удовольствием объясню проблему и ее решение в деталях.

Без привлечения VPN

Важно понимать конфигурацию, которая требуется для удовлетворения ваших требований без использования VPN. Кроме того, эта информация предполагает, что ни программный брандмауэр не мешает ни на хосте, ни на госте.

Без VPN это обычно решается путем создания двух сетевых адаптеров в конфигурации виртуальной машины.

Первый адаптер должен быть установлен в режим NAT , который позволяет гостю получать доступ к сетевым ресурсам (включая Интернет) через сетевой интерфейс хоста.

Адаптер 1: NAT

Второй адаптер должен быть установлен только для Host-only , что обеспечивает двунаправленную связь между хостом и гостем.

Этот адаптер немного сложнее в настройке, чем первый, потому что он требует изменения глобальных сетевых настроек VirtualBox для настройки адаптера только для хоста (примечание: для этого требуются права администратора).

В VirtualBox перейдите в File -> Preferences -> Network . Перейдите на вкладку « Host-only Networks » и нажмите маленький значок « + чтобы добавить новый адаптер. Вам будет предложено повысить разрешения VirtualBox.

Заполнение вкладки Adapter обязательно; это должно выглядеть примерно так (игнорируйте адаптер с меткой #2 ; он используется для чего-то не связанного):

Сетевые настройки 1

Значения на вкладке DHCP сервера являются необязательными. Если вы собираетесь жестко закодировать IP-адрес для этого адаптера в конфигурации сети гостя, тогда эти значения не нужны. Если, с другой стороны, вы собираетесь использовать DHCP, значения могут выглядеть примерно так:

Сетевые настройки 2

Последний шаг в настройке VirtualBox - вернуться к сетевой конфигурации виртуальной машины и добавить второй адаптер, который ссылается на только что созданный адаптер хоста:

Адаптер 2: только для хоста

Теперь в гостевой операционной системе сеть должна быть настроена на использование этих двух сетевых интерфейсов.

В 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 и ее сопутствующая конфигурация позволяют включить раздельное туннелирование, оно обычно включается следующим образом:

Cisco VPN client: разрешить доступ к ресурсам локальной сети

После отключения от VPN клиенты VPN с хорошим поведением восстановят таблицы маршрутизации, которые были до подключения. Кажется, мой VPN-клиент делает это надежно, что выгодно, потому что это означает, что гостевую виртуальную машину не нужно перезапускать, когда я подключаюсь или отключаюсь от VPN. В таких случаях вторичный адаптер виртуальной машины сбрасывается, но он автоматически и прозрачно повторно получает свой IP-адрес, почти немедленно восстанавливая связь между хостом и гостем. Более того, NFS-монтирования между хостом и гостем (я использую CIFS-монтирования) остаются подключенными при операциях подключения / отключения VPN.

В том маловероятном случае, если ваш VPN разрешает раздельное туннелирование, может быть достаточно просто включить его, и в этом случае я хотел бы услышать от вас, действительно ли "все просто работает".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .