web-dev-qa-db-fra.com

Le vagabond ne transmettra PAS SEULEMENT le port 80

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?

19
The Q CS or GS

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).

34
Terry Wang

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

22
The Q CS or GS

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
12
Dave Parrish

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>

7
sgarbesi

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/ :-)

3
Francesco Casula

Redirection de port pour Vagrant sur OSX: ipfw est amorti

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:

Configurer la redirection de port sur la VM

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

Installer des déclencheurs vagabonds

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

Utiliser des déclencheurs vagabonds pour activer automatiquement le transfert de port

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.

3
colin

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.

1
redflasher