it-swarm.com.de

Wie verbinde ich mich mit einem Gast VM vom Host-System?

Ich habe ein VM Webserver-Setup und ich habe Apache installiert und gestartet. Das VM hat eine überbrückte Netzwerkschnittstelle und kann mit 192.168.0.2 vom Host aus gepingt werden .

Wenn ich jedoch dieselbe IP-Adresse in den Browser auf dem Host-Computer eingebe, habe ich erwartet, dass die auf der VM generierte Standard-Apache-Seite angezeigt wird. Stattdessen erhalte ich can't connect to 192.168.0.2 im Browser des Host-Computers.

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 Darstellung, wie die Netzwerkaktivität/-konnektivität meiner Meinung nach aussehen würde.

enter image description here

15
oshirowanen

Problem Nr. 1 - VM Netzwerktypen

Es gibt 3 Arten der Vernetzung:

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

Details zum Einrichten

Wann sollte 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 diese vom VirtualBox-Host aus testen möchten (nicht nur von der Gast-VM)
  • # 3 : Wenn Sie eine App erstellen und von anderen Systemen im LAN testen möchten

Problem Nr. 2 - Firewall-Blockierung?

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

vorübergehend deaktivieren

Unter CentOS verwenden Sie diesen Befehl, um ihn zu deaktivieren.

$ /etc/init.d/iptables stop

überprüfen Sie, ob Apache zuhört

Sie können auch bestätigen, dass dieser Port empfangsbereit ist.

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

bestätigen Sie, dass die Firewall ausgeschaltet ist

Die Firewall kann bestätigt werden, dass sie weit offen ist.

$ 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 den 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

HINWEIS: Dadurch bleibt die Regel zwischen den 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 abgehört hat, aber manchmal ist es falsch konfiguriert, so dass nur 1 IP-Adresse oder eine andere Netzwerkschnittstelle abgehört wird. Mit dem Befehl netstat kö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 abhört (IP 0.0.0.0).

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

Verweise

14
slm

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 0.0.0.0:80 Angezeigt wird, werden alle Schnittstellen abgehört. In Ihrem Fall würde ich stattdessen 127.0.0.1:80 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 nmap verwenden, 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
2
Lekensteyn

Unter CentOS 7 hat firewalld iptables als Standard-Firewall ersetzt.

Ich musste benutzen

systemctl stop firewalld

um die Firewall anzuhalten, um die Verbindung vom Host zur CentOS VM zu testen.

Weitere Informationen finden Sie hier: https://stackoverflow.com/questions/24756240/how-can-i-use-iptables-on-centos-7

2
marmot 1333