Bagaimana cara melakukan port forwarding / redirect pada Debian?

12

Saya punya dua pertanyaan.

Pertanyaan 1: Mesin debian saya memiliki antarmuka eth3 dengan ip 192.168.57.28. Jika seseorang mencoba menyambung ke 192.168.57.28:1234 bagaimana cara mengarahkan permintaan ke komputer lain: 192.168.57.25:80?

Pertanyaan 2: Jika mesin debian saya memiliki dua antarmuka: eth3 dengan 192.168.57.28 dan ppp0 dengan beberapa IP dinamis dan seseorang mencoba untuk terhubung melalui ppp0 pada port 1234, bagaimana cara mengarahkan permintaan ke 192.168.57.25:80?

Saya sudah mencoba ini:

$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward

tetapi tidak berhasil.

Dánjal Salberg Adlersson
sumber

Jawaban:

12
iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE

Yang pertama menentukan bahwa semua koneksi tcp yang masuk ke port 1234 harus dikirim ke port 80 dari mesin internal 192.168.57.25. Aturan ini saja tidak menyelesaikan pekerjaan karena iptables menolak semua koneksi yang masuk. Kemudian kami menerima koneksi masuk ke port 1234 dari eth3 yang terhubung ke Internet dengan IP publich dengan aturan kedua. Kami menambahkan aturan kedua dalam rantai FORWARD untuk memungkinkan penerusan paket ke port 80 dari 192.168.57.25.

EDIT: POSTROUTING ditambahkan.

Untuk melacak koneksi. jika tidak, host luar akan melihat IP Internal 192.168.57.25 yang tidak dia ketahui.

EDIT2: Baru saja mendapat petunjuk bahwa itu harus - ke-tujuan bukan - ke (sry)

Daywalker
sumber
Saya sudah mencoba saran Anda, tetapi tidak berhasil. Saya dapat menjelajah ke 192.168.57.25 dan halaman web kembali, tetapi menjelajah ke 192.168.57.28:1234 tidak berfungsi.
Dánjal Salberg Adlersson
@ DánjalSalbergAdlersson Memperbarui posting saya (melewatkan sesuatu. Sry.)
Daywalker
3
Saya mencoba saran Anda, tetapi tidak berhasil. Lalu saya ubah menjadi yang terakhir di sini: iptables -A POSTROUTING -t nat -j MASQUERADE, lalu berhasil!
Dánjal Salberg Adlersson
8

Terima kasih kepada Daywalker dan Dánjal Salberg Adlersson. Setelah bersumpah selama berjam-jam, port forwarding dengan iptables akhirnya berhasil. (diuji pada Debian)

skrip bash

#!/bin/bash

IPTBL=/sbin/iptables

IF_IN=eth0
PORT_IN=40022

IP_OUT=172.16.93.128
PORT_OUT=22

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE
scotty86
sumber
apakah ada alasan mengapa "-s 192.168.57.25" dihilangkan dari baris POSTROUTING?
edwardsmarkf
juga "-o eth3" dihilangkan
edwardsmarkf
saya melihat -s dan -o pada baris POSTROUTING tampaknya opsional. ada pemikiran tentang penggunaan SSL? saya mengajukan pertanyaan di sini, merujuk skrip Anda: superuser.com/questions/1387902/…
edwardsmarkf