Perbedaan antara DNAT dan REDIRECT di IPTABLES

14

Oke, mungkin karena saya padat atau mungkin tidak menemukan sumber yang tepat, tapi saya tidak mengerti mengapa salah satu pengaturan IPTABLES ini lebih baik daripada yang lain.

Ini pengaturan saya:

Saya memiliki kotak yang berfungsi sebagai proxy transparan dan router atau semacamnya. Ini memiliki dua antarmuka di atasnya, ETH0 dan ETH1, dan skema alamat berikut:

ETH0 = DHCP ETH1 = 192.168.5.1/24 yang melayani DHCP untuk jaringan 192.168.5.0/24 untuk klien di belakangnya di LAN

Saya telah menginstal privoxy dan mendengarkan pada port 8080 sebagai proxy transparan. Apa yang saya capai dengan pengaturan ini adalah untuk dapat menjatuhkan kotak ini ke jaringan yang ada dengan konfigurasi minimal dan klien yang dilampirkan ke proxy.

Ini adalah file IPTABLES asli saya

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

Konfigurasi ini berfungsi dengan baik dan lalu lintas mengalir bolak-balik tanpa masalah. Saya mendapatkan alamat IP klien asal di file privoxy, dan hidup itu baik.

Kebingungan saya muncul ketika saya mulai melihat konfigurasi orang lain dan melihat bahwa mereka menggunakan DNAT alih-alih REDIRECT, dan saya mencoba memahami manfaat sebenarnya dari satu di atas yang lain. Berikut ini contoh konfigurasi:

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to 192.168.5.1:8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

Sekali lagi, konfigurasi ini juga berfungsi, dan memberi saya semua yang saya butuhkan dari perspektif pencatatan ...

Mana yang benar, atau mungkin LEBIH benar, daripada yang lain?

Terima kasih telah meluangkan waktu untuk membaca sejauh ini ...

QWade
sumber

Jawaban:

14

REDIRECTmengubah alamat IP tujuan untuk mengirim ke mesin itu sendiri. Dengan kata lain, paket yang dibuat secara lokal dipetakan ke alamat 127.0.0.1. Ini untuk mengarahkan paket lokal. Jika Anda hanya ingin mengarahkan lalu lintas antar layanan di mesin lokal, itu akan menjadi pilihan yang baik.

DNATadalah Terjemahan Alamat Jaringan yang sebenarnya . Jika Anda ingin paket yang ditakdirkan di luar sistem lokal untuk mengubah tujuannya, itu adalah pilihan yang lebih baik, karena REDIRECTtidak akan berfungsi.

Warner
sumber
oke, jadi jika saya memiliki klien yang duduk di belakang proxy, katakan pada 192.168.5.234, dan saya ingin "memproses" permintaan HTTP-nya melalui proxy pada 192.168.5.1, Anda menyarankan bahwa saya harus DNAT keluar port 80 lalu lintas ke 192.168 .5.1: 8080 pada proksi. Saya bisa membelinya, tapi MENGAPA ???? Apakah ada hubungannya dengan bagaimana lalu lintas ditangani setelah meninggalkan ETH0 proxy pada jalan keluar melalui gateway default ke Internet? Saya perlu grok ini atau kepala saya akan meledak
QWade
2
DNAT mengubah alamat ketika paket melewati firewall sehingga tiba di host desidered, dan sebaliknya tampaknya berasal dari firewall. DNAT hampir tidak pernah berlaku untuk lalu lintas keluar, yang ditangani oleh aturan MASQUERADE. Jika privproxy berada pada host lain, maka DNAT akan sesuai, dengan pengecualian yang sesuai untuk host tersebut.
BillThor
Bill, terima kasih. Di situlah otak reptil saya pergi, tetapi apakah selalu menyenangkan untuk memiliki validasi. Jadi jika saya mengirim paket yang ditujukan untuk google.com dari 192.168.5.234 dan memiliki default gw ditetapkan sebagai 192.168.5.1 (eth1 pada proxy), saya harus "MENGURANGI" paket itu ke port 8080 pada proxy dan biarkan privoxy melakukan sisanya. Alasan untuk ini adalah karena privoxy hidup pada 192.168.5.1 dan bukan pada host lain. Apakah saya merokok sesuatu yang seharusnya tidak saya lakukan?
QWade
9

REDIRECTtidak mengubah alamat IP tujuan untuk mengirim ke mesin itu sendiri seperti yang dijawab oleh Warner @. Tapi saya akan mengatakan bahwa jawabannya tidak sepenuhnya benar, atau agak menyesatkan.

REDIRECTbukan hanya untuk mengarahkan paket lokal. Ini benar-benar DNATdi mana alamat IP tujuan yang digunakan adalah implisit, 127.0.0.1 jika itu adalah paket lokal atau alamat IP antarmuka mesin, sebaliknya, 192.168.5.1 dalam kasus OP.

Jadi, dalam pertanyaan ini, apa pun tujuan akhirnya, paket harus terlebih dahulu mencapai proxy, jadi REDIRECTsangat cocok.

Karena dengan REDIRECTAnda tidak perlu menentukan alamat IP, itu hanya akan mengambil yang benar, ia memiliki beberapa kelebihan dibandingkan DNAT:

  • Jika alamat IP mesin berubah karena alasan apa pun Anda tidak perlu mengubah aturan, dan khususnya DNATtidak akan berfungsi untuk antarmuka yang dikendalikan DHCP.

  • Anda dapat menulis dan mempertahankan aturan yang sama untuk beberapa sistem (misalnya beberapa proksi contoh) tanpa menyimpan versi yang sedikit berbeda karena alamat IP tertentu.

Julio Diez
sumber
entah bagaimana suka snat / topeng.
Jichao
@Hod, saya mendengar REDIRECT adalah kasus khusus DNAT, tapi saya menggunakan REDIRECT dan TOR tahu tujuan sebenarnya dari sebuah paket, jadi saya menyimpulkan daddr dan dport dari struktur iphdr dan tcphdr masih utuh, dan paket tersebut baru saja kembali ke tujuan REDIRECT oleh inti. DNAT sebenarnya akan memodifikasi struktur. Apakah aku salah?
Sumbu