вівторок, 4 грудня 2007 р.

VirtualBox + сеть (через NAT) + apache httpd


Стоит простая задача - потратив минимум усилий, получить к виртуальной тачке доступ через сеть. В данном случае рассматривается доступ к apache, который крутится на виртуальной машине.

Рецепт претендует на минимализм, т.е. более-менее сложные вещи (создание туннеля, например).
Этот материал родился он после прочтения на мой взгляд, довольно бедной практикой оригинальной документации. Особенно после того, что многое пришлось просто додумывать.



Перед тем как кидать в меня какашками, прошу прочитать Предупреждения для обнадёжившихся.


Скажу вам, что настройка сети в VirtualBox довольно не "unix-like", в отличии от того-же qemu, но в конфигурации "по умолчанию" более безопасна, чем qemu с точки зрения сетевой безопасности (особенно - когда в qemu винда ставится, голая, дырявая, без антивируса, вобщем - "кушать подано, червячки!" 8-) ).

Похоже, что для описаного мной метода доступа не нужно собирать ядро с поддержкой карточки от AMD. Это хорошо :)



Вот примерное описание того, как я пробросил порт к http серверу apache, который работал на гостевой машине

Запустите VirtualBox, выбрав Вашу виртуальную машину, зайдите в окно "Свойства", далее -выберите в разделе конфигурации сети пункт "присоединён к NAT". Затем не забудьте сохранить эти настройки.



Выполните в консоли следующие команды:


user@host $ VBoxManage setextradata "gentoo_generator" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol" TCP

user@host $ VBoxManage setextradata "gentoo_generator" \
quot;VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/GuestPort" 80

user@host $ VBoxManage setextradata "gentoo_generator" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort" 6969



Где:

gentoo_generator

это название моей виртуальной машины.

VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol

строка с фигнёй всякой, в которой для нас важа только та часть, в которой написано "guesthttp", её Вы можете заменить чем-угодно, на свой вкус (в пределах разумного). Хотя - лучше использовать осмысленные вразумительные названия. Т.е - для ftp - guestftp, ssh - guestssh, и т.д.




На что система должна ответить в таком духе:




gor@grog ~ $ VBoxManage setextradata "gentoo_generator" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol" TCP


VirtualBox Command Line Management Interface Version 1.5.2_OSE
(C) 2005-2007 innotek GmbH
All rights reserved.


gor@grog ~ $ VBoxManage setextradata "gentoo_generator" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/GuestPort" 80


VirtualBox Command Line Management Interface Version 1.5.2_OSE
(C) 2005-2007 innotek GmbH
All rights reserved.


gor@grog ~ $ VBoxManage setextradata "gentoo_generator" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort" 6969


VirtualBox Command Line Management Interface Version 1.5.2_OSE
(C) 2005-2007 innotek GmbH
All rights reserved.


Т.е. - безполезный пиар-флуд и больше ничего интересного. Главное в этом логе - это отсутствие ошибок.

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

Далее просто запускаете Ваш любимый браузер, в котором указываете URL, ведущий к апачу на нашем виртуальном компе, в данном случае - http://localhost:6969




gor@grog ~ $ lynx localhost:6969


или


gor@grog ~ $ firefox http://localhost:6969


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

Как у нас говорят: Гуртом і батька легше бити.





Предупреждения для обнадёжившихся:


  • Этот метод не даст доступа к вашей машине ни с какого другого компьютера, кроме Вашего.

  • Доступ к проброшенному порту имеет только тот пользователь, который загрузил виртуальную машину и выполнил вышеуказанные команды (к этому заключению дойдено методом Научного Тыка).




9 коментарів:

bak1an сказав...

"Этот метод не даст доступа к вашей машине ни с какого другого компьютера, кроме Вашего."

И смысол этой штуки в чом тогда? просто ради прикола?

Ostrich's Poison сказав...

2bak1an

И смысол этой штуки в чом тогда? просто ради прикола?

У меня например, была задача собрать генту на виртуальной машине, потом перенести всё, что собралось на реальную.
Именно этим методом я пользовался, чтобы вытянуть тарбол с корневой фс из гостевой системы.

Ostrich's Poison сказав...

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

Виктор Скляр сказав...

а что нужно сделать чтобы в винде сделать такую штуку? т.е. ситуация такая есть XP, в ней крутится W2K3 на которой запущен скажем тот же IIS Web Server (предположим что использовать XP-шный по каким-то причинам не получается)

можно ли сделать так чтобы при обращении к моему адресу по определённым портам - запросы перенаправлялись этой виртуальной машине?

кроче вроде всё понятно спросил...

Ostrich's Poison сказав...

2vinnitu


можно ли сделать так чтобы при обращении к моему адресу по определённым портам - запросы перенаправлялись этой виртуальной машине?


Думаю, что запросто. Но для этого больше подойдёт Vmvare, с которым я особо не заморачивался в силу проприетарности оного.

PS: вообще-то это блог про Linux, поэтому я не буду разливаться "мыслию по древу" по теме запуска одного зла под другим.

Виктор Скляр сказав...

спасибо, уже разобрался, всё работает

Unknown сказав...
Автор видалив цей коментар.
Alexandr сказав...

Супер!!! Статья помогла очень сильно! Причем такой способ работает и через инет!!! Так что можно смело выдвигать статью в номинанты на премию!!!

Ostrich's Poison сказав...

2Alexandr
Супер!!! Статья помогла очень сильно! Причем такой способ работает и через инет!!! Так что можно смело выдвигать статью в номинанты на премию!!!

Ну, для премии маловато написано :)
А вот то, что ещё одна живая душа заценила этот рецепт, это хорошо