Bagaimana cara kerja NAT / PortForwarding / TCP / IP?

11

Baru-baru ini saya membaca sebuah artikel berjudul bagaimana cara kerja NAT . Beberapa hal masih belum jelas bagi saya. Saya akan berterima kasih jika seseorang bisa menjelaskan.

Di bawah ini adalah bagian dari artikel tentang DynamicNAT yang paling membingungkan:

Komputer pada domain rintisan mencoba menyambung ke komputer di luar jaringan, seperti server Web.

Router menerima paket dari komputer di domain rintisan. Router menyimpan alamat IP non-routable komputer ke tabel terjemahan alamat. Router mengganti alamat IP non-routable komputer pengirim dengan alamat IP pertama yang tersedia di luar kisaran alamat IP unik. Tabel terjemahan sekarang memiliki pemetaan alamat IP non-routable komputer yang cocok dengan salah satu alamat IP unik.

Ketika sebuah paket kembali dari komputer tujuan, router memeriksa alamat tujuan pada paket tersebut. Kemudian terlihat di tabel terjemahan alamat untuk melihat komputer mana di domain rintisan milik paket.

1) Bagaimana NAT tahu bahwa paket "kembali" ke komputer tujuan?

2) Bagaimana jika komputer lain di LAN terhubung ke server yang sama? Bagaimana NAT tahu paket mana yang harus "kembali" ke mana?

3) Apakah modifikasi header paket memungkinkan untuk melakukan serangan Internet, di mana "sumber IP" diganti dengan IP korban, dan server penjawab akan membanjiri korban dengan paket yang tidak diinginkan?

Saya kira beberapa penyerang harus terlibat ...

4) Apakah StaticNAT setara dengan PortForwarding semua port?

pengguna2449761
sumber

Jawaban:

10

Ada kesalahpahaman umum antara NAT (Terjemahan alamat jaringan) dan PAT (Terjemahan Alamat Alamat), yang merupakan apa yang kebanyakan kami gunakan di router rumah kami.

NAT
Anggaplah kita memiliki jaringan dengan topologi berikut:

Private_Network <-------> Router <-------> The_Internet

Antarmuka Router yang terhubung ke Private_Network memiliki alamat IP pribadi , yaitu yang tidak unik di The_Internet . Di sisi lain, dalam kasus NAT , Router memiliki banyak antarmuka yang terhubung ke The_Internet . Setiap antarmuka memiliki alamat IP unik di The_Internet . Sekarang mari kita asumsikan bahwa Host_A dan Host_B berada di Private_Network dan mereka berdua inginkan untuk mengakses Website_X di The_Internet pada waktu yang sama. IP dan port Host_APaketnya adalah:

Sumber IP: Host_A 's swasta IP
sumber Pelabuhan: Sebuah port pada Host_A
tujuan IP: Website_X ' s publik / IP yang unik
Tujuan Port: Sebuah port mana Website_X server adalah mendengarkan

dan dengan cara yang sama untuk paket yang datang dari Host_B .
Jika Sumber IP dibiarkan tidak berubah, maka Website_X akan membalas ke alamat IP yang bersifat pribadi, yaitu tidak unik, dan oleh karena itu paket tidak akan pernah dapat menemukan jalan kembali. Untuk mengatasi masalah itu, Router memeriksa apakah salah satu alamat IP uniknya yang terhubung ke The_Internet tidak digunakan. Jika itu masalahnya, maka ia melakukan pemetaan berikut:

Host_A 's swasta IP ======= Router's_unique_IP_K

dan sekarang paket yang dimulai dari Host_A pergi ke Website_X dan sekarang meninggalkan antarmuka Router yang terhubung ke The_Internet akan memiliki bentuk:

Sumber IP: Router's_unique_IP_K
sumber Pelabuhan: Sebuah port pada Host_A
tujuan IP: Website_X 's publik / IP yang unik
Tujuan Port: Sebuah port mana Website_X ' Server s adalah mendengarkan

Dengan demikian Anda dapat memahami bahwa ada asosiasi satu-ke-satu dari IP pribadi ke IP publik. Oleh karena itu ketika paket tiba dari Website_X ke Router , asosiasi ini diperiksa dan alamat IP tujuan diubah kembali ke yang pribadi dan berhasil dikirim ke host yang tepat.
Seperti yang Anda lihat, metode ini cukup sederhana, tetapi memiliki satu kelemahan besar: setiap host pribadi harus memiliki alamat IP khusus, yang mahal, sehingga kami memilih untuk memiliki lebih sedikit alamat IP unik daripada host di jaringan pribadi. Oleh karena itu jika semua host pribadi mencoba mengakses The_Internet pada saat yang sama, hanya sebagian dari mereka, sama dengan jumlah alamat IP publik yang tersedia yang Routertelah, akan memiliki akses dan sisanya akan ditolak.
Untuk mengatasi itu, kami membuat PAT .

