Nie ma dostępu do serwera szyn na maszynie wirtualnej z hosta

12

Mam serwer szynowy na maszynie wirtualnej i muszę uzyskać dostęp do hosta lokalnego z hosta. Próbowałem zarówno NAT (przez przekierowanie portów - port 80 i 3000 po stronie gościa), jak i mostkowany adapter, ale nic nie działa.

W obu przypadkach mogłem uzyskać dostęp do portu 80, ale nie udało mi się połączyć z hostem lokalnym na porcie 3000 (więc nie było problemu z dostępem do serwera xampp).

Daj mi znać, jeśli masz jakiś pomysł, w jaki sposób można uzyskać dostęp do hosta lokalnego z hosta, gdy serwer jest po stronie gościa.

Mam Linuksa (debian) po stronie gościa i Windows 7 po stronie hosta - używam VirtualBox.

Hubert Siwkin
źródło

Odpowiedzi:

10

W grze występują co najmniej trzy oddzielne komponenty, z których każdy musi być poprawnie skonfigurowany.

Adres wiążący szyny

Gdy Railsy (lub inna aplikacja serwerowa) otworzą się w celu odebrania połączeń sieciowych, zostaną powiązane zarówno z adresem IP, jak i portem. Jeśli przychodzące żądanie nie pasuje do obu, połączenie nie zostanie zaakceptowane. Od 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
...

Tak więc domyślnie Railsy akceptują tylko żądania wysyłane do localhost(zwanej lo) karty sieciowej (pętli zwrotnej ). Ponieważ ten adapter jest dostępny tylko z tego samego komputera, jedyne akceptowane przez niego żądania będą z poziomu samej maszyny Wirtualnej Debiana: dobre i bezpieczne do testowania, ale nieprzydatne do produkcji, a nawet testowania z innego komputera.

Jeśli chcesz, aby Twoje Railsy były dostępne z dowolnego innego komputera (w tym Twojego hosta Windows 7), musisz powiedzieć Railsom, aby powiązał się z dowolnym adresem IP Debiana, który jest dostępny z zewnątrz (patrz poniżej).

Jednak łatwiejszym sposobem jest nakazanie Railsom powiązania ze specjalnym adresem IP 0.0.0.0, co oznacza dowolną kartę sieciową . Tak więc, uruchamiając serwer Railsowy:

rails server -p 80 -b 0.0.0.0

sprawi, że Twoja strona będzie dostępna dla każdego, kto może zobaczyć twoją maszynę wirtualną w sieci.

Jest to prawdopodobnie to, co Cię jeszcze zawiodło, nawet jeśli pozostałe dwa komponenty działały.

Adres IP maszyny wirtualnej

Musisz skierować przeglądarkę na maszynę wirtualną Debiana, która jest własnym dyskretnym komputerem.

Ogólna zasada localhostjest taka, że ​​zawsze odnosi się do tego samego komputera. Jednak do celów sieciowych, twoja Debian VM jest oddzielnym komputerem. Jeśli korzystasz z przeglądarki internetowej na hoście systemu Windows 7, localhostzawsze będzie odnosić się do systemu Windows 7 i nic więcej.

Masz tutaj dwie opcje:

  • Ustaw adapter VirtualBox VM w tryb mostka (jak wspomniano w pytaniu). Spowoduje to umieszczenie Debiana bezpośrednio w tej samej sieci zewnętrznej / domowej / roboczej, co host Windows 7. Następnie możesz określić adres IP maszyny Wirtualnej Debiana, uruchamiając ifconfig. Spójrz na IP eth0lub eth<something>adaptera. Podłącz to do paska adresu przeglądarki.

  • Użyj adaptera NAT i przekierowania portów VirtualBox . IMO jest to bardziej skomplikowane.

Zapora ogniowa Debiana

Minęło trochę czasu, odkąd pracowałem nad Debianem, więc nie wiem, jakie są bieżące wartości domyślne, ale jeśli powyższe dwie rzeczy nie działają, warto to sprawdzić. Jeśli Debian używa zapory ogniowej, musisz otworzyć wszystkie porty, do których chcesz uzyskać dostęp z innej maszyny.

Mam nadzieję że to pomoże :)

Samuel Jaeschke
źródło