Как разрешить удаленные подключения к Flask?

30

Внутри системы, работающей на виртуальной машине, я могу получить доступ к работающему серверу по адресу 127.0.0.1:5000.

Хотя «удаленный» адрес виртуальной машины - 192.168.56.101 (ping и ssh работают нормально), я не могу получить доступ к серверу с 192.168.50.101:5000 ни с виртуальной машины, ни с локальной.

Я полагаю, что-то мешает удаленным подключениям.

Вот / etc / network / interfaces:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

UFW неактивен.

Как мне решить эту проблему?

Илья Смагин
источник

Ответы:

48

Прежде всего - убедитесь, что ваш HTTP-сервер прослушивает 192.168.50.101:5000или везде ( 0.0.0.0:5000), проверив вывод:

netstat -tupln | grep ':5000'

Если это не так, обратитесь к документации Flask для привязки к адресу, отличному от localhost.

Если это так, разрешите трафик, используя iptables:

iptables -I INPUT -p tcp --dport 5000 -j ACCEPT

Из документации Flask:

Внешний видимый сервер Если вы запустите сервер, вы заметите, что сервер доступен только с вашего собственного компьютера, а не с любого другого в сети. Это значение по умолчанию, потому что в режиме отладки пользователь приложения может выполнить произвольный код Python на вашем компьютере.

Если вы отключили отладку или доверяете пользователям вашей сети, вы можете сделать сервер общедоступным, просто изменив вызов run()метода следующим образом:

app.run(host='0.0.0.0')
Марчин Камински
источник
1) выход 127.0.0.1:5000 0.0.0.0:* LISTEN. Это означает, что сервер не слушает адреса других локальных хостов? 2) Я попробовал ufw allow 5000, безрезультатно
Илья Смагин
Вот почему я предложил просмотреть документы Flask, чтобы настроить его на прослушивание всех адресов. Вы смотрели на это? Разрешение через брандмауэр само по себе не исправит это.
Марцин Камински
Да, спасибо, я понял, уже смотрю. Уже используется localtunnel (я знаю, что это слишком много, но это работает). Просто пытаюсь понять, что означает вывод netstat "127.0.0.1:5000 0.0.0.0:* LISTEN".
Илья Смагин
Вам не нужен localtunnel :) Что показывает вывод netstat, так это то, что ваш HTTP-сервер принимает соединения только с вашего локального компьютера. Похоже, вам нужно изменить переменную SERVER_NAME в конфигурации Flask.
Марцин Камински
2
Здесь создали учетную запись, чтобы добавить вопрос в избранное и ответить на этот вопрос!
Гефест
6

Лучший способ сделать это

flask run --host=0.0.0.0
Хассан
источник
4

У меня только что была такая же проблема. Чтобы решить эту проблему, я обновил способ запуска приложения:

 app.run(debug=True,host='0.0.0.0')

Используя host = 0.0.0.0, позвольте мне получить доступ к моему приложению через мою локальную сеть.

Алекс Андре
источник