Comment autoriser les connexions à distance à Flask?

30

À l'intérieur du système, fonctionnant sur une machine virtuelle, je peux accéder au serveur en cours d'exécution à 127.0.0.1:5000.

Bien que l'adresse «distante» du vm soit 192.168.56.101 (ping et ssh fonctionnent correctement), je ne peux pas accéder au serveur avec 192.168.50.101:5000 ni depuis la machine virtuelle ni depuis la machine locale.

Je suppose que quelque chose empêche les connexions à distance.

Voici / etc / network / interfaces:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

ufw est inactif.

Comment résoudre ce problème?

Ilya Smagin
la source

Réponses:

48

Tout d'abord - assurez-vous que votre serveur HTTP écoute sur 192.168.50.101:5000ou partout ( 0.0.0.0:5000) en vérifiant la sortie de:

netstat -tupln | grep ':5000'

Si ce n'est pas le cas, consultez la documentation de Flask pour vous lier à une adresse autre que localhost.

Si c'est le cas, autorisez le trafic à l'aide d'iptables:

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

De la documentation de Flask:

Serveur visible de l'extérieur Si vous exécutez le serveur, vous remarquerez que le serveur n'est accessible que depuis votre propre ordinateur, et non depuis un autre du réseau. Il s'agit de la valeur par défaut car en mode débogage, un utilisateur de l'application peut exécuter du code Python arbitraire sur votre ordinateur.

Si le débogage est désactivé ou que vous faites confiance aux utilisateurs de votre réseau, vous pouvez rendre le serveur accessible au public en changeant simplement l'appel de la run()méthode pour qu'il ressemble à ceci:

app.run(host='0.0.0.0')
Marcin Kaminski
la source
1) la sortie est 127.0.0.1:5000 0.0.0.0:* ECOUTER. Cela signifie que le serveur n'écoute pas les adresses des autres hôtes locaux? 2) J'ai essayé ufw allow 5000, aucun résultat
Ilya Smagin
C'est pourquoi j'ai suggéré de regarder les documents du Flask pour le configurer pour écouter sur toutes les adresses. L'avez-vous regardé? Le permettre à travers le pare-feu seul ne le résoudra pas.
Marcin Kaminski
Oui, merci, je comprends, déjà à la recherche. Déjà utilisé localtunnel (je sais que c'est trop, mais ça marche). J'essaie juste de comprendre ce que signifie la sortie de netstat "127.0.0.1:5000 0.0.0.0:* LISTEN".
Ilya Smagin du
Vous n'avez pas besoin de localtunnel :) Ce que la sortie netstat vous montre, c'est que votre serveur HTTP accepte uniquement les connexions de votre machine locale. Il semble que vous deviez changer la variable SERVER_NAME dans la configuration de Flask.
Marcin Kaminski
2
J'ai créé un compte ici juste pour mettre la question en favori et voter pour cette réponse!
Hephaestus
6

La meilleure façon de le faire

flask run --host=0.0.0.0
Hassaan
la source
4

Je viens d'avoir le même problème. Pour le résoudre, j'ai mis à jour la façon d'exécuter l'application:

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

En utilisant host = 0.0.0.0, je peux accéder à mon application via mon réseau local.

Alex andre
la source