Redirect port 80 ke 8080 dan membuatnya bekerja pada mesin lokal

61

Saya mengarahkan lalu lintas untuk port 80 ke 8080 di komputer saya dengan

sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080

Ini bekerja dengan baik untuk seluruh dunia kecuali mesin saya sendiri. Saya seorang pengembang dan saya harus mengarahkan ulang port 80 ke 8080 untuk diri saya sendiri.

IP saya adalah 192.168.0.111

Server web saya berjalan pada port 8080

Saya ingin membuka situs web dari http://192.168.0.111/pada http://192.168.0.111:8080/dari mesin yang sama tempat server berjalan.

Maks
sumber
Maafkan saya untuk abberasi, tetapi apa tujuan meneruskan port 80 ke 8080?
ma11hew28
2
@mattdipasquale, pengguna normal tidak dapat mengakses port 80 sehingga Anda tidak dapat menjalankan layanan web seperti python flask sebagai pengguna normal.
Christian
Mengapa Anda tidak mengikat server web saja ke port 80?
David Foerster
5
Saya kira itu karena pengguna non-root tidak dapat mengikat ke port 80/443 dan dia tidak ingin menjalankan layanan webnya sebagai root ..
Pavel K.

Jawaban:

80

Anda perlu menggunakan OUTPUTrantai karena paket yang dimaksudkan untuk antarmuka loopback tidak melewati PREROUTINGrantai. Berikut ini harus bekerja; jalankan sebagai root:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080
heemayl
sumber
1
Apakah port 80 harus dapat diakses secara global? Saya mencoba solusi Anda, nomor port 8080 saya dapat diakses tetapi 80 karenanya tidak bekerja. @heemayl
alper
2
Ini tidak berhasil, tidak yakin mengapa ini dipilih
diyoda_
@Diyoda_ Tentukan tidak berfungsi .
heemayl
3
Saya dapat mengkonfirmasi bahwa ini tidak berfungsi di ubuntu 18.04
Ahmed Hamdy
2
Tidak bekerja untuk saya di Ubuntu 18.10
Christopher Bradshaw
6

Sederhana cukup gunakan iptables yang memungkinkan port 80 dan 8080 lalu redirect 80 ke 8080 pastikan Anda menetapkan ke nic yang benar .. misalnya saya menggunakan eth0

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
tmac
sumber
Terima kasih! Ini bekerja di Ubuntu 19
Vladimir Ishenko
1
Setelah itu akan menyenangkan untuk menyimpan perubahan iptablesudo apt-get install iptables-persistent
Vladimir Ishenko
6

Ini berhasil untuk saya.

$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Sanket Chaudhari
sumber
+1 berfungsi untuk saya di Ubuntu 18.04 (setidaknya untuk TCP), apakah port 7000-> 7001 dan server mendengarkan pada port 7001 menerima koneksi masuk dari port 7000 :)
hanshenrik
1
pastikan untuk menggunakan antarmuka jaringan yang benar, itu tidak dipanggil eth0pada semua sistem
hanshenrik
4

Alih-alih iptables, Anda dapat mencoba: sudo ssh -gL 80:127.0.0.1:8080 localhost

Gregor
sumber
2
Itu adalah opsi tetapi tidak persis apa yang saya inginkan karena saya sudah memiliki server web pada port 80. Saya akan lebih suka melakukannya dengan iptables dan menjaga server web pada port 80 tetap berjalan. Saya kira saya hanya perlu menerapkan aturan ke langkah yang berbeda, bukanPREROUTING
Max
Ya - ini akan menyebabkan konflik port jika Anda memiliki sesuatu yang sedang Anda dengarkan sesuai saran Max. Jawaban di atas adalah kasus yang lebih umum.
cgseller
Saya mendapat "Sambungan ditolak" ketika mencoba solusi ini.
mitchus