Назад | Перейти на главную страницу

Python простой http-сервер и виртуальные машины - не могут подключиться. IP поменяли?

Я иногда использую python -m SimpleHTTPServer один лайнер для обслуживания файлов с моей виртуальной машины для загрузки на мой хост. Сегодня я попытался использовать его внутри виртуального бокса vm, который находится в настройках сети NAT - я набрал этот python one liner в консоли, затем я проверил, какой ip мой vm имеет в knetworkmanager (я использую debian с kde на моем гостевом компьютере), затем на хосте i пытался подключиться к этому ip через порт 8000, но не могу подключиться ...

Мои гости часто приостанавливаются, сохраняются и т. Д. Может быть, IP должен измениться, но что-то пошло не так, потому что гость был сохранен, а затем восстановлен? Есть идеи, что с этим делать?

Я использую гостевой debian linux и хост debian linux.

Чтобы получить перенаправление порта, попробуйте следующее

VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/HostPort" 8080
VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/GuestPort" 8000
VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/Protocol" TCP

Эта конфигурация работает для виртуальных сетевых карт Intel. Для PCnet попробуйте pcnet вместо того e1000. И я предполагаю, что порт на виртуальной машине - 8000. Не забудьте изменить NAME_OF_VM на имя вашей виртуальной машины!

После этого вы можете получить доступ к веб-серверу в хост-системе через http://localhost:8080/ который будет перенаправлен на виртуальную машину с портом 8000.

Вы можете проверить конфигурацию с помощью VBoxManage getextradata "NAME_OF_VM" enumerate. Чтобы удалить конфигурацию, введите команду без значений.

VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/HostPort"
VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/GuestPort"
VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/Protocol"

Если ваши виртуальные машины подключены к NAT, у них есть виртуальный IP-адрес в частной сети (диапазон IP-адресов RFC1918), поэтому они не маршрутизируемы и недоступны извне.

Чтобы сделать машину с NAT доступной извне, вы должны реализовать ПЕРЕНАПРАВЛЕНИЕ ПОРТА на виртуальном шлюзе, сопоставив запрос на данном порте, который будет перенаправлен на виртуальный IP-адрес на данном или другом порту.

Это не проблема, связанная с виртуализацией, так работает NAT. Таким образом, применимо любое руководство по теме, которое вы найдете в Интернете.