Bagaimana cara mengizinkan koneksi jarak jauh ke Flask?

30

Di dalam sistem, berjalan di mesin virtual, saya dapat mengakses server yang berjalan di 127.0.0.1:5000.

Meskipun alamat 'remote' dari vm adalah 192.168.56.101 (ping dan ssh berfungsi dengan baik), saya tidak dapat mengakses server dengan 192.168.50.101-01000 baik dari mesin virtual maupun dari mesin lokal.

Saya kira ada sesuatu yang mencegah koneksi jarak jauh.

Inilah / etc / network / interfaces:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

ufw tidak aktif.

Bagaimana saya memperbaiki masalah ini?

Ilya Smagin
sumber

Jawaban:

48

Pertama-tama - pastikan server HTTP Anda mendengarkan 192.168.50.101:5000atau di mana saja ( 0.0.0.0:5000) dengan memeriksa output dari:

netstat -tupln | grep ':5000'

Jika tidak, bacalah dokumentasi Flask untuk mengikat ke alamat selain localhost.

Jika ya, izinkan lalu lintas menggunakan iptables:

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

Dari dokumentasi Flask:

Server Terlihat Eksternal Jika Anda menjalankan server, Anda akan melihat bahwa server hanya dapat diakses dari komputer Anda sendiri, bukan dari yang lain dalam jaringan. Ini adalah default karena dalam mode debugging, pengguna aplikasi dapat mengeksekusi kode Python sewenang-wenang di komputer Anda.

Jika debug Anda dinonaktifkan atau dipercayai pengguna di jaringan Anda, Anda dapat membuat server tersedia untuk umum hanya dengan mengubah panggilan run()metode agar terlihat seperti ini:

app.run(host='0.0.0.0')
Marcin Kaminski
sumber
1) hasilnya adalah 127.0.0.1.1000 0.0.0.0:* DENGARKAN. Ini berarti server tidak mendengarkan alamat host lokal lain? 2) Saya mencoba ufw mengizinkan 5000, tanpa hasil
Ilya Smagin
Inilah sebabnya saya menyarankan untuk melihat dokumen Flask untuk mengkonfigurasinya agar mendengarkan semua alamat. Sudahkah Anda melihatnya? Membiarkannya melalui firewall saja tidak akan memperbaikinya.
Marcin Kaminski
Ya, terima kasih, saya mengerti, sudah mencari. Sudah menggunakan localtunnel (saya tahu itu terlalu banyak, tetapi berhasil). Hanya mencoba memahami apa artinya keluaran netstat "127.0.0.1-01000 0.0.0.0:* DENGARKAN" artinya.
Ilya Smagin
Anda tidak memerlukan localtunnel :) Yang ditunjukkan oleh keluaran netstat adalah bahwa server HTTP Anda hanya menerima koneksi dari mesin lokal Anda. Sepertinya Anda perlu mengubah variabel SERVER_NAME dalam konfigurasi Flask.
Marcin Kaminski
2
Buat akun di sini hanya untuk memfavoritkan pertanyaan dan jawablah jawaban ini!
Hephaestus
6

Cara terbaik untuk melakukannya

flask run --host=0.0.0.0
Hassaan
sumber
4

Saya baru saja mengalami masalah yang sama. Untuk mengatasinya, saya memperbarui cara menjalankan aplikasi:

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

Menggunakan host = 0.0.0.0 biarkan saya mengakses aplikasi saya melalui jaringan lokal saya.

Alex andre
sumber