117 votes

Transfert de port inverse vagabond?

Je travaille sur une architecture de services Web. Certains logiciels doivent être exécutés sur la machine hôte native, mais pas sur Vagrant. Mais je voudrais exécuter quelques services à la clientèle sur l'invité.

Le paramètre config.vm.forwarded_port vagabond 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 d'une redirection de port, mais en sens inverse.)

129voto

wlritchi Points 488

Lorsque vous exécutez vagrant ssh, c'est en fait à l'aide de cette commande:

ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key vagrant@127.0.0.1

SSH prend en charge la redirection de ports dans la direction que vous voulez avec l' -R guestport:host:hostport option. Donc, si vous voulez vous connecter au port 12345 sur l'invité et l'ont transmis localhost:80, vous pouvez utiliser 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 vagrant@127.0.0.1

Comme Eero correctement les commentaires, vous pouvez également utiliser la commande vagrant ssh -- -R 12345:localhost:80, qui a le même effet dans une beaucoup plus concis commande.

98voto

Mingyu Points 3874

Dans le livre, Vagrant: Up and Running (Pub. date: 12 juin 2013), écrit par le créateur de Vagabond, il a mentionné qu'il n'est pas possible pour les clients de la machine pour accéder à des services en cours d'exécution sur la machine hôte.

Au lieu d'utiliser Forwarded Ports, vous pouvez configurer un réseau privé à l'aide de Host-Only Networks.

  • Avantages de l'utilisation de Host-Only Networks sur Forwarded Ports

    1. Invité de la machine peut accéder aux services en cours d'exécution sur la machine hôte

      Cette fonctionnalité permettrait de résoudre votre problème.

    2. Invité de la machine peut accéder aux services en cours d'exécution sur les autres hôtes de la machine

      Cette fonctionnalité est très utile pour séparer les services sur plusieurs machines pour mieux imiter environnement de production.

    3. Sécurisé

      En dehors des machines n'ont pas les moyens d'accéder aux services en cours d'exécution sur l'ordinateur invité

    4. Moins de travail

      Pas besoin de configurer chaque Forwarded Port


  • Comment configurer Host-Only Networks

    config.vm.network :"hostonly", "192.168.0.0" # Vagrant Version #1

    config.vm.network :private_network, ip: "192.168.0.0" # Vagrant Version #2

    Avoir cette ligne dans votre Vagrantfile demandera vagrant pour 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 l'octet final 1. Dans l'exemple précédent, la machine hôte aurait l'adresse IP 192.168.0.1.

2voto

B T Points 4868

Je peux accéder à des services en cours d'exécution sur mon ordinateur hôte par l'intermédiaire de son adresse IP locale (pas son adresse de bouclage). J'ai testé en créant un serveur http sur le port 80 (et puis sur le port 987) et curling 197.45.0.10:80 et 197.45.0.10:987 (adresse ip réelle changés pour protéger les innocents). Il a travaillé deux fois, et je n'ai rien de spécial vagrant configuration (pas de public_network, pas de forwarded_port) et même si j'ai quelques ports transmis via PuTTY, je n'ai pas les ports 80 et 987 transmis. Alors peut-être essayer d'utiliser la machine hôte local ou l'adresse IP publique.

Et si vous voulez un accès ssh (en) un invité vagrant exemple à partir d'un autre, vous pouvez activer public_network ainsi que le transfert de port 22 en Vagrantfile comme ceci:

config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 22, host: 2200

Alors tant que ce port est ouvert (c'est à dire faire un peu plus de la redirection de port dans votre routeur configuration) vous pouvez accéder à la machine à partir de n'importe où, même à l'extérieur du monde.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X