У меня есть сервер rails на виртуальной машине, и мне нужно получить доступ к localhost с хоста. Я пробовал и NAT (переадресация портов - порты 80 и 3000 на гостевой стороне), и мостовой адаптер, но ничего не работает.
В обоих случаях мне удалось получить доступ к порту 80, но попытка подключиться к localhost через порт 3000 не увенчалась успехом (так что проблем с доступом к серверу XAMPP не возникло).
Пожалуйста, дайте мне знать, если у вас есть идеи, как можно получить доступ к localhost с хоста, когда сервер находится на гостевой стороне.
У меня Linux (Debian) в качестве гостя и Windows 7 в качестве хоста — я использую VirtualBox.
решение1
Здесь задействованы как минимум три отдельных компонента, каждый из которых необходимо правильно настроить.
Адрес привязки 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 в режим моста (как вы упомянули в своем вопросе). Это поместит ваш Debian непосредственно в ту же внешнюю/домашнюю/рабочую сеть, что и ваш хост Windows 7. Затем вы можете определить IP-адрес вашей виртуальной машины Debian, запустив
ifconfig
. Найдите IP-адрес вашегоeth0
илиeth<something>
адаптера. Введите его в адресную строку браузера.Используйте адаптер NAT иПереадресация портов VirtualBox. По моему мнению, это сложнее.
Брандмауэр Debian
Прошло некоторое время с тех пор, как я работал с Debian, поэтому я не знаю, какие сейчас настройки по умолчанию, но если две вышеперечисленные вещи не работают, то, возможно, стоит рассмотреть это. Если Debian использует брандмауэр, вам нужно будет открыть все порты, к которым вы хотите получить доступ с другой машины.
Надеюсь это поможет :)