Соединение 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 по умолчанию разрешает все. Я также отключил брандмауэр на моей главной машине. Как я могу понять это?
Ответы
Ответ 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
Доза кто-нибудь знает как это решить?