Estou trabalhando em uma arquitetura de serviços da web. Eu tenho alguns softwares que eu preciso executar na máquina host nativa, não no Vagrant. Mas eu gostaria de executar alguns serviços ao cliente no convidado.
O config.vm.forwarded_port
parâmetro do Vagrant abrirá uma porta no host e enviará os dados para o convidado. Mas como posso abrir uma porta no convidado e enviar os dados para o host? (Ainda é encaminhamento de porta, mas na direção inversa.)
vagrant
portforwarding
Dan Fabulich
fonte
fonte
Respostas:
Quando você executa
vagrant ssh
, na verdade, está usando este comando subjacente:ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key [email protected]
O SSH suporta portas de encaminhamento na direção desejada com a
-R guestport:host:hostport
opção Portanto, se você deseja se conectar à porta12345
no convidado e tê-la encaminhadolocalhost:80
, use este comando:ssh -p 2222 -R 12345:localhost:80 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key [email protected]
Como o Eero comenta corretamente, você também pode usar o comando
vagrant ssh -- -R 12345:localhost:80
, que tem o mesmo efeito em um comando muito mais conciso.fonte
vagrant ssh -- -R 12345:localhost:80
Segue a sintaxe da opção ssh -R [bind_address:] port: host: hostport , em que o primeiro número é o número da porta a ser ouvida dentro da máquina convidada e os dois últimos são o endereço do serviço conforme visível na máquina host.vagrant ssh-config | ssh -F /dev/stdin $BOX -R $PORT_VM:localhost:$PORT -N
No livro
Vagrant: Up and Running
(data de publicação: 12 de junho de 2013), escrito pelo criador do Vagrant, ele mencionou que não é possível para a máquina convidada acessar serviços executados na máquina host.Em vez de usar
Forwarded Ports
, você pode configurar uma rede privada usandoHost-Only Networks
.Prós de usar
Host-Only Networks
mais deForwarded Ports
Máquinas convidadas podem acessar os serviços em execução na máquina host
Esse recurso resolveria seu problema.
Máquinas convidadas podem acessar os serviços em execução em outra máquina convidada
Esse recurso é muito útil para separar serviços em várias máquinas para imitar com mais precisão um ambiente de produção.
Seguro
Máquinas externas não têm como acessar os serviços em execução nas máquinas convidadas
Menos trabalho
Não há necessidade de configurar todos os
Forwarded Port
Como configurar
Host-Only Networks
config.vm.network :"hostonly", "192.168.0.0"
# Versão Vagrant # 1config.vm.network :private_network, ip: "192.168.0.0"
# Versão Vagrant # 2Ter esta linha no seu
Vagrantfile
instruirá o vagrant a criar uma rede privada que tenha um endereço IP estático:192.168.0.0
O endereço IP do host é sempre o mesmo endereço IP, mas com o octeto final como um 1. No exemplo anterior, a máquina host teria o endereço IP
192.168.0.1
.fonte
Vagrant: Up and Running
), você pode configurar uma rede em ponte. Em uma rede em ponte, outras máquinas na rede local podem acessar sua máquina virtual e vice-versa. Mas como o endereço IP é atribuído via DHCP, você precisariaifconfig
na máquina virtual para encontrar seu endereço IP.192.168.0.0
não funcionou - ondular / executar ping na máquina host estava resultando em conexões t / o's. O endereço do @ Nucleon (consistente com os documentos do Vagrant sobre o tópico) funcionou como anunciado.config.vm.network :private_network, ip: "192.168.0.0"
e o curling / ping do host192.168.0.1
estavam causando o tempo limite da conexão. Configurando a rede a ser192.168.50.4
resolvida, isto é, host disponível em192.168.50.1
.Você pode acessar portas na máquina host através do gateway padrão dentro do sistema operacional convidado. (Que normalmente tem um IP de
10.0.2.2
.)Por exemplo, se você tiver um servidor da web em execução na porta 8000 em sua máquina host ...
Você pode acessá-lo de dentro da VM Vagrant em
10.0.2.2:8000
(desde que10.0.2.2
seja o ip do gateway padrão do convidado):Para encontrar o IP do gateway padrão dentro do sistema operacional convidado, execute
netstat -rn
(ouipconfig
em um convidado do Windows) e procure a linha com um IP de destino0.0.0.0
(ou o campo "Gateway Padrão" no Windows):Você pode extrair esse IP programaticamente com
netstat -rn | grep "^0.0.0.0 " | tr -s ' ' | cut -d " " -f2
.Fontes: Como conectar-se ao host PostgreSQL a partir de uma máquina virtual de vagrant ; Conectar-se à máquina host de um sistema operacional convidado do VirtualBox?
fonte
ifconfig
eip address
não estavam conseguindo o que eu precisava, masnetstat -rn
consegui.Adicione o seguinte ao seu
~/.ssh/config
na máquina host:Permite acessar um serviço na porta 52698 da máquina host a partir do Vagrant, desde que você faça o login via
vagrant ssh
.Você pode confirmar se funciona executando
netstat -lt
na VM vagrant e anotando as seguintes linhas:fonte
Posso acessar os serviços em execução na minha máquina host por meio do endereço IP local (não do endereço de loopback). Testei criando um servidor http na porta 80 (e depois na porta 987) e
curl
ing 197.45.0.10:80 e 197.45.0.10:987 (o endereço IP real foi alterado para proteger os inocentes). Funcionou duas vezes e não tenho nenhuma configuração de vagrant especial (nenhuma rede pública, nenhuma porta encaminhada) e, embora eu tenha algumas portas encaminhadas via PuTTY, não tenho as portas 80 e 987 encaminhadas. Então, talvez tente usar o endereço IP local ou público da máquina host.E se você quiser acessar (ssh into) uma instância vagrant guest de outra, poderá ativar
public_network
e encaminhar a partir da porta 22 daVagrantfile
seguinte maneira:Então, desde que essa porta esteja aberta (por exemplo, faça mais um encaminhamento de porta na configuração do roteador), você poderá acessar essa máquina de qualquer lugar, até do mundo exterior.
fonte