Como acessar o servidor em execução no VirtualBox do host?

3

Estou executando um aplicativo da web na VM.

Eu posso ver o aplicativo em localhost:8888 através de um navegador de dentro da VM.

Não consigo ver o aplicativo do host no mesmo URL. Esse é o objetivo.

eu tentei VBoxManage modifyvm "VM name" --natdnshostresolver1 on mas não teve impacto.

Minha configuração é:

  • Hospedeiro: Windows 7
  • Convidado: Ubuntu 16.04.1 LTS
  • VirtualBox: 5.1.4r110228

Guest Configuration

(Convidado) ifconfig quando em NAT

kirkland@GC:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:d0:fc:0e  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::4c67:70b5:c37b:8fa8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7431 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3587 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7444830 (7.4 MB)  TX bytes:731870 (731.8 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1566 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1566 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:655936 (655.9 KB)  TX bytes:655936 (655.9 KB)

(Convidado) / etc / hosts

127.0.0.1   localhost
127.0.1.1   GC

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Kirkland
fonte
Eu marquei isso como "dupe", uma vez que este problema é basicamente resolvido com a configuração de um adaptador "somente host" no VirtualBox. Se você sente que não é um tolo, isso é justo, mas a solução que eu postei para essa pergunta é a mesma coisa que resolveria essa questão para você aqui.
JakeGould
Eu segui as instruções em "a solução que você postou para a outra pergunta" até, e incluindo, o comando sudo ifconfig eth1 192.168.56.10 netmask 255.255.255.0 up, mas não funcionou. Com isso dito, foi o IPv4 Network Mask um erro de digitação porque não corresponde à imagem que você incluiu.
Kirkland
Sim, a máscara de rede IPv4 é um erro de digitação; deveria ser 255.255.255.0 e eu consertei no meu post. Deve funcionar. Se não houver algo mais em jogo, como o aplicativo em sua VM sendo explicitamente conectado a localhost em vez de ser configurado para usar um endereço IP também. Mas eu ajudei o melhor que pude; não pode ajudar mais. Boa sorte para você em resolver isso.
JakeGould

Respostas:

3

o localhost:8888 URL é apenas um URL válido dentro de sua VM. Fora dessa VM você terá que usar ip.ad.dr.ess:8888 ou hostname:8888. Neste último caso, uma dependência no nome do host resolvido para ip.ad.dr.ess na sua rede é introduzido.

Por padrão, quando você cria uma VM no VirtualBox, o adaptador de rede 1 é definido como NAT. Isso dará à VM um endereço IP de 10.0.2.15/24 e uma rota padrão de 10.0.2.2 (que deve ser seu host). Para encurtar a história, as janelas não serão direcionadas para um endereço para o qual o NAT está fornecendo, sem passar por mais aros primeiro.

Desligar a VM e alterar a configuração do adaptador 1 de rede VM para "em ponte" permitirá que seu host (e qualquer host em sua rede local) se comunique com essa VM sem que nenhuma rota especial seja adicionada ou que arcos passem por ela.

Reinicie a VM. Verifique sua conectividade para localhost:8888. Além disso, verifique sua conectividade com hostname:8888 (assumindo que hostname era not adicionado ao endereço de loopback / localhost no arquivo / etc / hosts) e ip-address:8888. EDIT: Baseado nos detalhes do / etc / hosts postados, você are ligação sua VM e, portanto, o webapp para a rede de loopback. Esta configuração não é utilizável fora da VM.

Se o servidor e o aplicativo da Web não dependerem do IP em que ele foi configurado / instalado e você tiver um servidor DHCP em sua LAN, a única outra informação que você precisa para se conectar à VM é o endereço IP que foi atribuído a ele via DHCP.

Para encontrar o endereço IP da VM: Abra uma janela de terminal / console na área de trabalho do Ubuntu (ctrl-alt-T), usamos hostname, ifconfig e grep /etc/hosts comandos para juntar as peças e encontrar o seu endereço. Do terminal aberto, digite hostname então aperte enter. Isso é provavelmente gc. Nesse mesmo terminal, digitando ifconfig eth0 | awk '/Bcast/{print $2}' mostrará o endereço. Você deve ter uma linha em / etc / hosts com o endereço seguido pelo nome do host. grep [hostname] /etc/hosts ou grep [address] /etc/hosts deve encontrar a linha que você precisa. Se você encontrar algo diferente do seu endereço atual seguido pelo nome do host, será necessário modificar o arquivo / etc / hosts para incluir as informações corretas.

Os hosts em sua LAN agora devem poder se conectar ao IP de sua VM na porta 8888. Para esses hosts / clientes acessarem a webapp via hostname:8888 dependerá dos arquivos hosts do cliente, do DNS local ou até mesmo dos serviços mDNS, possivelmente fornecidos em seu servidor DHCP.

Daniel Liston
fonte
Eu tentei os dois Bridged Adapter (3 opções) e Host-only Adapter (1 opção). Não funcionou. Eu não tenho certeza do que você quer dizer com hostname:8888. Na VM eu posso acessar a webapp via localhost:8888 e 127.0.0.1:888. Não consigo acessar o aplicativo na VM em 10.0.2.15:8888 ou 10.0.2.255:8888. Eu não sou capaz de chegar a ele do host. Adicionei mais informações sobre minha configuração à postagem original. Se houver mais alguma coisa que eu possa postar que possa esclarecer as coisas, me avise. Obrigado pela ajuda!
Kirkland
Imagens valem mais que mil palavras. O nome do host: 8888 a que me referi é o nome que você deu à máquina dentro do sistema operacional Ubuntu. No seu caso "GC". Aqui está a massagem. Esse nome está vinculado à rede de loopback em 127.0.1.1 e nunca será visto por nada fora da VM, não importa o quê. Ele nem mesmo vê / usa o endereço 10.0.2.15 com base nas informações do / etc / hosts. Tente adicionar esta linha ao / etc / hosts: 10.0.2.15 gc e veja se você pode acessar o aplicativo com 10.0.2.15:8888 e gc: 8888. Se você puder, estamos fazendo progresso.
Daniel Liston
Considerando que sua meta final é alcançar a VM da GC a partir de outros hosts em sua rede, o NAT e o Host apenas para seu adaptador VM não são a resposta correta, a menos que você prefira configurar encaminhamento de porta e rotas especiais no sistema operacional host. Você realmente precisa trabalhar com o Bridged se quiser chegar aonde pretende ir.
Daniel Liston
Eu adicionei 10.0.2.15 GC abaixo 127.0.1.1 GC no meu convidado hosts Arquivo. Dentro do convidado eu posso ver o aplicativo via localhost:8888, mas 10.0.2.15:8888 me dá ... ERR_CONNECTION_REFUSED.
Kirkland
1
Isso confirma minha suspeita de que, mesmo que você tenha o roteamento de rede correto para a VM, não será possível usar o "aplicativo" até resolver o problema do endereço que ele está escutando. Seu aplicativo está vinculado à rede de loopback (127.x.x.x) e não responde ao endereço atribuído ao seu dispositivo eth0. Isso precisa ser corrigido antes que possamos dar o próximo passo de conexão do host.
Daniel Liston
0

Para conseguir isso, acho que seria melhor usar o modo de ponte. Se isso não for possível ou desejável, você precisará de uma rota estática no seu host.

Para adicionar uma rota estática, faça o seguinte: Olhe nas propriedades de rede do seu host. Você deve encontrar um adaptador chamado VirtualBox Host-Only Network. Encontre o seu endereço IP. É provavelmente 192.168.56.1, que eu acho que é o padrão, mas poderia ser outra coisa. Chame isso de a.b.c.d. Em seguida, obtenha o endereço IP do seu convidado. Chame isso de w.x.y.z. (Os primeiros 3 octetos devem ser os mesmos em ambos os endereços.) Quando você tiver isso, abra um prompt do DOS em seu host e digite este comando:

route add w.x.y.z mask 255.255.255.0 a.b.c.d

Se isso funcionar, você pode executar o mesmo comando com a opção -p para torná-lo permanente (caso contrário, ele desaparecerá na próxima vez que você reinicializar o host).

Charles Burge
fonte
O que você quer dizer com "uma rota estática no seu host"?
Kirkland
Seu host tem um gateway padrão, que é onde todo o tráfego é encaminhado se não estiver indo para outro host na mesma sub-rede. Mas o tráfego de saída não pode chegar ao convidado da VM por meio do gateway padrão, portanto, é necessário informar como chegar lá.
Charles Burge
Eu atualizei minha resposta original para ter instruções para criar uma rota estática.
Charles Burge
Isso é um pouco exagerado. A solução recomendada pelo VirtualBox e outros também é simplesmente configurar um “Adaptador somente host” como uma segunda conexão de rede.
JakeGould
Sim, concordo que é exagero. Seria muito melhor simplesmente usar uma conexão em ponte. Isso faz com que o host e o convidado sejam iguais em termos de rede.
Charles Burge