Come connettersi a una VM guest dal sistema host?


15

Ho una configurazione del server web VM e ho installato e avviato Apache. La VM ha un'interfaccia di rete con bridge e può essere eseguita il ping dall'host utilizzando 192.168.0.2.

Tuttavia, se digito lo stesso indirizzo IP nel browser sul computer host, mi aspettavo di vedere la pagina apache predefinita generata sulla VM, ma invece ottengo can't connect to 192.168.0.2nel browser dei computer host.

Ho chiaramente perso qualcosa. Qualcuno sa cosa ho perso o fatto di sbagliato?

Uscita dalla 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

Disegno approssimativo di come sto pensando che l'attività di rete / connettività sarebbe simile.

                               inserisci qui la descrizione dell'immagine


Se vedi solo :::80, Apache è in ascolto solo delle connessioni IPv6. Hai provato a controllare le tue Listendirettive?
Lekensteyn,

Prova ad aggiungere il -pflag per netstatverificare che Apache sia effettivamente in ascolto sulla porta 80 e non su altri servizi. Puoi scappare curl localhostdall'ospite? Cosa grep -C3 -rni Listen /etc/httpd/mostra?
Lekensteyn,

Fammi un favore, se queste indicazioni funzionano, scrivilo come una risposta, dato che avrai accesso agli screenshot. Questa domanda arriva abbastanza bene, non credo che la sua soluzione sia stata accuratamente catturata.
slm

Risposte:


14

Problema n. 1 - Tipi di rete VM

Esistono 3 modalità di rete:

  1. NAT
  2. Solo host
  3. Bridged

Dettagli su come configurarli

Quando usarli?

  • # 1 : per lo sviluppo di app Web / Facebook che si trovano su altri server
  • # 2 : se vuoi creare la tua app e testarla dall'host VirtualBox (non solo dalla VM guest)
  • # 3 : se vuoi creare un'app e testarla da altri sistemi su LAN

Problema n. 2: blocco del firewall?

A seconda della distro in uso, il firewall potrebbe impedire al browser Web di accedere all'istanza di Apache. Ciò avrebbe senso dato che sei in grado di eseguire il ping del sistema, ma non accedervi tramite la porta 80, che è la porta su cui Apache è in ascolto.

disabilitandolo temporaneamente

Su CentOS si utilizza questo comando per disabilitarlo.

$ /etc/init.d/iptables stop

controlla che Apache stia ascoltando

Puoi anche confermare che è in ascolto su questa porta.

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

confermare che il firewall è disattivato

Il firewall può essere confermato che è completamente aperto.

$ 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      

Se ciò risolve il problema, è possibile aggiungere in modo permanente una regola che consenta il traffico tramite la porta TCP 80.

aggiunta di una regola per la porta TCP 80

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

NOTA: Questo farà persistere la regola tra i riavvii.

il firewall accetta la porta TCP 80

Un sistema con la porta 80 aperta sarebbe simile a questo:

$ 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         

Problema n. 3: ascolto Apache?

Nel problema precedente abbiamo visto che Apache era in ascolto, ma a volte è configurato in modo errato in modo che sia in ascolto solo su 1 indirizzo IP o che sia in ascolto su un'altra interfaccia di rete. Il comando netstatpuò essere usato per ricontrollare questo e rivedere i file di configurazione di Apache.

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

Questo dimostra che Apache è in ascolto su tutte le interfacce (IP 0.0.0.0).

Non ripeterò quale sia la risposta di @ Lekensteyn che tratta questo particolare problema in modo più dettagliato qui.

Riferimenti


ora sono completamente confuso. Ho già ottenuto la VM in modalità bridge, posso eseguire il ping della VM dall'host ma non riesco a ottenere lo stesso indirizzo IP dal browser Web sull'host anche se la VM ha installato e avviato apache, dovrei vedere la it worked!pagina di apache.
oshirowanen,

@oshirowanen - grazie per non esserti frustrato mentre proviamo a risolvere il problema Cool. Assicurati che Apache sia in esecuzione su CentOS /etc/init.d/httpd status, dovrebbe mostrare in esecuzione.
slm

1
Ho bloccato il firewall sulla VM e ora posso vedere la pagina IP predefinita quando utilizzo un browser Web sulla macchina host per accedere all'URL della VM !!!
oshirowanen,

1
@oshirowanen - WOOHOO! OK così l'intera questione era solo il firewall, aggiungerò un comando per aggiungere la regola per il firewall, si può anche rendere permanente questo comando w /, /sbin/service iptables save.
slm

Sì! Ho fatto un'installazione minima di CentOS e non avrei dovuto supporre che il firewall fosse disabilitato per impostazione predefinita ... A dire il vero, il firewall non mi è nemmeno venuto in mente. Grazie per aver dedicato del tuo tempo ad aiutarti.
oshirowanen,

2

L'installazione di Apache è probabilmente configurata per l'ascolto solo su localhost. Puoi verificarlo eseguendo nel tuo ospite:

$ 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

Se dice 0.0.0.0:80, ascolta su tutte le interfacce. Nel tuo caso, mi aspetterei 127.0.0.1:80invece. Per risolvere questo problema, modifica la tua configurazione di Apache (da qualche parte in /etc/httpd/conf/) e cambia:

Listen 127.0.0.1:80

per:

Listen 80

È inoltre possibile utilizzare nmapper verificare i servizi disponibili sulla propria macchina. Dovrebbe apparire come:

$ 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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.