Kann vom Host aus nicht auf den Rails-Server auf der VM zugreifen

Kann vom Host aus nicht auf den Rails-Server auf der VM zugreifen

Ich habe einen Rails-Server auf einer virtuellen Maschine und muss vom Host aus auf den lokalen Host zugreifen. Ich habe sowohl NAT (durch Portweiterleitung – Port 80 und 3000 auf der Gastseite) als auch einen Bridge-Adapter ausprobiert, aber nichts scheint zu funktionieren.

In beiden Fällen konnte ich auf Port 80 zugreifen, aber der Verbindungsversuch mit dem lokalen Host über Port 3000 schlug fehl (beim Zugriff auf den XAMPP-Server gab es also kein Problem).

Bitte lassen Sie es mich wissen, wenn Sie eine Idee haben, wie man vom Host aus auf den lokalen Host zugreifen kann, während sich der Server auf der Gastseite befindet.

Ich habe Linux (Debian) auf der Gastseite und Windows 7 auf der Hostseite – ich verwende VirtualBox.

Antwort1

Hier sind mindestens drei separate Komponenten im Spiel, von denen jede richtig konfiguriert werden muss.

Rails-Bindungsadresse

Wenn Rails (oder eine andere Serveranwendung) Netzwerkverbindungen empfängt, wird es sowohl an eine IP-Adresse als auch an einen Port gebunden. Wenn eine eingehende Anfrage nicht mit beiden übereinstimmt, wird die Verbindung nicht akzeptiert. Von 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 akzeptiert standardmäßig nur Anfragen, die an seinen localhost(Loopback-)Netzwerkadapter (genannt lo) gesendet werden. Da dieser Adapter nur vom selben Computer aus zugänglich ist, akzeptiert er nur Anfragen aus der Debian-VM selbst: gut und sicher zum Testen, aber nicht nützlich für die Produktion oder sogar zum Testen von einem anderen Computer aus.

Wenn Sie von jedem anderen Computer (einschließlich Ihres Windows 7-Hosts) auf Rails zugreifen möchten, müssen Sie Rails anweisen, sich an die von außen zugängliche IP-Adresse von Debian zu binden (siehe unten).

Einfacher ist es jedoch, Rails anzuweisen, sich an die spezielle IP-Adresse zu binden 0.0.0.0. Das bedeutetbeliebiger Netzwerkadapter. Starten Sie Ihren Rails-Server also wie folgt:

rails server -p 80 -b 0.0.0.0

macht Ihre Website für jeden zugänglich, der Ihre VM im Netzwerk sehen kann.

Dies ist wahrscheinlich der Grund, warum Sie immer noch Probleme haben, auch wenn die anderen beiden Komponenten funktionierten.

VM-IP-Adresse

Sie müssen Ihren Browser auf die virtuelle Debian-Maschine richten, bei der es sich um einen eigenen, eigenständigen Computer handelt.

Die Faustregel lautet, localhostdass es sich immer auf denselben Computer bezieht. Aus Netzwerkgründen ist Ihre Debian-VM jedoch ein eigener, separater Computer. Wenn Sie einen Webbrowser auf Ihrem Windows 7-Host verwenden, localhostbezieht sich immer auf Ihr Windows 7 und auf nichts anderes.

Sie haben hier zwei Möglichkeiten:

  • Stellen Sie den VirtualBox VM-Adapter auf Bridge-Modus (wie Sie in Ihrer Frage erwähnt haben). Dadurch wird Ihr Debian direkt in dasselbe externe/Heim-/Arbeitsnetzwerk wie Ihr Windows 7-Host gestellt. Sie können dann die IP Ihrer Debian-VM ermitteln, indem Sie ausführen ifconfig. Suchen Sie nach der IP Ihres eth0oder eth<something>Adapters. Geben Sie diese in die Adressleiste Ihres Browsers ein.

  • Verwenden Sie einen NAT-Adapter undVirtualBox-Portweiterleitung. Meiner Meinung nach ist das komplizierter.

Debian-Firewall

Es ist schon eine Weile her, seit ich an Debian gearbeitet habe, daher kenne ich die aktuellen Standardeinstellungen nicht, aber wenn die beiden oben genannten Dinge nicht funktionieren, könnte es sich lohnen, dies zu prüfen. Wenn Debian eine Firewall betreibt, müssen Sie alle Ports öffnen, auf die Sie von einem anderen Computer aus zugreifen möchten.

Hoffe das hilft :)

verwandte Informationen