¿Cómo conectarse a una máquina virtual invitada desde el sistema host?

15

Tengo una configuración de servidor web VM y he instalado e iniciado Apache. La VM tiene una interfaz de red en puente y se puede hacer ping desde el host usando 192.168.0.2.

Sin embargo, si escribo esa misma dirección IP en el navegador en la máquina host, esperaba ver la página apache predeterminada generada en la VM, pero en su lugar, can't connect to 192.168.0.2accedo al navegador de las máquinas host.

Claramente me he perdido algo. Alguien sabe lo que me he perdido o he hecho mal?

Salida de 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

Dibujo aproximado de cómo creo que sería la actividad / conectividad de la red.

                               ingrese la descripción de la imagen aquí

oshirowanen
fuente
Si solo ve :::80, entonces Apache solo está escuchando conexiones IPv6. ¿Has intentado comprobar tus Listendirectivas?
Lekensteyn
Intente agregar el -pindicador para netstatverificar que Apache realmente está escuchando en el puerto 80 y no en algún otro servicio. ¿Puedes huir curl localhostdel invitado? ¿Qué grep -C3 -rni Listen /etc/httpd/muestra?
Lekensteyn
Hazme un favor, si estas instrucciones funcionan, escríbelas como respuesta, ya que tendrás acceso a las capturas de pantalla. Esta pregunta surge bastante, no creo que su solución haya sido capturada con precisión.
slm

Respuestas:

14

Problema n. ° 1: tipos de redes de VM

Hay 3 modos de redes:

  1. NAT
  2. Solo host
  3. Puenteado

Detalles sobre cómo configurarlos

¿Cuándo usar cada uno?

  • # 1 : para el desarrollo de aplicaciones de Facebook / web que están en otros servidores
  • # 2 : si desea crear su propia aplicación y probarla desde el host VirtualBox (no solo la máquina virtual invitada)
  • # 3 : si desea crear una aplicación y probarla desde otros sistemas en LAN

Problema 2: ¿bloqueo de firewall?

Dependiendo de la distribución que esté utilizando, el firewall podría estar bloqueando el acceso de su navegador web a su instancia de Apache. Esto tendría sentido dado que puede hacer ping al sistema, pero no acceder a él a través del puerto 80, que es el puerto en el que Apache está escuchando.

deshabilitándolo temporalmente

En CentOS, usa este comando para deshabilitarlo.

$ /etc/init.d/iptables stop

comprueba que Apache está escuchando

También puede confirmar que está escuchando en este puerto.

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

confirmar que el firewall está apagado

Se puede confirmar que el firewall está abierto de par en par.

$ 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      

Si esto resuelve su problema, puede agregar permanentemente una regla que permita el tráfico a través del puerto TCP 80.

Agregar una regla para el puerto TCP 80

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

NOTA: Esto hará que la regla persista entre reinicios.

el firewall está aceptando el puerto TCP 80

Un sistema que tenga el puerto 80 abierto se vería así:

$ 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 # 3 - ¿Apache escuchando?

En el problema anterior, vimos que Apache estaba escuchando, pero a veces está mal configurado para que solo escuche en 1 dirección IP, o que esté escuchando en una interfaz de red diferente. El comando netstatse puede usar para verificar esto y para revisar los archivos de configuración de Apache.

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

Esto muestra que Apache está escuchando en todas las interfaces (IP 0.0.0.0).

No repetiré la respuesta de @ Lekensteyn que cubre este tema en particular aquí con más detalles.

Referencias

slm
fuente
Ahora estoy completamente confundido. Ya tengo la VM en modo puente, puedo hacer ping a la VM desde el host, pero no puedo acceder a la misma dirección IP desde el navegador web en el host a pesar de que la VM tiene apache instalado e iniciado, debería ver La it worked!página de Apache.
oshirowanen
@oshirowanen: gracias por no frustrarse mientras intentamos resolver el problema 8-). Asegúrese de que Apache se esté ejecutando en CentOS /etc/init.d/httpd status, debería mostrar en ejecución.
slm
1
¡Detuve el firewall en la VM y ahora puedo ver la página IP predeterminada cuando uso un navegador web en la máquina host para acceder a la url de la VM!
oshirowanen
1
@oshirowanen - ¡WOOHOO! Aceptar lo que todo el asunto era sólo el servidor de seguridad, voy a añadir un comando para añadir la regla a su servidor de seguridad, también puede hacerlo permanente w / este comando, /sbin/service iptables save.
slm
¡Si! Hice una instalación mínima de CentOS y no debería haber asumido que el firewall estaba desactivado por defecto ... Para ser honesto, el firewall ni siquiera me vino a la mente. Gracias por dedicar tu tiempo a ayudar.
oshirowanen
2

Es probable que su instalación de Apache esté configurada para escuchar solo en localhost. Puede verificar eso ejecutando en su invitado:

$ 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

Si dice 0.0.0.0:80, escucha en todas las interfaces. En su caso, esperaría en su 127.0.0.1:80lugar. Para resolver esto, edite su configuración de Apache (en algún lugar /etc/httpd/conf/) y cambie:

Listen 127.0.0.1:80

a:

Listen 80

También puede usar nmappara verificar los servicios disponibles en su máquina. Debería verse así:

$ 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
Lekensteyn
fuente