Como permitir conexões remotas ao Flask?

30

Dentro do sistema, executando na máquina virtual, eu posso acessar o servidor em execução em 127.0.0.1:5000.

Embora o endereço 'remoto' da vm seja 192.168.56.101 (o ping e o ssh funcionam bem), não consigo acessar o servidor com 192.168.50.101:5000 nem na máquina virtual nem na local.

Eu acho que há algo impedindo conexões remotas.

Aqui está o / etc / network / interfaces:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

O ufw está inativo.

Como corrijo esse problema?

Ilya Smagin
fonte

Respostas:

48

Primeiro de tudo - verifique se o servidor HTTP está escutando em 192.168.50.101:5000ou em qualquer lugar ( 0.0.0.0:5000), verificando a saída de:

netstat -tupln | grep ':5000'

Caso contrário, consulte a documentação do Flask para vincular a um endereço diferente de localhost.

Se for, permita o tráfego usando o iptables:

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

Da documentação do Flask:

Servidor externamente visível Se você executar o servidor, notará que o servidor só pode ser acessado no seu próprio computador, não em qualquer outro na rede. Esse é o padrão, porque no modo de depuração, um usuário do aplicativo pode executar código Python arbitrário no seu computador.

Se a depuração foi desativada ou confia nos usuários da sua rede, você pode disponibilizar o servidor publicamente, simplesmente alterando a chamada do run()método para que fique assim:

app.run(host='0.0.0.0')
Marcin Kaminski
fonte
1) a saída é 127.0.0.1:5000 0.0.0.0:* LISTEN. Isso significa que o servidor não escuta os endereços de outros localhosts? 2) Eu tentei o ufw allow 5000, sem resultado
Ilya Smagin
É por isso que sugeri examinar os documentos do Flask para configurá-lo para ouvir em todos os endereços. Você já olhou? Permitir apenas através do firewall não o corrigirá.
Marcin Kaminski
Sim, obrigado, já entendi. Já usei o localtunnel (sei que é demais, mas funciona). Apenas tentando entender o que a saída do netstat "127.0.0.1:5000 0.0.0.0:* LISTEN" significa.
Ilya Smagin
Você não precisa do localtun :) O que a saída netstat mostra é que seu servidor HTTP está aceitando apenas conexões da sua máquina local. Parece que você precisa alterar a variável SERVER_NAME na configuração do Flask.
Marcin Kaminski
2
Criou uma conta aqui apenas para adicionar um favorito à pergunta e fazer uma votação positiva desta resposta!
Hefesto
6

A melhor maneira de fazer isso

flask run --host=0.0.0.0
Hassaan
fonte
4

Acabei de ter o mesmo problema. Para resolvê-lo, atualizei a maneira de executar o aplicativo:

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

Usando host = 0.0.0.0, permita-me acessar meu aplicativo através da minha rede local.

Alex andre
fonte