Jak zezwolić na zdalne połączenia z Flask?

30

W systemie działającym na maszynie wirtualnej mogę uzyskać dostęp do działającego serwera pod adresem 127.0.0.1:5000.

Chociaż „zdalny” adres vm to 192.168.56.101 (ping i ssh działają poprawnie), nie mogę uzyskać dostępu do serwera 192.168.50.101:5000 ani z maszyny wirtualnej, ani z lokalnego.

Wydaje mi się, że coś uniemożliwia zdalne połączenia.

Oto / etc / network / interfaces:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

ufw jest nieaktywny.

Jak rozwiązać ten problem?

Ilya Smagin
źródło

Odpowiedzi:

48

Przede wszystkim - upewnij się, że serwer HTTP nasłuchuje w dowolnym 192.168.50.101:5000miejscu ( 0.0.0.0:5000), sprawdzając dane wyjściowe:

netstat -tupln | grep ':5000'

Jeśli nie, zajrzyj do dokumentacji Flask aby powiązać adres inny niż localhost.

Jeśli tak, zezwól na ruch przy użyciu iptables:

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

Z dokumentacji Flask:

Serwer widoczny z zewnątrz Jeśli uruchomisz serwer, zauważysz, że serwer jest dostępny tylko z twojego komputera, a nie z jakiegokolwiek innego w sieci. Jest to ustawienie domyślne, ponieważ w trybie debugowania użytkownik aplikacji może wykonać dowolny kod w języku Python na komputerze.

Jeśli masz wyłączoną funkcję debugowania lub ufasz użytkownikom w sieci, możesz publicznie udostępnić serwer, zmieniając wywołanie run()metody w taki sposób:

app.run(host='0.0.0.0')
Marcin Kamiński
źródło
1) wyjście to 127.0.0.1:5000 0.0.0.0:* LISTEN. Oznacza to, że serwer nie nasłuchuje adresów innych niż localhosts? 2) Próbowałem ufw pozwolić 5000, bez rezultatu
Ilya Smagin
Właśnie dlatego zasugerowałem zapoznanie się z dokumentacją Flask, aby skonfigurować go tak, aby nasłuchiwał na wszystkich adresach. Patrzyłeś na to? Zezwolenie na samą zaporę nie naprawi tego.
Marcin Kamiński
Tak, dziękuję, już to rozumiem. Użyłem już localtunnel (wiem, że to za dużo, ale działa). Próbuję zrozumieć, co oznacza wynik netstat „127.0.0.1:5000 0.0.0.0:* LISTEN”.
Ilya Smagin,
Nie potrzebujesz localtunnel :) Wyjście netstat pokazuje, że twój serwer HTTP akceptuje tylko połączenia z twojego komputera lokalnego. Wygląda na to, że musisz zmienić zmienną SERVER_NAME w konfiguracji Flaska.
Marcin Kamiński
2
Utworzono tutaj konto, aby tylko polubić pytanie i głosować na tę odpowiedź!
Hefajstos
6

Najlepszy sposób, aby to zrobić

flask run --host=0.0.0.0
Hassaan
źródło
4

Właśnie miałem ten sam problem. Aby go rozwiązać, zaktualizowałem sposób uruchamiania aplikacji:

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

Użycie hosta = 0.0.0.0 pozwala mi uzyskać dostęp do mojej aplikacji za pośrednictwem mojej sieci lokalnej.

Alex andre
źródło