Vom Host aus kann nicht auf den Rails-Server auf der VM zugegriffen werden

12

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

In beiden Fällen konnte ich auf Port 80 zugreifen, aber ich habe nicht versucht, eine Verbindung zu localhost auf Port 3000 herzustellen (daher gab es kein Problem beim Zugriff auf den xampp-Server).

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

Ich habe Linux (Debian) auf Gast und Windows 7 auf Hostseite - ich benutze VirtualBox.

Hubert Siwkin
quelle

Antworten:

10

Hier spielen mindestens drei separate Komponenten eine Rolle, von denen jede korrekt konfiguriert werden muss.

Schienenbindungsadresse

Wenn Rails (oder eine andere Serveranwendung) geöffnet wird, um Netzwerkverbindungen zu empfangen, wird es sowohl an eine IP als auch an einen Port gebunden. Wenn eine eingehende Anforderung 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
...

Daher akzeptiert Rails standardmäßig nur Anforderungen, die an den localhost(angerufenen lo) (Loopback-) Netzwerkadapter gesendet werden . Da auf diesen Adapter nur von demselben Computer aus zugegriffen werden kann, werden nur Anfragen von der Debian-VM selbst akzeptiert: gut und sicher zum Testen, aber nicht nützlich für die Produktion oder sogar zum Testen von einem anderen Computer.

Wenn Sie möchten, dass auf Ihre Rails von einem anderen Computer (einschließlich Ihres Windows 7-Hosts) aus zugegriffen werden kann, müssen Sie Rails anweisen, sich an die IP-Adresse zu binden, auf die Debian von außen zugreifen kann (siehe unten).

Eine einfachere Möglichkeit besteht jedoch darin, Rails anzuweisen, sich an die spezielle IP-Adresse zu binden, dh an 0.0.0.0einen beliebigen 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 das, was Sie immer noch durcheinander gebracht hat, selbst wenn die beiden anderen Komponenten funktionierten.

VM-IP-Adresse

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

Als Faustregel localhostgilt, dass es sich immer auf denselben Computer bezieht. Für Netzwerkzwecke ist Ihre Debian-VM jedoch ein eigener separater Computer. Wenn Sie einen Webbrowser in Ihrem Windows 7-Host verwenden, localhostwird immer auf Ihr Windows 7 und nichts anderes verwiesen.

Sie haben hier zwei Möglichkeiten:

  • Stellen Sie den VirtualBox VM-Adapter auf den Bridge-Modus (wie in Ihrer Frage erwähnt). Dadurch befindet sich Ihr Debian direkt im selben externen / privaten / beruflichen Netzwerk wie Ihr Windows 7-Host. Sie können dann die IP Ihrer Debian-VM durch Ausführen ermitteln ifconfig. Suchen Sie nach der IP Ihres eth0oder Ihres eth<something>Adapters. Stecken Sie dies in die Adressleiste Ihres Browsers.

  • Verwenden Sie einen NAT-Adapter und eine VirtualBox-Portweiterleitung . IMO ist das komplizierter.

Debian-Firewall

Es ist schon eine Weile her, dass ich an Debian gearbeitet habe, daher weiß ich nicht, wie die aktuellen Standardeinstellungen lauten, aber wenn die beiden oben genannten Dinge nicht funktionieren, ist dies möglicherweise einen Blick wert. Wenn Debian eine Firewall ausführt, müssen Sie alle Ports öffnen, auf die Sie von einem anderen Computer aus zugreifen möchten.

Hoffe das hilft :)

Samuel Jaeschke
quelle