Não é possível acessar o servidor da Web na máquina virtual da Internet

0

Estou tendo problemas para acessar meu servidor da Web quando ele está localizado em uma máquina virtual. Se eu colocar o servidor na máquina host física, posso acessá-lo pela internet. No entanto, quando tento acessar o servidor da Web quando ele está na VM (na mesma máquina host), ele simplesmente trava (no navegador e curl externalip:forwardedport).

Estou um pouco irritado porque isso não está funcionando porque as partes dessa configuração funcionam isoladamente, mas não funcionam quando colocadas juntas.

Quando o coloco em uma máquina virtual, certifico-me de configurar uma conexão de rede em ponte e de acessá-la de qualquer lugar da rede em máquinas separadas. Eu também configuro o encaminhamento de porta no roteador para o ip estático atribuído ao IP estático atribuído à VM.

As seguintes representam configurações. A primeira configuração é a que estou tentando alcançar. O segundo e o terceiro são "configurações parciais" que parecem que, se ambos funcionam (e funcionam), então a primeira configuração também deve funcionar.

  1. webserver <-> máquina virtual <-> máquina host <-> roteador <-> modem <-> internet
  2. webserver <-> máquina virtual <-> máquina host <-> roteador <-> outro computador
  3. ................................ webserver <-> máquina host <-> roteador <-> modem <-> internet

Basicamente # 2 significa que eu posso acessar o servidor da web localmente, e # 3 significa que eu posso acessar o servidor da web, se o servidor da Web não estiver na máquina virtual, mas no host da VM.

Atualmente estou usando:

webserver: python's SimpleHTTPServer at port 8888
virtual machine: centos deployed by vagrant on virtualbox. 
host machine: thinkpad, windows
router: apple airport, wrt-54g (tried both, same results)
modem: SB6121 cable modem
internet: comcast 

Eu configuro o encaminhamento de porta da porta 8888 para o endereço IP estático local 10.0.1.99 @ 8888 do servidor.

Pensei que tudo deveria estar certo. Eu pedi a um amigo que tentasse acessar o servidor web de seu próprio roteador / internet e ele tem os mesmos resultados: ele simplesmente trava.

É a combinação do encaminhamento de porta no roteador e a ponte do adaptador de rede vm que parece causar problemas. Tenho certeza de que estou encaminhando a porta certa para o IP estático correto. Além disso, não tenho certeza por que está pendurado, versus simplesmente soltando minha conexão. Algumas pessoas sugeriram, os pacotes não estão encontrando o caminho de volta para a internet.

barrrista
fonte
Você não forneceu informações suficientes para nos ajudar - para começar, sabendo qual sistema de VM você está usando. Em um palpite, soa como uma combinação de um problema NAT e Bridging.
davidgo
Eu pensei que eu forneci essa informação. Na VM, tenho dois adaptadores. Existe um adaptador NAT para conexões SSH que eu não quero desligar, e outro é a conexão em ponte atribuída a um IP estático. Eu posso acessar a conexão em ponte de outro lugar na minha rede.
barrrista
1
É possível que o roteamento de saída esteja escolhendo o caminho NAT em preferência ao caminho direto - acho que isso é um erro comum ao configurar várias Interfaces com diferentes gateways, ou seja, não ter duas tabelas de roteamento.
davidgo
1
Eu não vi nenhuma menção sobre a configuração de IPtables na vm. Para mim, isso poderia ser um problema. Tente executar isso no vmiptables -A INPUT -p tcp --dport 8888 -j ACCEPT
xR34P3Rx
1
Eu também nunca configurei este servidor web antes, mas também é possível que ele esteja vinculado ao seu ip privado (o ip que ele escuta). Se possível, mude para 0.0.0.0:8888. Isso permitirá que ele ouça em qualquer endereço de entrada.
xR34P3Rx

Respostas:

1

Eu encontrei o que o problema era. O Vagrant cria dois adaptadores, um NAT, supostamente para a conexão ssh, e o adaptador em ponte que eu pedi no VagrantFile. Se eu desabilitar o adaptador NAT (ou seja, através do VirtualBox) e deixar o adaptador em ponte ativo, de repente ele funciona, e eu posso acessar o servidor da Internet. Se eu deixar o adaptador NAT, só posso acessar o servidor da rede (ou seja, outras caixas).

Aqui está a configuração de quando não funcionou:

Adaptador NAT: Adaptador NAT

Adaptador em ponte: Adaptador em ponte

ifconfig dentro da minha VM, hospedando o servidor web. Não consigo acessar da internet. O endereço IP aqui é: 99 porque eu configurei um ip estático através do VagrantFile (arquivo de configuração do vagrant): ifconfig dentro da minha VM, hospedando o servidor web

De repente, funciona se eu remover o adaptador NAT, usando apenas o adaptador em ponte. O endereço IP muda para algo atribuído pelo DHCP, porque eu simplesmente ligo: removeu o adaptador NAT, usando apenas o adaptador em ponte

Tenho certeza de que configurei o encaminhamento de porta corretamente cada vez que o ip local foi alterado no adaptador em ponte e repliquei o problema várias vezes.

barrrista
fonte
Bem, a rota padrão é o truque. Seu vm é, provavelmente, padrão para o adaptador nat para roteamento (ip route to check) e os pacotes de entrada no adaptador em ponte serão descartados. Tente definir a rota padrão no adaptador em ponte e exclua o adaptador nat.
maudam
Aparentemente, eu não deveria deletar o adaptador Nat porque estou usando o Vagrant. Comandos como "vagrant up" não funcionarão se o adaptador Nat for removido. Então, o meu pode não ser a melhor solução.
barrrista
Não funcionou para mim
Harry Bosh