Saya ingin melakukan beberapa NAT
di iptables
. Sehingga, semua paket yang datang 192.168.12.87
dan port 80
akan diteruskan ke 192.168.12.77
port 80
.
Bagaimana melakukan ini dengan iptables?
Atau
Adakah cara lain untuk mencapai hal yang sama?
linux
iptables
port-forwarding
duduk
sumber
sumber
192.168.12.87
. Jadi, saya perlu meneruskan semua permintaan192.168.12.77
.iptables
. Dan, saya melihat beberapa contoh. Tapi, sepertinya membutuhkan dua ethernet. Tautan: revsys.com/writings/quicktips/nat.htmlJawaban:
Aturan-aturan ini harus berfungsi, dengan asumsi yang
iptables
berjalan di server192.168.12.87
:Anda harus DNAT lalu lintas masuk di port 80, tetapi Anda juga harus SNAT lalu lintas kembali.
Alternatif (dan IMHO pendekatan terbaik):
Bergantung pada apa Server Web Anda (Apache, NGinx), Anda harus mempertimbangkan Proxy HTTP pada server front-end Anda (192.168.12.87):
mod_proxy (Apache)
proxy_pass (NGinx)
sumber
Alasan yang tampaknya jelas
iptables -t nat -A PREROUTING -d 192.168.12.87 -p tcp --dport 80 -j DNAT --to-destination 192.168.12.77
tidak akan berfungsi adalah bagaimana paket-paket kembali akan dialihkan.Anda dapat mengatur aturan yang akan menyebabkan paket mengirim ke 192.168.12.87 menjadi hanya NATted ke 192.168.12.77, tetapi 192.168.12.77 kemudian akan mengirim balasan langsung ke klien. Balasan-balasan itu tidak akan melalui host di mana aturan iptables Anda melakukan NAT, maka paket-paket dalam satu arah diterjemahkan, tetapi paket-paket di arah lain tidak.
Ada tiga pendekatan untuk menyelesaikan masalah ini.
iptables -t NAT -A POSTROUTING -d 192.168.12.77 -p tcp --dport 80 -j SNAT --to-source 192.168.12.87
iptables -t nat -A OUTPUT -p tcp --sport 80 -j SNAT --to-source 192.168.12.87
Masing-masing dari ketiga solusi tersebut memiliki kelemahan, jadi Anda perlu mempertimbangkan dengan cermat, jika Anda benar-benar perlu melakukan penerusan khusus ini.
Dari tiga pendekatan saya pikir yang pertama adalah yang paling mungkin berhasil. Jadi, jika Anda tidak perlu tahu alamat IP klien, itu yang akan saya rekomendasikan.
Anda juga dapat memilih untuk melupakan tentang NAT sama sekali dan tidak mencoba menyelesaikan masalah pada MAC atau layer IP. Anda bisa sampai ke lapisan HTTP dan mencari solusi di sana. Dalam hal ini solusinya adalah proxy HTTP. Jika Anda menginstal proksi HTTP pada 192.168.12.87 dan mengkonfigurasinya dengan tepat, Anda dapat membuatnya meneruskan permintaan ke 192.168.12.77 dan meneruskan jawaban kembali. Selain itu dapat memasukkan header X-Forwarded-For yang mempertahankan IP klien asli. Server pada 192.168.12.77 maka perlu dikonfigurasi untuk mempercayai header X-Forwarded-For dari 192.168.12.87.
sumber
-j MASQUERADE
tidak disebutkan di sini; bukankah itu pendekatan biasa dengan DNAT?SNAT
alih-alihMASQUERADE
, karena itulah yang dikatakan dokumentasi. Kata-kata yang tepat dalam dokumentasi adalah:It should only be used with dynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNAT target.