Как подключиться к виртуальной машине через браузер

Обновлено: 04.07.2024

Гостевая (т.е. установленная в виртуальной машине) ОС: Linux Ubuntu 16.04.4

В гостевой ОС запущен некий сервер, т.е. программа, которая открыла на прослушивание порт (скажем, под номером 3000), принимает запросы от любого клиента и дает ответ. Неважно, какой конкретно это сервер – то ли Apache, то ли NodeJS, то ли вовсе нечто самодельное. Главное, чтобы программа открыла на прослушивание тот или иной порт и была способна что-то делать в ответ.

При настройках по умолчанию сделать это, конечно, не удастся. Как минимум, потому, что сетевой интерфейс Virtual Box функционирует в режиме NAT.

Мы хотим направлять вебзапрос из хостовой ОС (например, при помощи браузера) программе, которая запущена в гостевой ОС (функционирующей в виртуальной машине).

Виртуальная машина с сетевым интерфейсом в режиме NAT подключается к сети, также как реальный компьютер подключается к Internet через маршрутизатор. "Маршрутизатором" в данном случае выступает сетевой модуль VirtualBox, который обрабатывает сетевой трафик виртуальной машины. Недостаток режима NAT, как и в случае локальной сети за маршрутизатором, в том что:

виртуальная машина недоступна для внешней сети (internet); невозможно обрабатывать сетевые запросы, пока не будет настроен проброс портов (см. ниже).

Режим NAT характерен, в частности, тем, что защищает операционную систему от несанкционированного доступа извне. Т.е. при этом невозможно сделать к ней запрос, как к вебсерверу. Однако, если САМА операционная система сделала запрос, то тогда (и только тогда) политика NAT позволяет ей получить ответ. Т.е. в рамках политики NAT операционная система извне может получать только ответы на свои запросы.

Однако, иногда этот аспект мешает работе, и это как раз наш случай: ведь мы хотим направлять запросы в ОС, функционирующей в виртуальной машине, работающую под политикой NAT. Далее рассмотрим по шагам, что нужно сделать, чтобы все-таки получить возможность взаимодействия.

1. Запускаем Virtual Box

Окно запуска виртуальной машины Virtual Box

Внимание : гостевую ОС, функционирующую в виртуальной машине, пока НЕ ЗАПУСКАЕМ! Иначе невозможно будет сделать нижеидущие настройки.

2. Далее:

Файл -> Настройки -> Сеть -> Виртуальные сети хоста

Там должна быть, по крайней мере, одна сеть вида VirtualBox Host-Only Ethernet Adapter :

сеть вида VirtualBox Host-Only Ethernet Adapter

3. В хостовой ОС выбираем:

Центр управления сетями -> Сетевые подключения

Центр управления сетями, cетевые подключения

Т.е. в сетевых подключениях также присутствует VirtualBox Host-Only Network . Скорее всего, он будет отключенным. Тогда следует подключить его. Это делается либо путем двойного клика левой кнопкой мыши, либо путем клика правой кнопкой мыши, затем Подключить.

Тем самым, мы подключим виртуальную сеть, как раз и необходимую для взаимодействия хостовой (Windows 7) и гостевой (Linux Ubuntu) операционных систем.

Отметим, что справа там видны еще VMware Network Adapter VMnet1 и VMware Network Adapter VMnet8 . Эти соединения необходимы для сети интернет при работе в другой виртуальной машине - VMware, их мы сегодня касаться не будем, они не нужны для Virtual Box.

4. Нажав на кнопку настроек (для изменения выбранной сети), затем Адаптер, получим:

Настройки, адаптер в сетевых подключениях Windows 7

Видим, что IPv4-адрес назначен как 192.168.56.1 . Запомним его, он нам пригодится, так как потом именно на него будем делать запросы. Но, если есть желание, можно выбрать и какой-то другой адрес (НО: исключительно в рамках маски 255.255.255.0 ).

Перейдя на вкладку DHCP-сервер, убеждаемся, что стоит галочка у «Включить сервер». Если она вдруг отсутствует, ставим ее. DHCP-сервер нужен для автоматического назначения IP-адресов сетевым интерфейсам в виртуальной машине. Если его отключить, скорее всего, придется назначать адреса вручную.

Итак, мы убедились, что IP-адрес задан (или сами задали более подходящий, на наш взгляд, адрес), DHCP-сервер включен. Убедились также, что в сетевых подключениях хостовой ОС имеется соединение VirtualBox Host-Only Network для VirtualBox Host-Only Ethernet Adapter.

