гостевая ОС virtualbox через vpn

43

У меня есть гостевая система 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 условиям. В идеале должна быть конфигурация, которая удовлетворяет всем 3 условиям, независимо от того, есть ли VPN или прямое соединение.

Ewok
источник
VPN-соединение обычно имеет собственный адаптер, поэтому я сначала подумал, что вам придется подключить его к VPN-адаптеру (при подключении к VPN).
Ƭᴇcʜιᴇ007
Я подключил виртуальную машину к адаптеру VPN, и он не получает IP-адрес
ewok
Вы можете сказать, является ли это адаптером layer2 или layer3?
MariusMatutiae
@MariusMatutiae извините, не уверен, что вы имеете в виду.
Ewok
Какой это тип VPN?
MariusMatutiae

Ответы:

63

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

Без привлечения 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 разрешает раздельное туннелирование, может быть достаточно просто включить его, и в этом случае я хотел бы услышать от вас, будет ли «все просто работает».

Бен Джонсон
источник
5
Большое спасибо за все усилия в этом ответе (изображения и все). Очень помогло ваше объяснение!
Edenshaw
Молодец, Бен! Это помогло мне понять мои проблемы с VPN и четко сформулировало мой случай в моем отчете об инциденте в ИТ!
Марк Маглана
1
К вашему сведению, у меня есть доступ к функции «Разрешить локальный доступ (LAN)» на AnyConnect, и я могу подтвердить, что установка этого флажка не препятствует удалению маршрутов.
Lqueryvg
-1

Как я использую мой Windows хост vpn в гостевой машине Linux мяты

Установите мой VPN для использования фиксированных номеров портов в настройках

Установите сеть VM на NAT

Установите настройки прокси-сервера linux на ip 10.0.2.2 (NAT-шлюз виртуальной коробки по умолчанию) и порты, которые я ввел вручную в свой vpn

Мустафа Кандан
источник