Saya menghapus jawaban asli saya, karena saya tidak sepenuhnya yakin bahwa itu benar. Sejak itu saya punya waktu untuk mengatur jaringan virtual VMs untuk mensimulasikan jaringan yang dimaksud. Berikut adalah seperangkat aturan firewall yang berfungsi untuk saya (dalam iptables-save
format, hanya untuk nat
tabel):
-A PREROUTING -d 89.179.245.232/32 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
-A POSTROUTING -s 192.168.2.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -d 192.168.2.10/32 -p tcp -m multiport --dports 22,25,80,443 -j MASQUERADE
POSTROUTING
Aturan pertama adalah cara langsung berbagi koneksi internet dengan LAN. Saya meninggalkannya di sana untuk kelengkapan.
The PREROUTING
Aturan dan kedua POSTROUTING
aturan bersama-sama membangun Nat yang tepat, sehingga koneksi ke server melalui alamat IP eksternal bisa terjadi, terlepas dari apakah koneksi berasal dari luar atau dari dalam LAN. Ketika klien pada LAN terhubung ke server melalui alamat IP eksternal, server melihat koneksi berasal dari alamat IP internal router (192.168.2.1).
Menariknya, ternyata ada beberapa variasi aturan POSTROUTING kedua yang juga berfungsi. Jika target diubah ke -j SNAT --to-source 192.168.2.1
, efeknya (tidak mengherankan) sama dengan MASQUERADE
: server melihat koneksi dari klien LAN lokal berasal dari alamat IP internal router. Di sisi lain, jika target diubah menjadi -j SNAT --to-source 89.179.245.232
, maka NAT masih berfungsi, tetapi kali ini server melihat koneksi dari klien LAN lokal berasal dari alamat IP eksternal router (89.179.245.232).
Akhirnya, perhatikan bahwa Anda asli PREROUTING
/ DNAT
aturan dengan -i ppp0
tidak bekerja, karena aturan tidak pernah sesuai paket yang datang dari klien LAN (karena mereka tidak memasuki router melalui ppp0
interface). Akan memungkinkan untuk membuatnya bekerja dengan menambahkan PREROUTING
aturan kedua hanya untuk klien LAN internal, tetapi itu akan menjadi tidak valid (IMO) dan masih perlu merujuk secara eksplisit ke alamat IP eksternal.
Sekarang, bahkan setelah meletakkan "hairpin NAT" (atau "loopback NAT", atau "refleksi NAT", atau apa pun yang orang suka menyebutnya) solusi secara rinci, saya masih percaya bahwa solusi DNS split-horizon - -dengan klien eksternal yang memutuskan untuk IP eksternal dan klien internal yang memutuskan untuk IP internal --- akan menjadi rute yang lebih baik untuk diambil. Mengapa? Karena lebih banyak orang memahami cara kerja DNS daripada memahami cara kerja NAT, dan sebagian besar membangun sistem yang baik memilih untuk menggunakan bagian yang dapat dipelihara. Pengaturan DNS lebih mungkin dipahami, dan dengan demikian dipelihara dengan benar, daripada pengaturan NAT yang misterius (IMO, tentu saja).