5. Далее:

Настроить -> Сеть -> Дополнительно

Видим, что часть настроек невозможна (опции имеют серый цвет):

Окно Virtual Box, демонстрирующее невозможность выполнения части настроек

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

Нажимаем кнопку « Сбросить ». Затем вновь:

Настроить -> Сеть -> Дополнительно

Как видно, теперь появилась возможность настроек:

Окно Virtual Box, демонстрирующее возможность полной настройки (после сброса состояния этой виртуальной машины)

Отметим, что это – несколько другие сетевые настройки Virtual Box, не те, что присутствуют во вкладке Файл -> Настройки -> Сеть -> Виртуальные сети хоста ). Зачем в Virtual Box сделаны РАЗНЫЕ сетевые настройки в РАЗНЫХ вкладках – непонятно…

Сетевой адаптер должен быть включен (должна стоять галочка; если ее почему-то нет - поставьте).

В качестве типа подключения по умолчанию должен быть установлен как раз NAT. Можете кликнуть по выбору типа подключения, там возникнет меню с дополнительными пунктами «Сетевой мост», «Внутренняя сеть», и т.д. В нашем случае они нас не интересуют, нужна именно NAT.

Для того, чтобы трафик из хостовой ОС направлялся в гостевую ОС в условиях NAT, необходимо сделать так называемый проброс портов.

6. Нажимаем кнопку «Проброс портов», затем «Добавить новое правило» (зеленоватая кнопка со знаком +).

Там указываем интересующий нас порт, в данном случае – 3000. Если мы хотим направлять запросы из хостовой системы с порта 3000, тогда как получать их в виртуальной машине в гостевой системе мы планируем на порт, к примеру, 3001, стало быть, указываем это число как для порта хоста, так и для порта гостя:

Окно Virtual Box, демонстрирующее проброс портов в данной виртуальной машине)

Если хотим также, чтобы запросы отправлялись с хоста в виртуальную машину только при обращении по какому-то конкретному IP-адресу, то необходимо его указать в адресе хоста. Точно также, если в виртуальной машине будет несколько IP-интерфейсов и мы хотим направлять запросы только одному из них, следует указать этот адрес в поле «Адрес гостя». Отметим, что можно создать не одно правило, а несколько. Т.е. можно направлять запросы с хоста на разные адреса, по разным портам и, если заданы соответствующие правила, они попадут в виртуальную машину и будут переадресованы соответствующей программе-серверу.

В нашем случае мы не будем утруждаться с IP-адресами, поступим проще: оставим адресные поля пустыми. Это означает, что запросы, направленные с хоста на порт 3000, НЕЗАВИСИМО от IP-адреса, будут попадать в виртуальную машину на порт 3001 по ВСЕМ IP-адресам (если их там будет несколько).

Далее, нажимаем «ОК», затем еще раз «ОК». Может появиться окно, запрашивающее Вашего согласия во внесение изменений в настройки брандмауэра Windows. Это и естественно: ведь мы, строго говоря, ослабляем политику NAT для гостевой ОС (функционирующей в виртуальной машине), разрешая входящие запросы для всех IP-адресов 3001-му порту.

Кстати, номера портов хоста и гостя вполне могут быть и одинаковыми. Дело в том, что это – РАЗНЫЕ порты, используемые в разных операционных системах (хоста и гостя). Поэтому, даже тот факт, что они будут представлены одним и тем же числом, не означает, что они совпадают.

7. Теперь пора запускать операционную систему в виртуальной машине

Что же, запускаем.

8. Проверяем, каков IP-адрес у Ethernet adapter VirtualBox Host-Only Network

Для этого в хостовой ОС (т.е. в Windows 7) запускаем консоль: Пуск -> Выполнить -> cmd

Там пишем: ipconfig . И вот что получаем:

IP-адреса в операционной системе Windows 7 после выполнения проброса портов

Интересно, что в Windows команда формулируется как i p config , тогда как несколько аналогичная команда в Linux звучит как i f config . Любопытно, для чего такая несогласованность? Чтобы пользователи linux тренировали свою память, что ли? Ведь вариант из Windows – более логичен, речь-то идет об ip-адресах…

