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?

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')

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.