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

Соединение Reset при переадресации портов с помощью Vagrant

У меня есть Vagrant/VirtualBox, работающий под ОС Ubuntu 12.04 LTS. Я настроил Vagrant переслать гостевой порт 8000 на мой хост-порт 8888.

[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 8000 => 8888 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use! 

Когда виртуальная машина запускается, я запускаю сервер Django dev на порту 8000.

Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Хорошо, я могу положить его в фоновом режиме, и я даже могу curl localhost:8000 и получить некоторый вывод с сервера

<div id="explanation">
  <p>
    You're seeing this message because you have <code>DEBUG = True</code> in your
    Django settings file and you haven't configured any URLs. Get to work!
  </p>
</div>

Но когда я пытаюсь поразить сервер с моей хост-машины с помощью Firefox/Chrome/Telnet, я получаю Connection Reset/Connection Lost/ERR_CONNECTION_RESET и т.д.

Сначала я подумал, что это может быть какая-то вещь iptables, но, оказывается, Ubuntu по умолчанию разрешает все. Я также отключил брандмауэр на моей главной машине. Как я могу понять это?

4b9b3361

Ответ 1

У меня был Django, прослушивающий 127.0.0.1:8000 (по умолчанию)

Как объясняется в Mitchell, ответьте здесь: Переадресация порта Vagrant не работает Я должен был слушать 0.0.0.0. Вот цитата его ответа:

Я хотел добавить дополнительную заметку, которая часто возникает из-за сервер в VM, потому что он связывается с 127.0.0.1, который является loopback. Вы захотите убедиться, что сервер привязан к 0.0.0.0, так что все интерфейсы могут получить к нему доступ.

Если вы используете Django, вы хотите запустить dev-сервер следующим образом: ./manage.py runserver 0.0.0.0:8000

Ответ 2

1). Проект должен выполняться как python manage.py runserver 0.0.0.0:8000.
если это не исправить вашу проблему, то

2). Откройте свой Vagrantfile и добавьте config.vm.network "forwarded_port", guest: 8000, host: 8001 это после
Строка # config.vm.network "forwarded_port", guest: 80, host: 8080

Эта работа в моем случае;)

Примечание. Эта информация о прямом порту, предоставляемая при запуске vagrant up
....
==> default: Forwarding ports...

default: 8000 => 8001 (adapter 1)
    default: 22 => 2222 (adapter 1)

Ответ 3

Другое решение - использовать ssh tunneling с vagrant. Откройте терминал и cd в каталог, где находится ваш Vagrantfile. Предполагая, что ваш vm запущен и работает (vagrant up), выполните следующую команду.

# save vagrant ssh config to a file named 'vagrant-ssh-config'
vagrant ssh-config > vagrant-ssh-config

Затем перенаправьте гостевой порт 8000 на хост.

ssh -L 8000:127.0.0.1:8000 -F vagrant-ssh-config default

Теперь просто откройте браузер и проверьте 127.0.0.1:8000.

Обратите внимание, что предыдущая команда также откроет оболочку на сервере ssh. Если вы хотите открыть ssh-туннель без оболочки на ssh-сервере, добавьте -N

ssh -N -L 8000:127.0.0.1:8000 -F vagrant-ssh-config default

Обновление: 4 октября 2019 г.

Более простое решение для переадресации порта

vagrant ssh -- -N -L 8000:127.0.0.1:8000

Протестировано на Vagrant 2.0.2, но может работать и для более старых версий.

Ответ 4

Мы сталкиваемся с той же проблемой, но с IIS Доза кто-нибудь знает как это решить?