11

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

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

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

У меня Linux (Debian) на гостевой и Windows 7 на стороне хоста - я использую VirtualBox.

1 ответ1

9

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

Адрес привязки Rails

Когда 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 (loopback) сетевой адаптер (называемый lo). Поскольку этот адаптер доступен только с одного и того же компьютера, единственные запросы, которые он будет принимать, будут поступать из самой виртуальной машины Debian: хорошие и безопасные для тестирования, но не полезные для работы или даже тестирования с другого компьютера.

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

Однако более простой способ - указать Rails привязаться к специальному IP-адресу 0.0.0.0 , что означает любой сетевой адаптер. Итак, запуск вашего сервера Rails выглядит так:

rails server -p 80 -b 0.0.0.0

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

Это, вероятно, то, что все еще портит вас, даже если у вас работают два других компонента.

Виртуальный IP-адрес

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

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

У вас есть два варианта здесь:

  • Установите виртуальный адаптер VirtualBox в режим Bridge (как вы упомянули в своем вопросе). Это поместит ваш Debian непосредственно в ту же внешнюю / домашнюю / рабочую сеть, что и ваш хост Windows 7. Затем вы можете определить IP-адрес вашей виртуальной машины Debian, запустив ifconfig . Найдите IP вашего адаптера eth0 или eth<something> . Вставьте это в адресную строку вашего браузера.

  • Используйте адаптер NAT и переадресацию портов VirtualBox . ИМО это сложнее.

Брандмауэр Debian

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

Надеюсь это поможет :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .