Как разрешить удаленные подключения к 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
Здесь создали учетную запись, чтобы добавить вопрос в избранное и ответить на этот вопрос!
Гефест


4

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.