Не удается получить доступ к серверу rails на виртуальной машине с хоста

12

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

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

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

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

Юбер Сивкин
источник

Ответы:

10

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

Адрес привязки 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(петлевой) сетевой адаптер (вызываемый 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 запущен брандмауэр, вам нужно открыть все порты, к которым вы хотите получить доступ с другого компьютера.

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

Самуэль Яешке
источник