В месте, касающемся Virtual Box, можно видеть, что IP-адрес – тот же самый, что мы видели в настройках: 192.168.56.1 . Стало быть, все хорошо, на это адрес потом можно будет отправлять запросы (например, из браузера) и они должны попасть в гостевую ОС.

После установки серверного дистрибутива Linux на виртуальную машину VirtualBox вы можете обнаружить, что подключение по SSH не работает. Это связано с тем, что по умолчанию на VirtualBox используется подключение к интернету с помощью NAT.

При таком способе подключения у вас нет возможности подключаться к виртуальной машине из своей реальной операционной системы. В частности, вы не сможете подключиться по SSH.

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

Проброс портов для SSH

Для проброса портов вам нужно знать IP адрес, который присваивается виртуальной машине. Для этого запустите виртуальную машину и выполните на ней команду « ifconfig ». В ответ вы получите информацию о сетевых подключениях, в которой будет указан и IP адрес. В нашем случае был получен IP адрес – « 10.0.2.15 ».

Обратите внимание, если в вашей системе нет команды « ifconfig », то ее нужно будет установить отдельно. В случае Debian и Ubuntu Linux это можно сделать с помощью команды « apt-get install net-tools ».

выполнение команды ifconfig

После того как мы узнали IP адрес виртуальную машину нужно выключить и открыть ее настройки в программе VirtualBox.

переход к настройкам виртуальной машины

В настройках виртуальной машины нужно открыть раздел « Сеть », открыть дополнительные настройки и перейти к пробросу портов.

проброс портов в настройках

После этого откроется окно для проброса портов. Здесь нужно нажать на кнопку « Добавить » и заполнить следующие данные:

  • Имя : SSH.
  • Протокол : TCP.
  • Адрес хоста : оставляем пустым или указываем 127.0.0.1.
  • Порт хоста : любой свободный порт на вашей основной системе, например, 2222.
  • Адрес гостя : IP адрес, который был присвоен вашей виртуальной машине. В нашем случае это 10.0.2.15.
  • Порт гостя : порт SSH на виртуальной машине, по умолчанию – 22.

После проброса порта закрываем все окна с помощью кнопки « ОК ».

проброс портов для ssh

После этого можно подключаться к виртуальной машине по SSH. Для этого можно использовать клиент OpenSSH, который доступен в Windows 10. Поскольку порт « 2222 » на основной системе был проброшен на порт « 22 » на виртуальной машине, то для подключения по SSH нам нужно выполнить следующую команду:

подключение к ssh через openssh

подключение к ssh через putty

Как видно по скриншоту вверху, данный способ отлично работает, и мы успешно подключились по SSH к виртуальной машине VirtualBox.

Подключение через сетевой мост

Также есть альтернативный способ подключения к виртуальной машине по SSH для этого нужно изменить тип подключения с « NAT » на « Сетевой мост ». В этом случае виртуальная машина будет подключена к вашей локальной сети и получит IP адрес от вашего роутера из того же диапазона, что и ваша основная система.

Для этого нужно выключить виртуальную машину и зайти в ее свойства в программе VirtualBox. В настройках нужно зайти в раздел « Сеть » и включить тип подключения « Сетевой мост ».

переключение на сетевой мост

После этого нужно запустить виртуальную машину и выполнить на ней команду « ifconfig » для того, чтобы узнать, какой IP адрес она получила от роутера. В нашем случае был получен IP адрес « 192.168.1.214 ».

выполнение команды ifconfig

После этого к виртуальной машине можно подключаться по SSH. Для этого нужно просто использовать IP адрес, который был ей присвоен роутером. Например, для того чтобы подключиться с помощью клиента OpenSSH нужно выполнить следующую команду:

Где « user » — это имя пользователя, а « 192.168.1.214 » — это ее IP адрес.

подключение к ssh через openssh

Аналогично работает и подключение с помощью PuTTY. Вводим « 192.168.1.214 » и подключаемся по стандартному порту « 22 ».

подключение к ssh через putty

Как и предыдущий способ, вариант с использованием сетевого моста отлично работает, при этом виртуальная машина не теряет доступа к интернету.

Чтобы запустить сеанс удаленного рабочего стола, на портале Azure нажмите кнопку Подключиться на рабочем столе Windows. Сначала подключитесь к виртуальной машине, а затем войдите в систему.

Чтобы подключиться к виртуальной машине Windows с компьютера Mac, необходимо установить клиент RDP для Mac, например Удаленный рабочий стол (Майкрософт).

