Como se conectar a uma VM convidada do sistema host?

15

Eu tenho uma configuração de servidor web VM e instalei e iniciei o Apache. A VM possui uma interface de rede em ponte e pode ser executada ping do host usando 192.168.0.2.

No entanto, se eu digitar o mesmo endereço IP no navegador da máquina host, esperava ver a página apache padrão gerada na VM, mas, em vez disso, entro can't connect to 192.168.0.2no navegador das máquinas host.

Eu claramente perdi algo. Alguém sabe o que eu perdi ou fiz de errado?

Saída da 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

Desenho aproximado do que eu acho que seria a atividade / conectividade da rede.

                               insira a descrição da imagem aqui

oshirowanen
fonte
Se você vir apenas :::80, o Apache está apenas ouvindo conexões IPv6. Você já tentou verificar suas Listendiretrizes?
precisa saber é o seguinte
Tente adicionar o -psinalizador para netstatverificar se o Apache está realmente ouvindo na porta 80 e não em algum outro serviço. Você pode fugir curl localhostdo convidado? O que grep -C3 -rni Listen /etc/httpd/mostra?
precisa saber é o seguinte
Faça-me um favor, se essas instruções funcionarem, escreva-as como resposta, pois você terá acesso às capturas de tela. Essa pergunta surge em boa quantidade, não acredito que sua solução tenha sido capturada com precisão.
slm

Respostas:

14

Problema nº 1 - tipos de rede VM

Existem 3 modos de rede:

  1. NAT
  2. Somente host
  3. Bridged

Detalhes sobre como configurá-los

Quando usar cada um?

  • # 1 : Para o desenvolvimento de aplicativos do Facebook / web que estão em outros servidores
  • # 2 : se você deseja criar seu próprio aplicativo e testá-lo no host do VirtualBox (não apenas na VM convidada)
  • # 3 : se você deseja criar um aplicativo e testá-lo em outros sistemas na LAN

Problema nº 2 - bloqueio de firewall?

Dependendo da distro que você está usando, o firewall pode estar impedindo o seu navegador de acessar a instância do Apache. Isso faria sentido, já que você é capaz de executar ping no sistema, mas não acessá-lo pela porta 80, que é a porta que o Apache está ouvindo.

desativando temporariamente

No CentOS, você usa este comando para desativá-lo.

$ /etc/init.d/iptables stop

verifique se o Apache está ouvindo

Você também pode confirmar que está ouvindo nesta porta.

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

confirme a desativação do firewall

O firewall pode ser confirmado como totalmente aberto.

$ 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 isso resolver seu problema, você poderá adicionar permanentemente uma regra que permita o tráfego via porta TCP 80.

adicionando uma regra para a 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: Isso fará com que a regra persista entre as reinicializações.

firewall está aceitando a porta TCP 80

Um sistema com a porta 80 aberta seria algo como isto:

$ 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         

Edição # 3 - Apache ouvindo?

Na edição acima, vimos que o Apache estava escutando, mas às vezes é configurado incorretamente, de modo que está escutando apenas um endereço IP ou está escutando em uma interface de rede diferente. O comando netstatpode ser usado para verificar isso novamente e também para revisar os arquivos de configuração do Apache.

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

Isso mostra que o Apache está escutando em todas as interfaces (IP 0.0.0.0).

Não vou repetir a resposta de @ Lekensteyn que aborda essa questão em particular em mais detalhes aqui.

Referências

slm
fonte
agora estou completamente confuso. Eu já tenho a VM no modo de ponte, posso executar ping na VM a partir do host, mas não consigo acessar o mesmo endereço IP do navegador da Web no host, mesmo que a VM tenha o apache instalado e iniciado, devo ver a it worked!página apache.
oshirowanen
@oshirowanen - obrigado por não ficar frustrado, pois tentamos resolver o problema 8-). Verifique se o Apache está sendo executado no CentOS,, /etc/init.d/httpd statusdeve mostrar a execução.
slm
1
Parei o firewall na VM e agora posso ver a página IP padrão ao usar um navegador da Web na máquina host para acessar o URL da VM !!!
oshirowanen
1
@oshirowanen - WOOHOO! OK, então a questão toda foi apenas o firewall. Vou adicionar um comando para adicionar a regra ao seu firewall. Você também pode torná-lo permanente com este comando /sbin/service iptables save.
slm
Sim! Eu fiz uma instalação mínima do CentOS e não deveria ter assumido que o firewall estava desativado por padrão ... Para ser honesto, o firewall nem me veio à mente. Obrigado por gastar seu tempo para ajudar.
oshirowanen
2

Sua instalação do Apache provavelmente está configurada para escutar apenas no host local. Você pode verificar isso executando seu convidado:

$ 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 diz 0.0.0.0:80, ouve em todas as interfaces. No seu caso, eu esperaria 127.0.0.1:80. Para resolver isso, edite sua configuração do Apache (em algum lugar /etc/httpd/conf/) e altere:

Listen 127.0.0.1:80

para:

Listen 80

Você também pode usar nmappara verificar os serviços disponíveis em sua máquina. Deve parecer com:

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