Come consentire connessioni remote a Flask?


30

All'interno del sistema, in esecuzione su una macchina virtuale, posso accedere al server in esecuzione su 127.0.0.1:5000.

Sebbene l'indirizzo "remoto" di VM sia 192.168.56.101 (ping e ssh funzionano correttamente), non riesco ad accedere al server con 192.168.50.101:5000 né dalla macchina virtuale né da quella locale.

Immagino che ci sia qualcosa che impedisce le connessioni remote.

Ecco / etc / network / interfaces:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

uww è inattivo.

Come posso risolvere questo problema?

Risposte:


48

Prima di tutto, assicurati che il tuo server HTTP sia in ascolto su 192.168.50.101:5000o ovunque ( 0.0.0.0:5000) controllando l'output di:

netstat -tupln | grep ':5000'

In caso contrario, consultare la documentazione di Flask per collegarsi a un indirizzo diverso da localhost.

In tal caso, consenti il ​​traffico utilizzando iptables:

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

Dalla documentazione di Flask:

Server visibile esternamente Se si esegue il server, si noterà che il server è accessibile solo dal proprio computer, non da qualsiasi altro nella rete. Questo è il valore predefinito perché in modalità debug un utente dell'applicazione può eseguire codice Python arbitrario sul tuo computer.

Se il debug è disabilitato o gli utenti della rete sono affidabili, è possibile rendere il server pubblicamente disponibile semplicemente modificando la chiamata del run()metodo in questo modo:

app.run(host='0.0.0.0')

1) l'uscita è 127.0.0.1:5000 0.0.0.0:* ASCOLTA. Questo significa che il server non ascolta gli indirizzi di altri host locali? 2) Ho provato a consentire 5000, nessun risultato
Ilya Smagin

Questo è il motivo per cui ho suggerito di consultare i documenti di Flask per configurarlo per l'ascolto su tutti gli indirizzi. L'hai visto? Consentirlo attraverso il firewall da solo non lo risolverà.
Marcin Kaminski,

Sì, grazie, ho capito, già guardando. Localtunnel già usato (so che è troppo, ma funziona). Sto solo cercando di capire cosa significa l'output di Netstat "127.0.0.1:5000 0.0.0.0:* ASCOLTA".
Ilya Smagin,

Non hai bisogno di localtunnel :) Ciò che l'output di netstat ti mostra è che il tuo server HTTP accetta solo connessioni dal tuo computer locale. Sembra che tu debba cambiare la variabile SERVER_NAME nella configurazione di Flask.
Marcin Kaminski,

2
Crea un account qui solo per aggiungere la domanda ai preferiti e vota questa risposta!
Efesto,

6

Il modo migliore per farlo

flask run --host=0.0.0.0

4

Ho appena avuto lo stesso problema. Per risolverlo, ho aggiornato il modo di eseguire l'applicazione:

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

Usando host = 0.0.0.0 fammi accedere alla mia app attraverso la mia rete locale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.