Ini adalah Pertanyaan Canonical tentang NAT dan DNS
Saat ini saya sedang mencoba untuk mengatur jaringan dengan DMZ yang berisi server web dan server email yang dipisahkan dari Internet oleh firewall yang menerjemahkan alamat jaringan (NAT).
Saya telah menginstal firewall NAT dengan antarmuka berikut:
WAN - x.x.x.x (redacted public IP address)
DMZ - 192.168.124.5/24
LAN - 192.168.123.5/24
Di DMZ saya, saya memiliki dua host saya:
Web server - 192.168.124.30
E-mail server - 192.168.124.32
Saya tahu bahwa saya harus mengkonfigurasi DNS untuk example.com
domain untuk menyelesaikan keduanya example.com
dan mail.example.com
ke alamat IP publik saya.
Saya ingin firewall NAT saya meneruskan semua permintaan masuk ke example.com
server web pada 192.168.124.30, dan semua permintaan masuk ke mail.example.com
server email pada 192.168.124.32. Saya melihat fitur "port forwarding" dalam konfigurasi firewall NAT saya tetapi sepertinya tidak dapat mencapai apa yang saya cari.
sumber
Jawaban:
Anda menjadi kacau dalam pemikiran Anda tentang bagaimana informasi mengalir di antara lapisan-lapisan protokol TCP / IP - antara DNS dan protokol-protokol lapisan aplikasi, khususnya.
Anda memiliki satu alamat IP publik. DNS Anda tentu saja dapat menyelesaikan keduanya
mail.example.com
danexample.com
ke alamat IP publik yang sama.Secara umum, datagram IP yang berisi permintaan ke alamat IP publik Anda, yang akan diterima oleh antarmuka eksternal firewall Anda, tidak mengandung nama host yang coba diakses oleh klien jarak jauh. Firewall Anda tidak dapat secara ajaib "mengetahui" nama host mana yang ditangani klien jarak jauh, karena kedua nama host tersebut memutuskan untuk alamat IP yang sama. Lapisan IP tidak mengetahui nama host yang digunakan pada lapisan aplikasi.
Protokol TCP dan UDP membedakan layanan khusus yang ditawarkan oleh host menggunakan nomor port. Dalam contoh Anda, dimungkinkan untuk menggunakan fitur penerusan port (juga disebut terjemahan alamat port, atau PAT) firewall NAT Anda untuk mengirim permintaan yang masuk ke port TCP 80 (HTTP) ke server web saat mengirim port TCP inbound 25 (SMTP) ke server email Anda.
Namun, jika Anda berencana untuk meng-host layanan yang sama di kedua mesin maka strategi ini menjadi bermasalah. Misalkan Anda akan meng-host situs web aman di server web Anda (untuk akses Pelanggan) dan situs web aman di server email Anda (untuk webmail). Permintaan yang datang ke alamat IP publik firewall NAT Anda ke port TCP 443 (HTTPS) hanya dapat dialihkan ke satu server atau yang lain.
Solusi umum untuk situasi ini adalah memiliki lebih banyak alamat IP publik. Karena alamat IPv4 menjadi langka yang juga bisa menjadi masalah.
Kami akhirnya mengatasi kelangkaan alamat IP publik di beberapa protokol pada lapisan aplikasi. Sebagai contoh, HTTP / 1.1 menambahkan
Host:
header khusus untuk memungkinkan server web untuk meng-host beberapa situs web pada alamat IP publik yang sama. TLS menambahkan ekstensi Indikasi Nama Server (SNI) untuk memungkinkan pemilihan sertifikat yang sesuai berdasarkan nama host yang dimasukkan oleh klien jarak jauh.Melakukan solusi semacam ini di lapisan aplikasi berarti bahwa setiap protokol lapisan aplikasi akan membutuhkan "perbaikan" sendiri (dan kemudian semua perangkat lunak server dan klien harus menerapkan "perbaikan" itu). Itu perintah yang sulit.
Sebagai pengganti dari memodifikasi lapisan aplikasi protokol beberapa protokol dengan mudah menerima menjadi "multiplexed" antara beberapa host menggunakan perangkat lunak yang dapat "merutekan" permintaan. Kemungkinan ini melampaui apa yang mampu dilakukan firewall NAT sederhana karena paket-paket perlu diperiksa pada lapisan aplikasi. Menggunakan reverse-proxy seperti nginx adalah contoh yang baik dari jenis "multiplexing" ini (atau aturan penerbitan Web tentang Forefront TMG atau ISA Server di lingkungan Microsoft) untuk protokol HTTP. Secara teori, protokol apa pun bisa multiplexing melalui proxy terbalik tetapi protokol yang lebih esoterik semakin besar kemungkinan Anda akan berbicara tentang memiliki kode kustom yang ditulis.
Ketika Anda perlu menawarkan layanan yang sama dari dua host berbeda pada satu alamat IP publik, Anda selalu memiliki opsi untuk memindahkan salah satu host ke port non-standar. Ini akan mengharuskan klien untuk mengetahui port non-standar. Dalam hal HTTP (S) ini menghasilkan URL dengan
http://example.com:XXX
notasi (di manaXXX
nomor port non-standar). Apakah ini akan bermasalah dalam situasi Anda adalah sesuatu yang hanya Anda yang dapat memutuskan. (Pengalaman saya menunjukkan bahwa hampir tidak ada pengguna akhir yang mampu menangani:XXX
notasi port di URL apa pun yang harus mereka masukkan sendiri.)sumber
Fitur "Port Forwarding" Anda dapat memungkinkan Anda mengirimkan lalu lintas yang diperuntukkan bagi: 80 dan: 443 hingga 192.168.124.30 dan port lainnya (atau hanya yang digunakan oleh server email Anda yang dikonfigurasi untuk digunakan) ke 192.168.124.32. Jika karena alasan tertentu Anda memerlukan salah satu dari kedua port tersebut untuk server email dan juga untuk server web, Anda dalam masalah. Agar metode ini berfungsi, akses web apa pun ke server email Anda harus menggunakan porta yang berbeda (kemungkinan besar tidak standar). Anda mungkin juga akan mengatur server web untuk mengarahkan kembali segala sesuatu yang mengatakan "
mail.example.com
" untuk digunakan , bagi pengguna yang tidak tahu cara menambahkan nomor port dan / atau menentukan koneksi aman. (Anda hanya akan menggunakan koneksi web yang aman ke server surat, kan?)https://mail.example.com:other_port
Ini adalah pada lapisan Transport daripada lapisan Aplikasi, yang berarti tidak harus bergantung pada inspeksi paket yang mendalam. Alih-alih itu dapat melihat lokasi yang mudah ditemukan di header TCP untuk port.
sumber
Jika "permintaan masuk" Anda adalah hal yang berbeda, yaitu lalu lintas web (HTTP) untuk server web dan lalu lintas surat (SMTP) untuk server email, ini memang dapat dilakukan: HTTP menggunakan port TCP 80 (443 untuk HTTPS), sedangkan SMTP menggunakan port TCP 25; dengan demikian, dari alamat IP publik yang sama, Anda dapat meneruskan lalu lintas HTTP ke server web Anda, dan lalu lintas SMTP ke server email Anda; inilah yang dimaksud dengan "port forwarding". Setiap firewall yang layak mampu melakukan ini.
Namun, jika secara kebetulan kedua server harus dapat menerima jenis lalu lintas yang SAMA, jika server email Anda juga meng-host layanan webmail, maka Anda dalam masalah, karena Anda dapat meneruskan port tertentu (80 dan / atau 443) hanya untuk satu server; untuk memisahkan lalu lintas web berdasarkan nama yang digunakan klien untuk memintanya, Anda memerlukan sesuatu yang beroperasi pada tingkat yang lebih tinggi dari TCP / IP, seperti proxy terbalik.
sumber