PAT
PAT adalah apa yang sebagian besar router rumah kami gunakan. Keterbatasan dasarnya adalah bahwa Router memiliki satu alamat IP unik yang terhubung dengan The_Internet , tetapi kami masih ingin mengizinkan beberapa host dari jaringan pribadi untuk mengakses The_Internet pada saat yang sama.
Cara kita melakukan itu "mirip" dengan cara NAT melakukannya dengan perbedaan utama: alih-alih Router memegang kumpulan alamat IP, ia memegang kumpulan nomor port. Lebih tepatnya, paket tiba di Router dari Host_A di Private_Network ditakdirkan untuk Website_X diThe_Internet akan memiliki format berikut:

Sumber IP: Host_A 's swasta IP
sumber Pelabuhan: Sebuah port pada Host_A
tujuan IP: Website_X ' s publik / IP yang unik
Tujuan Port: Sebuah port mana Website_X server adalah mendengarkan

Sekarang Router akan melakukan dua tugas:

  1. Ini akan mengubah IP Sumber ke IP publik DAN router yang unik
  2. Ini akan mengubah Source Port ke port dari pool yang dipertahankan oleh Router dan belum digunakan, misalnya Port_Z

dan sekarang paket yang dimulai dari Host_A pergi ke Website_X dan sekarang meninggalkan antarmuka Router yang terhubung ke The_Internet akan memiliki bentuk:

Sumber IP: Router's_unique_IP_K
sumber Pelabuhan: Port_Z
Destination IP: Website_X 's publik / IP yang unik
Tujuan Port: Sebuah port mana Website_X ' Server s adalah mendengarkan

dan Router akan menyimpan pemetaan berikut:

IP pribadi Host_A DAN port di Host_A ======= Port_Z

Mengapa ini bekerja?
Sekarang ketika sebuah paket kembali, Router hanya memeriksa nomor port tujuan dan mengubah alamat IP tujuan dan nomor port tujuan sesuai dengan pemetaan yang disebutkan sebelumnya dan paket akan berhasil dikirim.

Bagaimana jika saya menjalankan banyak aplikasi pada Host yang sama?
Aplikasi yang berbeda akan memiliki port yang berbeda, menurut definisi, sehingga mereka akan dipetakan ke port yang berbeda dari Router .

Bagaimana jika beberapa Host mencoba mengakses The_Internet secara bersamaan dan mereka semua menggunakan aplikasi yang sama?
Host yang berbeda akan memiliki alamat IP pribadi yang berbeda, menurut definisi, sehingga mereka akan dipetakan ke port yang berbeda dari Router .

PAT berbahaya menyeimbangkan dalam ruang abu-abu lintas-lapisan. Nomor port adalah bagian dari Protokol Transportasi sementara Router diizinkan beroperasi hingga Protokol Internet. Jadi secara teknis adalah sesuatu yang tidak diizinkan oleh protokol. Oleh karena itu ada, setidaknya secara teoritis, potensi bahaya: kolam pelabuhan terbatas. Karenanya jika jaringan pribadi saya terdiri dari 1000 Host dan masing-masing menjalankan aplikasi port_pool / 10, tabel pemetaan pada router akan kehabisan entri yang tersedia dan akses ke aplikasi akan ditolak.

Jawaban ini sangat melebihi panjang yang saya maksudkan, tapi saya harap itu membantu.

George
sumber
2
Beberapa catatan, Pertama Anda menggunakan istilah "NAT" untuk merujuk pada apa yang disebut RFC "NAT Dasar" dan "PAT" untuk merujuk pada apa yang disebut RFC "NAPT". RFC umumnya menggunakan "NAT" sebagai istilah umum yang mencakup "NAT Dasar" dan "NAPT". Bahkan kedua "Basic NAT" harus memodifikasi header TCP / UDP karena header TCP / UDP berisi checksum yang mencakup alamat IP.
Peter Green
@ PeterGreen tetapi apakah inti dari jawaban itu akurat?
lpydawa
6

Perute tahu di mana paket-paket itu berada karena The router saves ... an address translation table.ia mengingat apa yang dilakukan terjemahan alamat luar-dalam yang dibuatnya. Dengan demikian, satu alamat orang dalam sama dengan satu alamat orang luar, dan tujuan keluar-di-internet tidak relevan. Ini, tentu saja, mengabaikan firewall yang ada di hampir setiap router NAT, yang melacak koneksi penuh:

(inside) src:ip+port,dst:ip+port <-> (outside) src:ip+port,dst:ip+port

NAT dapat mengubah kombinasi ip dan / atau port.

# 3 adalah subjek yang sama sekali berbeda: spoofing

# 4 "NAT Statis", atau "1-ke-1", adalah peta hanya alamat. Jadi, port (dan bahkan protokol: tcp, udp, gre, dll.) Tidak relevan.

Ricky Beam
sumber
2) Bagaimana jika komputer lain di LAN terhubung ke server yang sama? Bagaimana NAT tahu paket mana yang harus "kembali" ke mana?
user2449761
1 & 2 adalah jawaban yang sama: karena ini melacak koneksi / terjemahan. Dua host di dalam tidak akan dipetakan ke alamat luar yang sama; jadi setiap paket yang tiba di alamat luar yang dipetakan, secara otomatis hanya memiliki satu di dalam tujuan. Jika Anda hanya memiliki satu alamat di luar (publik), maka itu bukan "NAT", tetapi PAT (terjemahan port)
Ricky Beam