Подключитесь к виртуальной машине

Перейдите на портал Azure, чтобы подключиться к виртуальной машине. Найдите и щелкните Виртуальные машины.

Затем выберите виртуальную машину из списка.

В начале страницы виртуальной машины выберите Подключить.

Откройте скачанный RDP-файл и при появлении запроса щелкните Подключиться. Появится предупреждение о том, что издатель файла .rdp неизвестен. Это ожидаемое поведение. Чтобы продолжить, в окне Remote Desktop Connection (Подключение к удаленному рабочему столу) выберите Подключиться.

В окне Безопасность Windows выберите Варианты выбора и нажмите Использовать другую учетную запись. На виртуальной машине введите учетные данные учетной записи и нажмите кнопку ОК.

Локальная учетная запись: как правило, это имя пользователя и пароль, указанные при создании виртуальной машины. В данном случае домен представляет собой имя виртуальной машины и вводится в формате имя_виртуальной_машины\имя_пользователя.

Присоединенная к домену виртуальная машина: если виртуальная машина принадлежит к домену, введите имя пользователя в формате домен\имя_пользователя. Учетная запись также должна входить в группу "Администраторы" или ей должны быть назначены права удаленного доступа к виртуальной машине.

Контроллер домена: если виртуальная машина является контроллером домена, введите имя пользователя и пароль для учетной записи администратора домена для этого домена.

Щелкните Да для проверки удостоверения виртуальной машины и завершения входа в систему.

Если кнопка Подключиться на портале неактивна и вы не используете канал Express Route или VPN-подключение типа "сеть — сеть" для обмена данными с Azure, вам сначала нужно будет создать общедоступный IP-адрес и назначить его виртуальной машине. Только после этого вы сможете использовать протокол RDP. Дополнительные сведения см. в статье Типы IP-адресов и методы распределения в Azure.

Подключение к виртуальной машине с помощью PowerShell

Если вы используете PowerShell и у вас установлен модуль Azure PowerShell, вы также можете установить подключение с помощью командлета Get-AzRemoteDesktopFile , как показано ниже.

Этот пример немедленно устанавливает RDP-подключение с отображением аналогичных инструкций, как показано выше.

Если вы часто запускаете и останавливаете виртуальные машины VirtualBox, то у вас может возникнуть желание как-то автоматизировать или упростить этот процесс. Это можно сделать с помощью консольной программы « vboxmanage », которая находится в папке « C:\Program Files\Oracle\VirtualBox ».

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

Просмотр списка виртуальных машин в командной строке

Просмотр списка виртуальных машин в командной строке

Чтобы перечислить только запущенные виртуальные машины, используйте команду « vboxmanage list runningvms »

Запуск виртуальной машины через командную строку

Чтобы запустить виртуальную машину VirtualBox через командную строку, используйте команду « vboxmanage startvm <name or UUID> ». Где, name – это название ВМ, а UUID – это уникальный идентификатор, который указывается в фигурных скобках. UUID можно узнать с помощью команды « vboxmanage list vms », которая рассматривалась выше.

Например, для запуска виртуальной машины можно использовать команду с указанием имени :

Или команду с указанием UUID :

Запуск виртуальной машины через командную строку

Запуск виртуальной машины без интерфейса

Для запуска виртуальной машины VirtualBox без интерфейса к данной команде нужно добавить параметр --type , который управляет запуском. Так использование --type headless запустит виртуальную машину без графического интерфейса (в фоновом режиме).

Например, для запуска машины « Ubuntu » без интерфейса нужно выполнить:

Запуск виртуальной машины без интерфейса

Для взаимодействия с такой машиной нужно будет использовать SSH. Более подробно об этом можно почитать в нашей статье о подключении к виртуальной машине VirtualBox через SSH.

Остановка запущенной виртуальной машины

Для того чтобы остановить виртуальную машину VirtualBox через командную строку можно использовать команду « vboxmanage controlvm <name or UUID> poweroff ».

Например, для того чтобы выключить виртуальную машину « Ubuntu » нужно выполнить следующую команду:

Остановка запущенной виртуальной машины

Как и в случае запуска, можно указать название ВМ или ее UUID .

Другие команды для управления виртуальной машиной

Список всех доступных команд можно получить в официальной документации VirtualBox. Здесь же мы рассмотрим несколько примеров, которые могут быть вам полезны.

Читайте также: