Wie kann ich Remoteverbindungen zu Flask zulassen?

30

Innerhalb des Systems, das auf einer virtuellen Maschine läuft, kann ich auf den laufenden Server unter zugreifen 127.0.0.1:5000.

Obwohl die 'Remote'-Adresse des VM 192.168.56.101 lautet (Ping und SSH funktionieren einwandfrei), kann ich weder von der virtuellen noch von der lokalen Maschine aus mit 192.168.50.101:5000 auf den Server zugreifen.

Ich denke, es gibt etwas, das Remote-Verbindungen verhindert.

Hier ist / etc / network / interfaces:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

ufw ist inaktiv.

Wie behebe ich dieses Problem?

Ilya Smagin
quelle

Antworten:

48

Stellen Sie zunächst sicher, dass Ihr HTTP-Server auf 192.168.50.101:5000oder überall ( 0.0.0.0:5000) lauscht, indem Sie die Ausgabe von überprüfen:

netstat -tupln | grep ':5000'

Ist dies nicht der Fall, lesen Sie die Dokumentation zu Flask , um eine Bindung an eine andere Adresse als localhost vorzunehmen.

Wenn ja, erlauben Sie den Datenverkehr mit iptables:

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

Aus der Dokumentation von Flask:

Extern sichtbarer Server Wenn Sie den Server ausführen, werden Sie feststellen, dass auf den Server nur von Ihrem eigenen Computer aus zugegriffen werden kann, nicht von einem anderen im Netzwerk. Dies ist die Standardeinstellung, da ein Benutzer der Anwendung im Debugging-Modus beliebigen Python-Code auf Ihrem Computer ausführen kann.

Wenn Sie das Debuggen deaktiviert haben oder den Benutzern in Ihrem Netzwerk vertrauen, können Sie den Server öffentlich zugänglich machen, indem Sie den Aufruf der run()Methode folgendermaßen ändern :

app.run(host='0.0.0.0')
Marcin Kaminski
quelle
1) die Ausgabe ist 127.0.0.1:5000 0.0.0.0:* LISTEN. Dies bedeutet, dass der Server keine anderen Adressen als die lokalen Hosts abhört. 2) Ich habe versucht, ufw erlauben 5000, kein Ergebnis
Ilya Smagin
Aus diesem Grund habe ich vorgeschlagen, in den Dokumenten der Flasche nachzuschlagen, um sie so zu konfigurieren, dass sie alle Adressen überwacht. Hast du es dir angesehen? Wenn Sie es nur durch die Firewall zulassen, wird es nicht behoben.
Marcin Kaminski
Ja, danke, ich verstehe schon. Bereits benutzter localtunnel (ich weiß, dass es zu viel ist, aber es funktioniert). Ich versuche nur zu verstehen, was die Ausgabe von netstat "127.0.0.1:5000 0.0.0.0:* LISTEN" bedeutet.
Ilya Smagin
Sie brauchen keinen localtunnel :) Die netstat-Ausgabe zeigt Ihnen, dass Ihr HTTP-Server nur Verbindungen von Ihrem lokalen Computer akzeptiert. Anscheinend müssen Sie die Variable SERVER_NAME in der Konfiguration von Flask ändern.
Marcin Kaminski
2
Hat hier ein Konto erstellt, um die Frage zu favorisieren und diese Antwort zu verbessern!
Hephaistos,
6

Der beste Weg, es zu tun

flask run --host=0.0.0.0
Hassaan
quelle
4

Ich hatte gerade das gleiche Problem. Um das Problem zu lösen, habe ich die Art und Weise, wie die Anwendung ausgeführt wird, aktualisiert:

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

Mit host = 0.0.0.0 kann ich über mein lokales Netzwerk auf meine App zugreifen.

Alex andre
quelle