¿Cómo permitir conexiones remotas a Flask?

30

Dentro del sistema, ejecutándose en una máquina virtual, puedo acceder al servidor en ejecución en 127.0.0.1:5000.

Aunque la dirección 'remota' de la máquina virtual es 192.168.56.101 (ping y ssh funcionan bien), no puedo acceder al servidor con 192.168.50.101:5000 ni desde la máquina virtual ni desde la máquina local.

Supongo que hay algo que impide las conexiones remotas.

Aquí está / etc / network / interfaces:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

Ufw está inactivo.

¿Cómo soluciono este problema?

Ilya Smagin
fuente

Respuestas:

48

En primer lugar, asegúrese de que su servidor HTTP esté escuchando en 192.168.50.101:5000o en todas partes ( 0.0.0.0:5000) verificando la salida de:

netstat -tupln | grep ':5000'

Si no es así, consulte la documentación de Flask para vincular a una dirección que no sea localhost.

Si es así, permita el tráfico usando iptables:

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

De la documentación de Flask:

Servidor visible externamente Si ejecuta el servidor, notará que solo se puede acceder al servidor desde su propia computadora, no desde cualquier otro en la red. Este es el valor predeterminado porque en el modo de depuración, un usuario de la aplicación puede ejecutar código Python arbitrario en su computadora.

Si ha desactivado la depuración o confía en los usuarios de su red, puede hacer que el servidor esté disponible públicamente simplemente cambiando la llamada del run()método para que se vea así:

app.run(host='0.0.0.0')
Marcin Kaminski
fuente
1) la salida es 127.0.0.1:5000 0.0.0.0:* ESCUCHAR. ¿Esto significa que el servidor no escucha las direcciones de otros hosts locales? 2) Intenté ufw allow 5000, no hay resultado
Ilya Smagin
Es por eso que sugerí mirar los documentos del Flask para configurarlo para escuchar en todas las direcciones. ¿Lo has visto? Permitirlo solo a través del firewall no lo solucionará.
Marcin Kaminski
Sí, gracias, lo entiendo, ya estoy buscando. Ya utilicé localtunnel (sé que es demasiado, pero funciona). Solo trato de entender qué significa la salida de netstat "127.0.0.1:5000 0.0.0.0:* LISTEN".
Ilya Smagin
No necesita localtunnel :) Lo que muestra la salida de netstat es que su servidor HTTP solo acepta conexiones desde su máquina local. Parece que necesita cambiar la variable SERVER_NAME en la configuración de Flask.
Marcin Kaminski
2
¡Creé una cuenta aquí solo para marcar la pregunta como favorita y votar esta respuesta!
Hephaestus
6

La mejor manera de hacerlo

flask run --host=0.0.0.0
Hassaan
fuente
4

Acabo de tener el mismo problema. Para resolverlo, actualicé la forma de ejecutar la aplicación:

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

Usar host = 0.0.0.0 me permite acceder a mi aplicación a través de mi red local.

Alex andre
fuente