IPTables - Port ke ip & port lain (dari dalam)

10

Saat ini saya memiliki kotak NAS yang berjalan di bawah port 80. Untuk mengakses NAS dari luar, saya memetakan port 8080 ke port 80 pada NAS sebagai berikut:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80

Ini bekerja seperti pesona. Namun, ini hanya berfungsi jika saya mengakses situs web dari luar jaringan (di tempat kerja, di rumah yang berbeda, dll). Jadi ketika saya mengetik mywebsite.com:8080, IPTables melakukan pekerjaan dengan benar dan semuanya bekerja dengan baik.

Sekarang, masalah yang saya miliki adalah, bagaimana saya bisa mengarahkan ulang port ini dari bagian dalam jaringan? Nama domain saya mywebsite.commenunjuk ke router saya (server linux saya) dari dalam (10.32.25.1) tetapi saya ingin mengarahkan port 8080 ke port 80 pada 10.32.25.2 dari dalam.

Ada petunjuk?

Edit # 1

Mencoba membantu memfasilitasi pertanyaan ini, saya menyatukan diagram ini. Jangan ragu untuk memperbarui jika itu tidak benar atau salah mengartikan apa yang Anda cari.

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
 '-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|
David Bélanger
sumber
@slm Persis. Tidak ada yang terjadi pada 10.32.25.2:8080 karena server berada pada port 80. Dari luar, NAT mengalihkan dari port 8080 ke port 80 pada IP yang ditentukan (10.32.25.2). NET -> NAT: 8080 -> 10.32.25.2:80. Saya membutuhkan aturan dari dalam dan saya tidak tahu harus meletakkan apa di sana.
David Bélanger
@ ms Ya. Saya tidak tahu bagaimana saya bisa mencapai sesuatu seperti itu. Saya ingin mengatakan 10.32.25.1:8080pengalihan ke 10.32.25.2:80. Aturan saya di atas berfungsi dari luar, tetapi tidak dari dalam jaringan saya. Jadi jika saya di kantor, saya dapat mengakses NAS saya dari situs web: com: 8080 dan itu benar-benar transparan. Dari rumah saya, website.com:8080 arahkan ke 10.32.25.1 karena itu adalah router saya alias server Linux. Saya ingin mengarahkan kembali port 8080 ke NAS juga pada port 80 tetapi sekali lagi, secara transparan.
David Bélanger
@lm Ya, semuanya baik-baik saja dan berfungsi Saya hanya ingin mengarahkan kembali port 10.32.25.1:8080 ke 10.32.25.2:80 dari jaringan internal.
David Bélanger
juga menyebutkan antarmuka seperti eth0 10.32.25.2, sehingga kita dapat menulis penggunaan iptables berdasarkan antarmuka masuk
Rahul Patil
Opps maaf, saya baru saja melihat .. Anda sudah menyelesaikan masalah ..
Rahul Patil

Jawaban:

13

Saya akhirnya menemukan caranya. Pertama, saya harus menambahkan -i eth1aturan "luar" saya (eth1 adalah koneksi WAN saya). Saya juga perlu menambahkan dua aturan lainnya. Di sini pada akhirnya saya datang dengan apa:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE
David Bélanger
sumber
2
Aturan kedua tidak perlu, karena aturan pertama sudah berisi bahwa ...
machineaddict
1
Aturan pertama membatasi preroute hanya jika itu tiba di antarmuka eth1. Aturan kedua lebih umum karena berlaku untuk semua antarmuka. Waspadalah loop!
tu-Reinstate Monica-dor duh
4

Anda juga lupa menyebutkan bahwa penerusan paket harus diaktifkan untuk dapat melakukan NAT tujuan. Secara default, biasanya tidak aktif, jadi aturan iptables tidak akan berfungsi. Ini dapat diaktifkan dengan mengeluarkan:

echo 1 > /proc/sys/net/ipv4/ip_forward
Dmitriusan
sumber
Terima kasih banyak untuk ini, saya akan mencabut rambut saya selama berjam-jam!
ColinM
3

Pertama izinkan forwarding dengan

echo 1 > /proc/sys/net/ipv4/ip_forward

Kemudian atur aturan iptable dengan

IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE

Anda dapat menempatkan garis-garis ini /etc/rc.localsebagai contoh. Catatan: sejak Debian jessie membuatnya dapat dieksekusi dan mengaktifkan layanan rc.local via

systemctl enable rc-local.service
rubo77
sumber
0

Pertama, Anda perlu memverifikasi bahwa penerusan Anda telah diaktifkan:

cat /proc/sys/net/ipv4/ip_forward

Jika tidak 1, jalankan echo 1 > /proc/sys/net/ipv4/ip_forward.

Jika Anda ingin lalu lintas yang mengenai 10.32.25.1 pada port 80 dan 443 diteruskan ke portport 10.32.25.2 maka Anda harus menggunakan aturan di bawah ini:

iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80
balon
sumber