Kein Zugriff auf den Rail-Server auf der VM vom Host aus

3291
Hubert Siwkin

Ich habe einen Schienen-Server auf einer 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 überbrückten Adapter ausprobiert, aber nichts scheint zu funktionieren.

In beiden Fällen konnte ich auf Port 80 zugreifen, aber ich konnte nicht versuchen, mich mit localhost auf Port 3000 zu verbinden (so dass beim Zugriff auf den xampp-Server kein Problem aufgetreten ist).

Bitte lassen Sie mich wissen, ob Sie wissen, wie Sie vom Host aus auf localhost zugreifen können, während sich der Server auf der Gastseite befindet.

Ich habe Linux (Debian) auf dem Gast und Windows 7 auf der Host-Seite - ich verwende VirtualBox.

11

1 Antwort auf die Frage

9
Samuel Jaeschke

Es gibt mindestens drei separate Komponenten, die jeweils korrekt konfiguriert werden müssen.

Rails bindende Adresse

Wenn Rails (oder eine andere Serveranwendung) geöffnet wird, um Netzwerkverbindungen zu empfangen, wird eine Verbindung mit einer IP-Adresse und einem Port hergestellt. Wenn eine eingehende Anfrage nicht mit beiden übereinstimmt, akzeptiert sie die Verbindung nicht. 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 seinen localhost(Loopback-) Netzwerkadapter (genannt lo) gesendet werden . Da auf diesen Adapter nur von demselben Computer aus zugegriffen werden kann, werden die einzigen Anforderungen, die er akzeptiert, von der Debian-VM selbst abgerufen: gut und sicher zum Testen, jedoch nicht für die Produktion oder sogar für Tests auf einem anderen Computer.

Wenn Sie möchten, dass Ihre Rails von einem anderen Computer (einschließlich Ihres Windows 7-Hosts) aus erreichbar sind, müssen Sie Rails an die IP-Adresse von Debian binden, die von außen zugänglich ist (siehe unten).

Es ist jedoch einfacher, Rails mit der speziellen IP-Adresse 0.0.0.0, dh jedem Netzwerkadapter, zu verbinden . 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 vermasselt hat, selbst wenn die anderen beiden Komponenten funktionieren.

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 um denselben Computer handelt. Aus Gründen der Vernetzung ist Ihre Debian-VM jedoch ein separater Computer. Wenn Sie in Ihrem Windows 7-Host einen Webbrowser verwenden, localhostwird immer auf Ihr Windows 7 verwiesen und sonst nichts.

Sie haben hier zwei Möglichkeiten:

  • Setzen Sie den VirtualBox VM-Adapter auf den Bridge-Modus (wie in Ihrer Frage erwähnt). Dadurch wird Ihr Debian direkt in dasselbe außerhalb / home / work-Netzwerk eingebunden wie Ihr Windows 7-Host. Sie können dann die IP-Adresse Ihrer Debian-VM durch Ausführen ermitteln ifconfig. Suchen Sie nach der IP Ihres eth0oder des eth<something>Adapters. Stecken Sie dies in die Adressleiste Ihres Browsers.

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

Debian-Firewall

Es ist schon eine Weile her, seit ich an Debian gearbeitet habe, also weiß ich nicht, was die aktuellen Vorgaben sind. Wenn die beiden oben genannten Dinge jedoch nicht funktionieren, lohnt es sich vielleicht, nachzusehen. Wenn Debian eine Firewall ausführt, müssen Sie alle Ports öffnen, auf die Sie von einem anderen Rechner aus zugreifen möchten.

Hoffe das hilft :)