-=- LogCode.net -=- ::Daily Hacker Log:: -------------------- Subject : Introduction for Network Address Translation Author : th3c0d3c Contact : th3c0d3c@gmail.com License : BSD -----[ Introduction Perkembangan Jaringan Internet dewasa ini sungguh sangat pesat, internet yang pada awalnya hanya memiliki beberapa host kini sudah mencapai lebih dari 150 juta host. Tentu hal ini memunculkan permasalah tentang pemabagian IP address yang sampai sekarang masih terfokus pada IPv4 (32 bit). Salah satu solusi yang di usulkan oleh berbagai pihak adalah penggunaan IPv6 yang memiliki range yang cukup besar (IPv6 memiliki panjang 128 bit), namun sampai sekarang penggunaan IPv6 tersebut masih memiliki beberapa kendala dalam penerapannya ke dunia internet. Solusi lain yang cukup efisien adalah penggunaan teknologi NAT (Network Address Translation). NAT bekerja pada lapisan IP, dimana IP local akan di petakan ke IP publik, begitu pula sebaliknya. NAT sendiri sebenarnya terdiri dari dua metode, yaitu NAT yang bekerja berdasarkan IP address dan PAT yang bekerja berdasarkan Port Number, namun lazimnya orang kebanyakan menyebutnya sebagai NAT saja (Tanya kenapa??). NAT juga sering di artikan sebagai Native Address Translation, IP/Network masquerading, Namun anda tidak perlu bingung karena pada dasarnya sama saja. Implementasi NAT yang paling sederhana adalah penggunaan internet gateway, dimana dengan satu IP publik kita bisa menghubungkan beberapa Host yang ber-IP lokal dengan jaringan internet. ----[ How it works Pada dasarnya setiap packet data yang lewat pada jaringan memiliki banyak kode dan option tertentu pada header dari packet itu. kode dan option tersebut itu sangat penting dalam perjalanan packet tersebut sampai ke tujuan, karenanya sedikit banyak kita harus tahu tentang header dari packet tersebut. Dalam jaringan TCP/IP, packet data tidak dikirim secara "langsung" namun memiliki beberapa aturan dan perjalanan yang cukup rumit. Untuk ilustrasi coba anda perhatikan header dari protokol IPv4 berikut.. .-------+-------+---------------+-------------------------------. |Version| IHL |Type of Service| Total Length | |-------+-------+---------------+-------------------------------| | Identification |Flags| Fragment Offset | |---------------+---------------+-------------------------------| | Time to Live | Protocol | Header Checksum | |---------------+---------------+-------------------------------| | Source Address | |---------------------------------------------------------------| | Destination Address | `---------------------------------------------------------------' Bagi anda yang terbiasa menganalisa packet data yang bertebaran di jaringan tentu sudah memahami maksud dari header diatas. Dalam header tersebut bisa dilihat bahwa dalam sebuah packet ada beberapa informasi penting yang dibutuhkan agar packet data sampai ke tujuan. Pada saat sebuah aplikasi [misalnya openssh] melakukan transaksi file, maka packet data akan berisi aplication header, dan jenis protokkol,kemudian packet tersebut akan beranjak ke layer di bawahnya yaitu layer Transfer, dimana disini akan terjadi pemilihan layanan transaksi data, apakah akan menggunakan tcp atau udp, tergantung dari header aplikasi yang mengirim. Pada layer berikutnya kemudian akan di tambahkan lagi header IP tujuan dan IP sumber, proses routing terjadi disini. Ketika ip tujuan berada dalam satu jaringan maka tugas link layer yang akan melihat arp cachenya dan kemudian akan mengirim sinyal ke mac address tujuan, kalau kemudian ip tujuan berada di luar range jaringan ID maka system akan mencari default router untuk meneruskan packet tersebut. Nah, disini-lah bisa terjadi pemalsuan atau peracunan arp-cache, karena link layer bekerja dengan bantuan arp [hello master MiTM :P]. [ Application Layer ] [ Application Layer ] | ^ v | [ Transfer Layer ] [ Transfer Layer ] | ^ v | [ IP Layer/ Routing ] [ IP Layer / Routing ] | ^ v | [ Link Layer] [ Link Layer / Physicall ] | | +------------------------------------------+ Ketika packet data diterima oleh Node tujuan, packet akan melewati beberapa layer mulai dari paling bawah, yaitu link layer sampai kepada aplikasi yang dituju. Proses penerimaan data tersebut juga memiliki beberapa step sebelum data benar-benar sampai ke end user. setiap layer akan ada pemeriksaan header dari packet data yang masuk. Ketika packet data sudah mengalami perubahan dan atau rusak pada perjalanan packet data tersebut, kemungkinan paker data tersebut akan di tolak oleh salah satu layer. Ok, setelah sedikit memberi gambaran tentang perjalanan packet data, sekarang mari kita fokus ke proses routing. Dalam proses routing informasi tentang header dari packet data sangat penting, karena dari header tersebut dapat diketahui apakat packet data ditujukan kepada host yang ada dalam satu segmen jaringan atau berada diluar jaringan dari host itu sendiri. Apabila alamat tujuan dalam header berada dalam satu jaringan maka packet data akan langsung di kirim ke node yang dituju, sedangkan apabila node tujuan berada diluar dari jaringan intra maka secara default system akan mencari default router yang akan meneruskan packet data ke luar jaringan sehingga packet data sampai ke node tujuan. Ketika header dari packet data menunjukan bahwa node tujaun berada di luar jaringan, maka tugas default router-lah yang akan meneruskan packet data tersebut berdasarkan table routing yang dia miliki. sampai disini saya pikir kita sudah paham proses perjalanan data dan proses routing [minimal konsep dasar :P]. ----[Core Of NAT NAT berfungsi untuk melanjutkan packet data sesuai dengan header dari packet dan rule yang ada dalam host itu sendiri. ketika ada packet data dari luar dan masuk ke dalam jaringan intra, NAT [router/gateway] akan mengecek service atau port yang dituju oleh packet data tersebut, kemudian melanjutkan packet data tersebut ke dalam atau ke luar dari jaringan tersebut berdasarkan rule NAT yang telah ditetapkan sebelumnya. NAT itu sendiri terdiri dari beberapa metode antara lain: 1]. Source NAT Souce NAT terjadi pada kondisi dimana sumber packet yang datang akan dirubah alamat asalnya, misalnya scenario-nya adalah: localnetworks----->gateway[NAT]----->inet dimana gateway mempunyai 2 ethernet card. eth0 untuk lokal dan eth1 untuk publik, dimana setiap node dalam jaringan local akan mengeset default gateway ke alamat eth0. kemudian NAT akan mengubah header packet dalam hal ini alamat asal dari ethX setiap node ke eth1-nya gateway, kira-kira ilustrasinya seperti berikut [dengan iptables]: iptables .t nat .A POSTROUTING .s netwoks-local-id .j SNAT .-to ip-publik-gateway[eth1] dengan kondisi diatas, ketika node A merequest web service di server X, maka server X seakan mendengar koneksi dari gateway tadi, padahal yang merequest adalah node A dalam jaringan intra yang notabene memiliki IP Private. 2]. Destination NAT kebalikan dari SNAT, DNAT akan merubah header packet dalam hal ini adalah alamat tujuan dari packet tersebut, kira-kira ilustrasinya seperti berikut: webserver[local]<-----gateway[NAT]<-----inet<-------Client iptables .t nat .A PREROUTING .p tcp --dport 80 .j DNAT --to-destination ip-private[local]:80 End user yang mengakses web server seakan-akan menganggap bahwa yang dia akses adalah gateway padahal sebenarnya adalah host yang memiliki IP-Private ----[ NAT Sample 1]. Internet Gateway Salah satu contoh sederhana dari NAT adalah Internet gateway [Internet proxy] untuk koneksi internet, misalnya kita memasang proxy [e.g squid] pada gateway, maka setiap request dari setiap node dalam jaringan intra itu akan di redirect ke port proxy tersebut... contohnya: iptables -t nat -A PREROUTING -i eth0[local] -p tcp .dport 80 -j REDIRECT .to-port [port proxy] bagi anda yang paham tentang penggunaan IPTABLES, tentunya paham dengan kondisi seperti diatas, dimana semua koneksi yang masuk melalui port 80 [http] akan diredirect ke port proxy yang telah kita setting sebelumnya! 2]. Server CLuster Salah satu keunggulan dari NAT adalah end user di internet akan selalu menganggap bahwa internet server [web server, mysql server or ftp server] adalah tunggal atau berdiri sendiri. Padahal belum tentu :D, saat sekarang dimana kondisi lalu lintas internet semakin padat kemungkinan besar internet server juga akan bekerja secara bersama oleh beberapa computer [clustering]. NAT dalam hal ini akan membagi beban kerja server-server yang ada sehingga kelihatan tunggal padahal tidak, tentu ini juga berkaitan dengan security reason bukan ;) contohnya: iptables -t nat -A PREROUTING -j DNAT -i eth0[public] -p tcp/udp --dport 80 --to-destination ip-host1:80 iptables -t nat -A PREROUTING -j DNAT -i eth0[public] -p tcp/udp --dport 23 --to-destination ip-host2:23 iptables -t nat -A PREROUTING -j DNAT -i eth0[public] -p tcp/udp --dport 21 --to-destination ip-host3:21 Maksud dari beberapa baris perintah diatas, melakukan redirection setiap request http akan diredirect ke host1, request telnet akan ke host2 dan request ftp akan ke host3. ----[ Penutup Artikel kecil ini hanyalah memberikan gambaran singkat yang mungkin masih jauh dari cukup tentang NAT dan Aliran packet data, segala saran dan kritik sangat diharapkan demi kemajuan tulisan-tulisan berikutnya.... ----[ Referensi 1]. http://en.wikipedia.org/wiki/Network_address_translation 2]. http://www.netfilter.org/documentation/HOWTO//NAT-HOWTO.html 3]. Manual IPTABLES o0o LogCode Documentations o0o ------------------------------ http:/www.logcode.net/