Подтвердить что ты не робот

Vagrant не будет пересылать ТОЛЬКО порт 80

У меня есть функция переадресации портов для бродяг

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

Порт 80 открыт из моей виртуальной коробки бродяг

[[email protected] ~]$ 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

Но он закрыт с моей главной машины

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

Ничего другого не слушает порт 80 на моей главной машине

Ben-Fischer:~ bfischer$ sudo lsof -n -i4TCP:80 | grep LISTEN
[no output]

Iptables отключены, а также мой брандмауэр mac

[[email protected] ~]$ sudo service iptables stop

И все остальные переадресованные порты работают нормально (8443,9443,8445,8000)

Коробка представляет собой изображение от бродячего, centOS 6.3 с шеф-поваром.

Итак... почему я не могу подключиться к порту 80 с моей локальной машины?

4b9b3361

Ответ 1

Я не думаю, что вы можете переслать хост-порты < 1024, если только VirtualBox не запущен как root на хосте.

VirtualBox Manual говорит об ограничении режима NAT:

Пересылка портов хоста < 1024 невозможно:

На хостах на базе Unix (например, Linux, Solaris, Mac OS X) невозможно подключиться к портам ниже 1024 из приложений, которые не выполняются с помощью root. В результате, если вы попытаетесь настроить такую ​​переадресацию портов, VM откажется запускать.

Эти ограничения обычно не влияют на стандартное использование сети. Но наличие NAT имеет тонкие эффекты, которые могут мешать протоколам, которые обычно работают. Одним из примеров является NFS, где сервер часто настроен на отказ от соединений из не-привилегированных портов (то есть портов ниже 1024).

Ответ 2

Ответ Терри правильно поставил диагноз проблемы. Здесь мое решение:

Вместо того, чтобы запускать VirtualBox как root, дважды переадресовывайте порт. Установите vagrant для пересылки хоста: 8080 для гостей: 80. Объедините это с некоторыми правилами переадресации портов на главной машине (используя утилиту ipfw), чтобы 80 переместился на 8080 на хост-машину. Затем 8080 будет отправлено обратно на 80 на гостевой машине.

Кажется свернутым, но эта статья более подробно описывает установку http://www.dmuth.org/node/1404/web-development-port-80-and-443-vagrant

Ответ 3

Альтернативой использованию ipfw, который я не установил на моей машине (Arch Linux), является SSH.

Если вы используете веб-сервер на порту 80 на гостевом компьютере, вы можете запустить порт в фоновом режиме с помощью SSH.

sudo ssh -p 2222 -gNfL 80:localhost:80 [email protected] -i ~/.vagrant.d/insecure_private_key

Ответ 4

UPDATE:

ipfw устарел от OS X Mavericks. Вместо этого вы должны использовать pfctl. Я написал статью, в которой подробно описывается, как это сделать здесь:

http://salvatore.garbesi.com/vagrant-port-forwarding-on-mac/


<ы > В Mac OS X через терминал:

sudo ipfw добавить 100 fwd 127.0.0.1,8080 tcp от любого ко мне 80 в

Это перенаправит весь входящий трафик на 127.0.0.1:80 до 127.0.0.1:8080

Ответ 5

Вы можете использовать адаптер моста, а затем указывать на локальный IP-адрес вместо использования localhost. Поскольку это может варьироваться в зависимости от хоста (например, используемого локального IP-адреса и т.д.), Я поместил бы все в внешний файл config.yml.

# ...

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']

# ...

Выполняет файл 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

Затем перейдите к http://192.168.1.123:80/: -)

Ответ 6

Вы можете настроить переадресацию портов в VirtualBox:

Ваша виртуальная машина → Настройки → Сеть → Дополнительно → пересылка портов

Здесь вы можете добавить необходимые порты.

Ответ 7

Перенаправление портов для Vagrant в OSX: ipfw обесценивается

В дополнение к ответу @sgarbesi ipfw действительно обесценился как с OS X Mavericks. К сожалению, я не смог получить доступ к решению, которое он опубликовал, поскольку ссылка, похоже, сломана.

Однако он описан в описанном здесь решении: https://www.danpurdy.co.uk/web-development/osx-yosemite-port-forwarding-for-vagrant/

Я вставляю решение здесь для полноты, в надежде, что это кому-то поможет:

Настроить перенос портов на VM

Добавьте в свой Vagrantfile следующее: Документация бродяг:

config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.network "forwarded_port", guest: 443, host: 4443

Установка бранных триггеров

Чтобы установить брандмауэр-триггеры, вы должны перейти в окне терминала в папку, где хранится ваш Vagrantfile, и выполнить следующую команду:

vagrant plugin install vagrant-triggers

Использовать Vagrant Triggers для автоматического включения перенаправления портов

Добавьте в свой 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

Это связывает порты 80 и 443 с портами 8080 и 4443 соответственно с Vagrant Provision, поднимает и перезагружает и удаляет их при остановке или уничтожении. Обратите внимание, что pf не включен по умолчанию в OSX, поэтому мы передаем флаг -e, когда добавляем правила, чтобы включить pf и флаг -d, чтобы отключить его снова, когда мы удалим переадресацию порта.