J'ai un transfert de port mis en place pour vagabond
Vagrant.configure("2") do |config|
config.vm.box = "centOS"
config.vm.network :forwarded_port, guest: 80, Host: 80
config.vm.network :forwarded_port, guest: 8443, Host: 8443
config.vm.network :forwarded_port, guest: 8443, Host: 9443
config.vm.network :forwarded_port, guest: 8445, Host: 8445
config.vm.network :forwarded_port, guest: 8000, Host: 8000
config.vm.hostname = "www.vagrant.com"
end
Le port 80 est ouvert depuis ma boîte virtuelle vagabonde
[vagrant@www ~]$ nmap -sT 0.0.0.0 -p 80
Starting Nmap 5.51 ( http://nmap.org ) at 2013-07-02 22:25 UTC
Nmap scan report for 0.0.0.0
Host is up (0.000063s latency).
PORT STATE SERVICE
80/tcp open http
Mais il est fermé de ma machine hôte
Ben-Fischer:~ bfischer$ nmap -sT 0.0.0.0 -p 80
Starting Nmap 6.25 ( http://nmap.org ) at 2013-07-02 17:38 CDT
Nmap scan report for 0.0.0.0
Host is up (0.000086s latency).
PORT STATE SERVICE
80/tcp closed http
Rien d'autre n'écoute sur le port 80 de mon ordinateur hôte
Ben-Fischer:~ bfischer$ Sudo lsof -n -i4TCP:80 | grep LISTEN
[no output]
Iptables est éteint, tout comme mon pare-feu Mac
[vagrant@www ~]$ Sudo service iptables stop
Et tous les autres ports transférés fonctionnent correctement (8443,9443,8445,8000)
La boîte est une image de vagrant, centOS 6.3 avec le chef.
Alors ... pourquoi je ne peux pas me connecter au port 80 de ma machine locale?
Je ne pense pas que vous puissiez transférer aux ports de l'hôte <1024, à moins que VirtualBox ne soit exécuté en tant que root
sur l'hôte.
Le Manuel VirtualBox dit ceci à propos de la limitation de mode NAT:
Transfert des ports d’hôte <1024 impossible:
Sur les hôtes basés sur Unix (Linux, Solaris, Mac OS X, par exemple), il est impossible de se connecter aux ports inférieurs à 1024 à partir d’applications non exécutées par root. Par conséquent, si vous essayez de configurer un tel transfert de port, la VM refusera de démarrer.
Ces limitations n'affectent normalement pas l'utilisation du réseau standard. Mais la présence de NAT a des effets subtils qui peuvent interférer avec les protocoles qui fonctionnent normalement. Un exemple est NFS, où le serveur est souvent configuré pour refuser les connexions de ports non privilégiés (c'est-à-dire les ports inférieurs à 1024).
La réponse de Terry diagnostiqua correctement le problème. Voici ma solution:
Au lieu d'exécuter VirtualBox en tant que root, redirigez le port deux fois. Configurez vagrant pour transférer l'hôte: 8080 vers l'invité: 80. Combinez cela avec des règles de transfert de port sur la machine hôte (à l'aide de l'utilitaire ipfw), de sorte que 80 passe à 8080 sur la machine hôte. Ensuite, 8080 sera renvoyé à 80 sur la machine invitée.
Cela semble compliqué, mais cet article décrit l'installation plus clairement http://www.dmuth.org/node/1404/web-development-port-80-and-443-vagrant
SSH est une alternative à l’utilisation d’ipfw, que je n’avais pas installée sur ma machine (Arch Linux).
Si vous exécutez le serveur Web sur le port 80 de l'invité, vous pouvez exécuter une redirection de port en arrière-plan à l'aide de SSH.
Sudo ssh -p 2222 -gNfL 80:localhost:80 vagrant@localhost -i ~/.vagrant.d/insecure_private_key
METTRE À JOUR:
ipfw
est obsolète depuis OS X Mavericks. Vous devriez utiliser pfctl
à la place. J'ai écrit un article qui explique en détail comment y parvenir:
http://salvatore.garbesi.com/vagrant-port-forwarding-on-mac/
Sur Mac OS X via un terminal:
Sudo ipfw ajouter 100 fwd 127.0.0.1,8080 tcp de n'importe qui à moi 80 dans
_ {Ceci redirigera tout le trafic entrant entre 127.0.0.1:80 et 127.0.0.1:8080} </ s>
Vous pouvez utiliser un adaptateur de pont, puis pointer sur l'adresse IP locale au lieu d'utiliser localhost . Comme cela peut varier en fonction de l'hôte (comme l'adresse IP locale utilisée, etc.), je mets tout dans un config.yml
externe fichier.
# ...
require 'yaml'
current_dir = File.dirname(File.expand_path(__FILE__))
configs = YAML.load_file("#{current_dir}/config.yml")
vagrant_config = configs['config'][configs['config']['use']]
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# http://docs.vagrantup.com/v2/virtualbox/networking.html
config.vm.network vagrant_config['vm']['network_type'],
ip: vagrant_config['vm']['network_ip'],
bridge: vagrant_config['vm']['network_bridge'],
virtualbox__intnet: vagrant_config['vm']['network_intnet']
config.vm.network "forwarded_port",
guest: 80,
Host: vagrant_config['http_server']['Host_port']
# ...
Suit le fichier config.yml:
config:
use: "public"
private: # this is the old configuration that doesn't let you forward on port 80
vb:
cpus: 2
memory: 4096
vm:
network_type: "private_network"
network_ip: "192.168.33.10"
network_intnet: true
network_bridge: ""
synced_folder: "/home/francesco/whatever/vagrant-synced-folder"
http_server:
Host_port: 8080
public: # here follows the new bridged configuration that let you use port 80!
vb:
cpus: 2
memory: 4096
vm:
network_type: "public_network"
network_ip: "192.168.1.123"
network_intnet: false
network_bridge: "eth0" # or whatever is your adapter name!
synced_folder: "/home/francesco/whatever/vagrant-synced-folder"
http_server:
Host_port: 80
Ensuite, allez simplement à http://192.168.1.123:80/
:-)
Suite à la réponse de @ sgarbesi, ipfw a bien été déprécié à compter de OS X Mavericks. Malheureusement, je n'ai pas pu accéder à la solution qu'il a publiée car le lien semble être rompu.
Il est toutefois crédité dans la solution décrite ici: https://www.danpurdy.co.uk/web-development/osx-yosemite-port-forwarding-for-vagrant/
J'inscris ici la solution par souci d'exhaustivité, dans l'espoir d'aider une personne:
Ajoutez ce qui suit à votre Vagrantfile, comme indiqué dans la Documentation Vagrant :
config.vm.network "forwarded_port", guest: 80, Host: 8080
config.vm.network "forwarded_port", guest: 443, Host: 4443
Pour installer vagrant-triggers, vous devez naviguer dans une fenêtre de terminal jusqu'au dossier où votre fichier Vagrantfile est conservé et exécuter la commande suivante:
vagrant plugin install vagrant-triggers
Ajoutez ce qui suit à votre Vagrantfile:
config.trigger.after [:provision, :up, :reload] do
system('echo "
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 443 -> 127.0.0.1 port 4443
" | Sudo pfctl -ef - > /dev/null 2>&1; echo "==> Fowarding Ports: 80 -> 8080, 443 -> 4443 & Enabling pf"')
end
config.trigger.after [:halt, :destroy] do
system("Sudo pfctl -df /etc/pf.conf > /dev/null 2>&1; echo '==> Removing Port Forwarding & Disabling pf'")
end
Cela lie les ports 80 et 443 aux ports 8080 et 4443 respectivement sur Vagrant Provision, up and reload et l’élimine en mode arrêt ou destruction. Notez que pf n’est pas activé par défaut sous OSX, nous passons donc l’indicateur -e lorsque nous ajoutons les règles pour activer pf et l’indicateur -d pour le désactiver à nouveau lorsque nous supprimons la redirection de port.
Vous pouvez configurer la redirection de port dans VirtualBox:
Votre VM -> Paramètres -> Réseau -> Avancé -> Transfert de ports
Ici, vous pouvez ajouter les ports dont vous avez besoin.