Virtualbox "Port Forward" vom Gast zum Host [geschlossen]

162

Hier ist mein Setup:

- Host: Windows XP
- Guest: Ubuntu 10.04
- Networking: NAT

Ich stelle einen Apache-Webserver auf dem Gast ein, möchte dies jedoch auf dem Windows-Computer tun können:

- go to the browser, type http://localhost:8000

Außerdem habe ich versucht, mein Netzwerk auf Bridge umzustellen, und eine neue IP erhalten. Aber als ich versuchte, http: //: 8000 zu machen, heißt es, dass es keine Verbindung herstellen konnte.

Carmen
quelle
1
Ich hatte das gleiche Problem. Es stellte sich heraus, dass das Gastbetriebssystem eine aktive Firewall hatte, die Port 80 blockierte.
Nicholas Shanks
149
Als Webentwickler, der VirtualBox als Teil meines täglichen Workflows verwendet, bin ich nicht damit einverstanden, dass dies als nicht zum Thema gehörend markiert wird. Bitte erwägen Sie eine Wiedereröffnung.
Sparecycle
1
1. Gehen Sie zur VM 2. ifconfig (lokale IP abrufen - sollte 10.0.2.X sein) 3. ssh 10.0.2.2, um zum Host-Computer zu gelangen
Mark Roberts
@deeperDATA Es kann im Rahmen des Jobs eines Webentwicklers liegen, aber der Stapelüberlauf soll nicht jeden Teil des Jobs kapseln. Es ist ein Beweis für die Komplexität unseres Berufs, dass seine Anforderungen mehrere Stapelaustauschstandorte umfassen.
Kevin Lawrence
1
Ich habe lange gebraucht, um es zum Laufen zu bringen. Unser Problem war die IP-Bindung der Anwendung im Gastsystem, die an den Computernamen gebunden war, was in Ubuntu 127.0.1.1 bedeutet. Wir haben die Bindung auf 0.0.0.0 geändert. Einstellungen für die Portweiterleitung: Host-IP = DNS-Host-IP, Host-Port = 8080, Gast-IP = IP von eth0, Gast-Port = 8080.
langsam

Antworten:

222

Netzwerkkommunikation Host -> Gast

Stellen Sie eine Verbindung zum Gast her und ermitteln Sie die IP-Adresse:

ifconfig 

Beispiel für das Ergebnis (IP-Adresse ist 10.0.2.15):

eth0      Link encap:Ethernet  HWaddr 08:00:27:AE:36:99
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

Gehen Sie zum Vbox-Instanzfenster -> Menü -> Netzwerkadapter:

  • Adapter sollte NAT sein
  • Klicken Sie auf "Portweiterleitung".
  • neuen Datensatz einfügen (+ Symbol)
    • Geben Sie für die Host-IP 127.0.0.1 und für die Gast-IP-Adresse ein, die Sie von prev erhalten haben. Schritt (in meinem Fall ist es 10.0.2.15)
    • In Ihrem Fall ist der Port 8000 - setzen Sie ihn auf beide, aber Sie können den Host-Port ändern, wenn Sie dies bevorzugen

Gehen Sie zum Host-System und probieren Sie es im Browser aus:

http://127.0.0.1:8000

oder Ihre Netzwerk-IP-Adresse (ermitteln Sie dies auf dem Host-Computer, indem Sie Folgendes ausführen: ipconfig).

Netzwerkkommunikation Gast -> Host

In diesem Fall ist keine Portweiterleitung erforderlich, die Kommunikation erfolgt über das LAN zurück zum Host.

Finden Sie auf dem Host-Computer Ihre Netzwerk-IP-Adresse heraus:

ipconfig

Beispiel des Ergebnisses:

IP Address. . . . . . . . . . . . : 192.168.5.1

Auf dem Gastcomputer können Sie direkt mit dem Host kommunizieren, z. B. mit Ping überprüfen:

# ping 192.168.5.1
PING 192.168.5.1 (192.168.5.1) 56(84) bytes of data.
64 bytes from 192.168.5.1: icmp_seq=1 ttl=128 time=2.30 ms
...
Robert Lujo
quelle
11
Beide Ports werden nicht 8000 sein. Der Host-Port wird 8000 sein oder was auch immer Sie wollen, aber der Gast-Port sollte 80 sein
Yasin
5
In diesem Fall sollte es möglich sein, von der VM zum Host zu gelangen, indem Sie zur VM gehen und die ITS-IP-Adresse (10.0.2.15 wie unten) abrufen. Um von der VM zum Host-Computer zu gelangen, lautet die IP 10.0.2.2 (gemäß Konvention).
Mark Roberts
5
Wenn Sie NAT für den Gast verwenden ... Wenn der Dienst, der auf dem Host ausgeführt wird, nur an 127.0.0.1 gebunden ist, kann der Gast die öffentliche IP-Adresse des Hosts nicht verwenden, um eine Verbindung zu diesem Dienst herzustellen (Beispieldienst: privoxy). Stattdessen müssen Sie 10.0.2.2 verwenden, wie von Mark erwähnt, oder was auch immer 'route -n' (auf dem Gast ausführen) als Standard-Gateway anzeigt.
Desm
4
Im Falle von CentOS müssen wir möglicherweise die Firewall deaktivieren oder bestimmte Regeln in der iptable bearbeiten
Reddy
2
Ich habe festgestellt, dass es nicht erforderlich ist, Host- oder Gast-IP-Adressen anzugeben, und Sie können die Felder einfach leer lassen. Wenn Sie nur eine Verbindung von localhost herstellen möchten, ist es wahrscheinlich eine gute Idee, 127.0.0.1 als Host zu verwenden.
mwfearnley
14

Das ist doch nicht möglich. localhostStandardmäßig wird immer das Loopback-Gerät des lokalen Betriebssystems verwendet.
Da Ihre virtuelle Maschine ein eigenes Betriebssystem ausführt, verfügt sie über ein eigenes Loopback-Gerät, auf das Sie von außen nicht zugreifen können.

Wenn Sie z. B. in einem Browser darauf zugreifen möchten, stellen Sie stattdessen eine Verbindung über die lokale IP-Adresse her:

http://192.168.180.1:8000

Dies ist natürlich nur ein Beispiel. Sie können die tatsächliche IP ermitteln, indem Sie einen ifconfigBefehl für eine Shell im Gastbetriebssystem ausgeben .

Chris
quelle
Ich habe es auch versucht, aber es hat nicht sowohl für NAT als auch für Bridge funktioniert. Die Apache-Protokolle im Gast geben keine Fehler aus und der Apache ist im Gast aktiv.
Carmen
Sind Sie sicher, dass Sie die richtige IP verwenden? Sie können das überprüfen , indem Sie versuchen , die Adresse aus zuzugreifen innerhalb der virtuellen Maschine. Wenn dies fehlschlägt, verwenden Sie entweder eine falsche IP-Adresse oder Ihr Apache ist nicht für das Abhören von Port 8080 eingerichtet.
Chris
Hat für mich gearbeitet - danke!
Matt Frear
Hat auch für mich gearbeitet. Bevor ich "localhost" durch die IP-Adresse des Host-Betriebssystems ersetzte, wurde in /var/log/auth.log trotz LogLevel DEBUG3 in / etc / ssh / sshd_config
VR
@ Chris bedeutet dies, dass auf dem Host mit virtuellen Hosteinträgen wie für den Gastcomputer kein Zugriff möglich ist mysite.localhost, da ich nur mit einer IP-Adresse auf den Host verweisen muss?
Danjah