Je travaille sur une architecture de services Web. J'ai un logiciel dont j'ai besoin pour exécuter sur la machine hôte native, pas dans Vagrant. Mais j'aimerais exécuter certains services client sur l'invité.
Le config.vm.forwarded_port
paramètre de Vagrant ouvrira un port sur l'hôte et enverra les données à l'invité. Mais comment puis-je ouvrir un port sur l'invité et envoyer les données à l'hôte? (Il s'agit toujours de la redirection de port, mais dans le sens inverse.)
vagrant
portforwarding
Dan Fabulich
la source
la source
Réponses:
Lorsque vous exécutez
vagrant ssh
, il utilise en fait cette commande sous-jacente:ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key [email protected]
SSH prend en charge les ports de transfert dans la direction souhaitée avec l'
-R guestport:host:hostport
option. Donc, si vous vouliez vous connecter au port12345
sur l'invité et le faire transférerlocalhost:80
, vous utiliseriez cette commande: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]
Comme Eero le commente correctement, vous pouvez également utiliser la commande
vagrant ssh -- -R 12345:localhost:80
, qui a le même effet dans une commande beaucoup plus concise.la source
vagrant ssh -- -R 12345:localhost:80
Ceci suit la syntaxe de l'option ssh -R [bind_address:] port: host: hostport , où le premier numéro est le numéro de port à écouter à l'intérieur de la machine invitée, et les deux derniers sont l'adresse du service comme visible depuis la machine hôte.vagrant ssh-config | ssh -F /dev/stdin $BOX -R $PORT_VM:localhost:$PORT -N
Dans le livre
Vagrant: Up and Running
(Date de publication: 12 juin 2013), écrit par le créateur de Vagrant, il a mentionné qu'il n'est pas possible pour la machine invitée d'accéder aux services exécutés sur la machine hôte.Au lieu d'utiliser
Forwarded Ports
, vous pouvez configurer un réseau privé en utilisantHost-Only Networks
.Avantages de l'utilisation
Host-Only Networks
deForwarded Ports
Les machines invitées peuvent accéder aux services exécutés sur la machine hôte
Cette fonctionnalité résoudrait votre problème.
Les ordinateurs invités peuvent accéder aux services exécutés sur d'autres ordinateurs invités
Cette fonction est très utile pour séparer les services sur plusieurs machines afin d'imiter plus précisément un environnement de production.
Sécurise
Les machines extérieures n'ont aucun moyen d'accéder aux services exécutés sur les machines invitées
Moins de travail
Pas besoin de configurer chacun
Forwarded Port
Comment configurer
Host-Only Networks
config.vm.network :"hostonly", "192.168.0.0"
# Vagrant Version # 1config.vm.network :private_network, ip: "192.168.0.0"
# Vagrant Version # 2Avoir cette ligne dans votre
Vagrantfile
va demander à vagrant de créer un réseau privé qui a une adresse IP statique:192.168.0.0
L'adresse IP de l'hôte est toujours la même adresse IP mais avec le dernier octet en tant que 1. Dans l'exemple précédent, la machine hôte aurait l'adresse IP
192.168.0.1
.la source
Vagrant: Up and Running
), vous pouvez mettre en place un réseau ponté. Sur un réseau ponté, d'autres machines de votre réseau local peuvent accéder à votre machine virtuelle, et vice versa. Mais comme l'adresse IP est attribuée via DHCP, vous devrezifconfig
dans la machine virtuelle pour trouver son adresse IP.192.168.0.0
ne fonctionnait pas - le curling / le ping de la machine hôte entraînait une connexion t / o. L'utilisation de l'adresse de @ Nucleon (cohérente avec la documentation de Vagrant sur le sujet) a fonctionné comme annoncé.config.vm.network :private_network, ip: "192.168.0.0"
et le curling / ping de l'hôte192.168.0.1
entraînait des délais de connexion. Configurer le réseau à192.168.50.4
résoudre, c'est-à-dire l'hôte disponible sur192.168.50.1
.Vous pouvez accéder aux ports de la machine hôte via la passerelle par défaut à l'intérieur du système d'exploitation invité. (Qui a généralement une adresse IP de
10.0.2.2
.)Par exemple, si vous avez un serveur Web fonctionnant sur le port 8000 sur votre machine hôte ...
Vous pouvez y accéder depuis l'intérieur de la VM Vagrant à
10.0.2.2:8000
(à condition que10.0.2.2
l'adresse IP de la passerelle par défaut de l'invité soit fournie ):Pour trouver l'adresse IP de la passerelle par défaut dans le système d'exploitation invité, exécutez
netstat -rn
(ouipconfig
sur un invité Windows) et recherchez la ligne avec une adresse IP de destination0.0.0.0
(ou le champ intitulé «Passerelle par défaut» sous Windows):Vous pouvez extraire cette IP par programme avec
netstat -rn | grep "^0.0.0.0 " | tr -s ' ' | cut -d " " -f2
.Sources: Comment se connecter avec l'hôte PostgreSQL à partir de la machine virtuelle vagrant ; Se connecter à la machine hôte à partir d'un OS invité VirtualBox?
la source
ifconfig
etip address
je ne me procurais pas ce dont j'avais besoin, mais je l'ainetstat -rn
fait.Ajoutez ce qui suit à votre
~/.ssh/config
sur la machine hôte:Il vous permet d'accéder à un service sur le port de la machine hôte 52698 à partir de Vagrant, tant que vous vous êtes connecté via
vagrant ssh
.Vous pouvez confirmer que cela fonctionne en exécutant
netstat -lt
sur vagrant VM et en prenant une note sur les lignes suivantes:la source
Je peux accéder aux services exécutés sur ma machine hôte via son adresse IP locale (et non son adresse de bouclage). J'ai testé en créant un serveur http sur le port 80 (puis sur le port 987) et en
curl
ing 197.45.0.10:80 et 197.45.0.10:987 (l'adresse IP réelle a été modifiée pour protéger les innocents). Cela a fonctionné les deux fois, et je n'ai pas de configuration spéciale de vagabond (pas de réseau_public, pas de port_fourni) et bien que certains ports soient transmis via PuTTY, je n'ai pas les ports 80 et 987 transmis. Essayez donc peut-être d'utiliser l'adresse IP locale ou publique de la machine hôte.Et si vous souhaitez accéder (ssh à) une instance de vagrant invité à partir d'une autre, vous pouvez activer
public_network
ainsi que la redirection à partir du port 22 de la manièreVagrantfile
suivante:Ensuite, tant que ce port est ouvert (c'est-à-dire faire un peu plus de redirection de port dans la configuration de votre routeur), vous pouvez accéder à cette machine de n'importe où, même du monde extérieur.
la source