четверг, 10 сентября 2009 г.

Проброс портов (Port Forwarding) в Virtualbox с помощью VboxManage

Введение

Virtualbox - это бесплатная, мощная и гибкая программа виртуализации, которая доступна для операционных систем Linux, Mac OS X, Windows, она может создавать виртуальные машины для множества различных операционных систем. VirtualBox был изначально разработан Innotek, но затем был куплен Sun и переименован в Sun xVM VirtualBox. Есть несколько версий программы: свободная и бесплатная с закрытым исходным кодом, я использую бесплатную несвободную версию, потому что она предоставляет больше функций, чем VirtualBox OSE.

Для гостевых ОС VirtualBox доступно несколько сетевых механизмов, чтобы подключится к сети Интернет, но я буду ссылаться здесь только на NAT (Network Address Translation).

В руководстве VirtualBox есть описание преимуществ и недостатков механизма NAT:

"Network Address Translation (NAT) - это самый простой путь дать доступ в интернет виртуальной машине, он не требует каких-либо конфигураций сети хоста и гостевой системы. По этой причине NAT в VitualBox является сетеовй моделью по умолчанию.

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


Таким образом вы очень просто можете дать доступ к сети вашей виртуальной машине, но она будет невидима для других устройств в вашей сети. Это небольшая проблема, но до тех пор, пока вы не захотите запустить ssh сервер на виртуальной машин или организовать доступ к другим сервисам машины (таким как вебсервер) без конфигурации проброса портов.

Проброс портов в VirtualBox

Проброс портов может быть осуществлен с помощью мощной и гибкой утилиты командной строки VBoxManage. У VBoxManage есть множество опций, но мы для настройки будем использовать только setextradata.

Команды, которые будут описаны далее, позволят вам осуществить доступ к виртуальной машине через ssh. Прежде чем вы возьмемся за дело, я представлю несколько утверждений о гостевой системе:
  • Ваша виртуальная машина не запущена, но уже была создана и сохранена
  • На ваша гостевой операционной системе установлен и корректно сконфигурирован ssh сервер
  • Ваша гостевая система была настроена со стандартным виртуальным сетевым оборудованием (PCNET III)
  • Sshd принимает входящие подключения на стандартном порту (порт 22)
  • Ваша гостевая ОС названа "VM Name Here", хотя могу поспорить, что у вас она называется по-другому.

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

Следующие команды позволят перенаправить трафик, который идет с порта 2222 вашей основной системы на порт 22 гостевой ОС:

$ VBoxManage setextradata "VM Name Here" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP

$ VBoxManage setextradata "VM Name Here" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22

$ VBoxManage setextradata "VM Name Here" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222


Обратите внимание на двойные кавычки в имени виртуальной машины. Если вы назвали виртуальную машину одним словом, например, "VMNameHere", то вы можете двойные кавычки опустить:

$ VBoxManage setextradata VMNameHere \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP

$ VBoxManage setextradata VMNameHere \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22

$ VBoxManage setextradata VMNameHere \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222


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

Есть также некоторые ограничения проброса портов через NAT, я перечислю их здесь, эту информацию также можно найти в руководстве по VirtualBox:
"Есть четыре ограничения использования NAT, с которыми пользователь должен быть знаком:
  1. Ограничения протокола ICMP.
  2. Получение широковещательных пакетов UDP не надежно
  3. Такие протколы как GRE не поддерживаются
  4. Проброс для портов, номер которых ниже 1024 невозможен"
Эти ограничения обычно не сказываются на стандартном использовании сети. Но существуют нюансы использования NAT с протоколами, которые VirtualBox хорошо поддерживает. К примеру, часто сервер может быть сконфигурирован так, что он не позволяет принимать запросы с непривилегированных портов (с номерами, которые ниже 1024).

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

Росс Ларсон

оригинал статьи (англ.)
Читать дальше...

Комментариев нет:

Отправить комментарий