Не вдається отримати доступ до рельсового сервера на VM від хоста


12

У мене на віртуальній машині є сервер рельсів, і мені потрібно отримати доступ до localhost від хоста. Я спробував як NAT (шляхом переадресації портів - порт 80 і 3000 на гостьовій стороні), так і мостовий адаптер, але, здається, нічого не працює.

В обох випадках мені вдалося отримати доступ до порту 80, але мені не вдалося спробувати підключитися до localhost на порту 3000 (тому не було проблем із доступом до сервера xampp).

Будь ласка, дайте мені знати, чи маєте ви уявлення про те, як можна отримати доступ до localhost від хоста, поки сервер знаходиться на гостьовій стороні.

У мене є Linux (debian) у гостях та Windows 7 на стороні хоста - я використовую VirtualBox.

Відповіді:


10

Тут зіграно щонайменше три окремих компоненти, кожен з яких потрібно правильно налаштувати.

Адреса прив'язки рейки

Коли Rails (або інша серверна програма) відкриється для отримання мережевих з'єднань, він буде прив'язуватися як до IP, так і до порту. Якщо вхідний запит не відповідає обом, він не приймає з'єднання. Від rails server --help:

Usage: rails server [mongrel, thin etc] [options]
-p, --port=port                  Runs Rails on the specified port.
                                 Default: 3000
-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost
...

Тож за замовчуванням Rails буде приймати лише запити, надіслані до його localhostмережевого адаптера (дзвінка lo). Оскільки цей адаптер доступний лише з одного комп’ютера, єдині запити, які він прийме, будуть зсередини самого Debian VM: хорошого та безпечного для тестування, але не корисного для виробництва або навіть тестування з іншого комп’ютера.

Якщо ви хочете, щоб ваш Rails був доступний на будь-якому іншому комп’ютері (включаючи хост Windows 7), вам потрібно буде сказати Rails прив’язатись до тієї IP-адреси, яку має Debian, що доступна зовні (див. Нижче).

Однак більш простий спосіб - сказати Rails прив’язатись до спеціальної IP-адреси 0.0.0.0, що означає будь-який мережевий адаптер . Отже, запустивши сервер Rails так:

rails server -p 80 -b 0.0.0.0

зробить ваш веб-сайт доступним для всіх, хто може бачити ваш VM в мережі.

Це, ймовірно, те, що все-таки зіпсувало вас, навіть якщо у вас працювали інші два компоненти.

IP-адреса VM

Потрібно вказати свій браузер на віртуальну машину Debian, яка є власним дискретним комп'ютером.

Основне правило - localhostце те, що воно завжди посилається на один і той же комп'ютер. Однак для цілей мереж ваш Debian VM - це власний окремий комп'ютер. Якщо ви використовуєте веб-браузер у своєму хості Windows 7, localhostзавжди буде посилатися на вашу Windows 7 та більше нічого.

Тут у вас є два варіанти:

  • Встановіть адаптер VirtualBox VM в режим Bridge (як ви згадували у своєму запитанні). Це дозволить розмістити ваш Debian безпосередньо в тій же зовнішній / домашній / робочій мережі, що і ваш хост Windows 7. Потім можна визначити IP вашого Debian VM, запустивши ifconfig. Знайдіть IP свого eth0або eth<something>адаптера. Підключіть це до адресного рядка веб-переглядача.

  • Використовуйте NAT-адаптер та переадресацію портів VirtualBox . ІМО це складніше.

Брандмауер Debian

Минув деякий час, коли я працював над Debian, тому я не знаю, що є поточними типовими налаштуваннями, але якщо вищевказані дві речі не працюють, то це, можливо, варто вивчити. Якщо Debian працює з брандмауером, вам потрібно буде відкрити будь-які порти, до яких ви хочете отримати доступ з іншої машини.

Сподіваюся, це допомагає :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.