Неудача разрешения IP мультипасса

Вопрос или проблема

Я пытаюсь развернуть базовое приложение Flask на своем VM Ubuntu через multipass. Однако я не могу получить доступ к веб-сайту по IP-адресу. Но то же самое работает для localhost.

flask run
 * Обслуживание приложения Flask 'microblog.py'
 * Режим отладки: отключен
ПРЕДУПРЕЖДЕНИЕ: Это сервер разработки. Не используйте его в производственном развертывании. Вместо этого используйте производственный WSGI-сервер.
 * Работа на http://127.0.0.1:5000
Нажмите CTRL+C, чтобы выйти

curl работает с localhost и 127.0.0.1, но не с назначенным публичным IP-адресом

ubuntu@mysql:~$ curl -X GET "http://192.168.1.178:5000/"
curl: (7) Не удалось подключиться к 192.168.1.178 порт 5000 после 0 мс: Подключение отклонено
ubuntu@mysql:~$ curl -X GET "http://localhost:5000/"
Привет, мир!
ubuntu@mysql:~$ curl -X GET "http://127.0.0.1:5000/"
Привет, мир!

Я включил ufw для порта 5000

ubuntu@mysql:~$ sudo ufw status
Статус: активен

Куда                       Действие     Откуда
--                         ------       ----
Apache Full                ДА          Везде                  
80/tcp                     ДА          Везде                  
443                        ДА          Везде                  
22/tcp                     ОГРАНИЧИТЬ   Везде                  
5000                       ДА          Везде                  
Apache Full (v6)           ДА          Везде (v6)             
80/tcp (v6)                ДА          Везде (v6)             
443 (v6)                   ДА          Везде (v6)             
22/tcp (v6)                ОГРАНИЧИТЬ   Везде (v6)             
5000 (v6)                  ДА          Везде (v6)             

ubuntu@mysql:~$ netstat -an |grep :5000
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:47376         127.0.0.1:5000          TIME_WAIT  ```

Ответ или решение

Когда вы сталкиваетесь с проблемой доступа к веб-приложению Flask через IP-адрес в Ubuntu VM с использованием Multipass, но при этом можете получить доступ через localhost, следует рассмотреть несколько ключевых аспектов конфигурации вашей сетевой среды и самого приложения.

1. Проблема конфигурации Flask

Ваши выводы показывают, что Flask работает только на локальном интерфейсе (127.0.0.1). Это означает, что ваше приложение доступно только для локальных соединений. Чтобы решить эту проблему, запустите Flask-приложение, указав, что он должен слушать на всех интерфейсах. Вы можете сделать это, заменив команду:

flask run

на

flask run --host=0.0.0.0

Это позволит вашему приложению принимать соединения как с локального интерфейса, так и с внешних IP-адресов.

2. Проверка брандмауэра (ufw)

Вы указали, что включили UFW (Uncomplicated Firewall) и разрешили трафик на порт 5000. Однако, стоит убедиться, что правила безопасности действительно применяются корректно. После внесения изменений в конфигурацию UFW, выполните команду:

sudo ufw status verbose

Это выдаст развернутый отчет о всех текущих правилах, убедившись, что ваше правило для порта 5000 активно.

3. Использование netstat

Вы уже проверили, что Flask действительно прослушивает 127.0.0.1:5000. Чтобы убедиться, что ваше приложение теперь прослушивает на всех интерфейсах, после изменения команды запуска перемещение к 0.0.0.0:5000, снова выполните команду:

netstat -an | grep :5000

Ожидается, что теперь в списке появится строка, аналогичная следующей:

tcp        0      0 0.0.0.0:5000          0.0.0.0:*               LISTEN     

4. Тестирование доступа

После того, как вы убедились, что Flask слушает на всех интерфейсах и UFW настроен корректно, попробуйте снова выполнить команду curl для доступа к вашему приложению по IP-адресу:

curl -X GET "http://192.168.1.178:5000/"

Это должно успешно вернуть ответ от вашего приложения.

5. Окончательное тестирование и рекомендации

Если возникли дополнительные трудности, проверьте следующее:

  • Убедитесь, что ваш Flask-приложение работает корректно и оно действительно отвечает на запросы.
  • Попробуйте временно отключить UFW с помощью sudo ufw disable, чтобы исключить вероятность блокировки доступа.
  • Если вы используете какие-либо VPN-соединения или прокси, убедитесь, что они не влияют на соединение.

Заключение

В общем, настройка доступа к веб-приложению Flask в окружении Ubuntu VM с использованием Multipass требует проверки конфигурации самого приложения и управления сетевыми правилами. Настройка Flask для прослушивания на всех интерфейсах и корректная настройка UFW создадут условия для успешного доступа к приложению через IP-адрес.

Оцените материал
Добавить комментарий

Капча загружается...