Herstellen einer Verbindung zu einer Gast-VM vom Hostsystem aus


15

Ich habe einen VM-Webserver eingerichtet und Apache installiert und gestartet. Die VM verfügt über eine überbrückte Netzwerkschnittstelle und kann mit 192.168.0.2 vom Host gepingt werden.

Wenn ich jedoch dieselbe IP-Adresse in den Browser auf dem Hostcomputer eingebe, hatte ich erwartet, dass die auf der VM generierte Standard-Apache-Seite angezeigt wird, aber stattdessen wird sie can't connect to 192.168.0.2im Browser des Hostcomputers angezeigt.

Ich habe eindeutig etwas verpasst. Weiß jemand, was ich verpasst oder falsch gemacht habe?

Ausgabe von VM netstat -tnlp

tcp     0     0 0.0.0.0:22        0.0.0.0:*     LISTEN     950/sshd
tcp     0     0 127.0.0.1:25      0.0.0.0:*     LISTEN    1026/master
tcp     0     0 :::22                  :::*     LISTEN     904/sshd
tcp     0     0 ::1:25                 :::*     LISTEN     980/master

Grobe Zeichnung, was ich denke, die Netzwerkaktivität / Konnektivität würde aussehen.

                               Bildbeschreibung hier eingeben


Wenn Sie nur sehen :::80, wartet Apache nur auf IPv6-Verbindungen. Haben Sie versucht, Ihre ListenAnweisungen zu überprüfen ?
Lekensteyn

Fügen Sie das -pFlag hinzu, netstatum sicherzustellen, dass Apache tatsächlich Port 80 überwacht und keinen anderen Dienst. Kannst du curl localhostvor dem Gast davonlaufen? Was grep -C3 -rni Listen /etc/httpd/zeigt?
Lekensteyn

Tun Sie mir einen Gefallen, wenn diese Anweisungen funktionieren, schreiben Sie das als Antwort auf, da Sie Zugriff auf die Screenshots haben. Diese Frage taucht ziemlich häufig auf. Ich glaube nicht, dass die Lösung genau erfasst wurde.
slm

Antworten:


14

Problem Nr. 1 - VM-Netzwerktypen

Es gibt 3 Arten der Vernetzung:

  1. NAT
  2. Nur Host
  3. Überbrückt

Details zum Einrichten

Wann soll jeder verwendet werden?

  • # 1 : Für die Entwicklung von Facebook / Web Apps, die sich auf anderen Servern befinden
  • # 2 : Wenn Sie Ihre eigene App erstellen und vom VirtualBox-Host (nicht nur von der Gast-VM) aus testen möchten
  • # 3 : Wenn Sie eine App erstellen und von anderen Systemen im LAN aus testen möchten

Problem Nr. 2 - Firewall-Blockierung?

Abhängig davon, welche Distribution Sie verwenden, blockiert die Firewall möglicherweise Ihren Webbrowser für den Zugriff auf Ihre Apache-Instanz. Dies ist sinnvoll, wenn Sie das System anpingen können, aber nicht über Port 80, den Apache abhört, darauf zugreifen können.

vorübergehend deaktivieren

Unter CentOS können Sie diesen Befehl zum Deaktivieren verwenden.

$ /etc/init.d/iptables stop

Überprüfen Sie, ob Apache zuhört

Sie können auch bestätigen, dass dieser Port abgehört wird.

$ netstat -antp | grep :80 | head -1 | column -t
tcp  0  0  :::80  :::*  LISTEN  3790/httpd

Bestätigen Sie, dass die Firewall deaktiviert ist

Die Firewall kann als weit geöffnet bestätigt werden.

$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination      

Wenn dies Ihr Problem löst, können Sie dauerhaft eine Regel hinzufügen, die Datenverkehr über TCP-Port 80 zulässt.

Hinzufügen einer Regel für TCP-Port 80

$ /etc/init.d/iptables restart
$ iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ /etc/init.d/iptables save

ANMERKUNG: Dadurch bleibt die Regel zwischen Neustarts bestehen.

Firewall akzeptiert TCP-Port 80

Ein System mit offenem Port 80 würde ungefähr so ​​aussehen:

$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:https 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:8834 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Problem Nr. 3 - Apache hört zu?

In der obigen Ausgabe haben wir gesehen, dass Apache empfangsbereit war, aber manchmal ist es falsch konfiguriert, sodass es nur auf 1 IP-Adresse empfangsbereit ist oder auf einer anderen Netzwerkschnittstelle empfangsbereit ist. Mit dem Befehl netstatkönnen Sie dies überprüfen und die Apache-Konfigurationsdateien überprüfen.

$ netstat -anpt | grep :80 | column -t
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  1750/httpd

Dies zeigt, dass Apache alle Schnittstellen überwacht (IP 0.0.0.0).

Ich werde die Antwort von @ Lekensteyn , die dieses spezielle Problem behandelt, hier nicht wiederholen .

Verweise


jetzt bin ich völlig verwirrt. Ich habe die VM bereits im Bridged-Modus. Ich kann die VM vom Host aus pingen, aber ich kann vom Webbrowser auf dem Host aus nicht auf dieselbe IP-Adresse zugreifen, obwohl auf der VM Apache installiert und gestartet ist die it worked!Apache-Seite.
oshirowanen

@oshirowanen - danke, dass du nicht frustriert bist, während wir versuchen, das Problem zu lösen 8-). Stellen Sie sicher, dass Apache unter CentOS /etc/init.d/httpd statusausgeführt wird.
slm

1
Ich habe die Firewall auf der VM gestoppt und kann jetzt die Standard-IP-Seite sehen, wenn ich einen Webbrowser auf dem Hostcomputer verwende, um auf die URL der VM zuzugreifen !!!
oshirowanen

1
@oshirowanen - WOOHOO! OK, das ganze Problem war nur die Firewall. Ich werde einen Befehl hinzufügen, um die Regel zu Ihrer Firewall hinzuzufügen. Sie können sie auch mit diesem Befehl permanent machen /sbin/service iptables save.
slm

Ja! Ich habe CentOS minimal installiert und hätte nicht annehmen sollen, dass die Firewall standardmäßig deaktiviert ist ... Um ehrlich zu sein, kam mir die Firewall nicht einmal in den Sinn. Vielen Dank für Ihre Zeit, um zu helfen.
oshirowanen

2

Ihre Apache-Installation ist wahrscheinlich so konfiguriert, dass nur localhost überwacht wird. Sie können dies überprüfen, indem Sie Ihren Gast ausführen:

$ netstat -tnl | grep :80
Proto Recv-Q Send-Q Local Address      Foreign Address  State
tcp        0      0 0.0.0.0:80         0.0.0.0:*        LISTEN
tcp6       0      0 :::80              :::*             LISTEN

Wenn es heißt 0.0.0.0:80, hört es auf allen Schnittstellen. In Ihrem Fall würde ich 127.0.0.1:80stattdessen erwarten . Um dies zu lösen, bearbeiten Sie Ihre Apache-Konfiguration (irgendwo in /etc/httpd/conf/) und ändern Sie:

Listen 127.0.0.1:80

zu:

Listen 80

Sie können auch verwenden nmap, um die verfügbaren Dienste auf Ihrem Computer zu überprüfen. Es sollte so aussehen:

$ nmap 192.168.0.2

Starting Nmap 6.40 ( http://nmap.org ) at 2014-01-11 15:22 CET
Nmap scan report for localhost (192.168.0.2)
Host is up (0.0036s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.