NAT di CISO
Network Address Translation (NAT) adalah suatu teknik untuk mengubah suatu
IP address ke IP address yg lain. Hal ini bisa dikarenakan karena di
jaringan kita mengunakan network address yg disebut private address space di
RFC 1918 (http://www.faqs.org/rfcs/rfc1918.html),
yaitu:
10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
Dan karena ini adalah private address, jaringan kita tentunya tidak dapat
berkomunikasi dgn jaringan lain di Internet, karena semua host yg ingin
terkoneksi di Internet harus menggunakan global atau public IP address.
Untuk ini kita perlu men-translate IP address kita yg private menjadi public
IP address.
Alasan lain untuk menggunakan NAT adalah security. Kita bisa men-translate
seluruh jaringan kita (missal 254 PC) menjadi 1 public IP. Teknik ini
disebut Many-to-one NAT atau biasa disebut Port Address Translation (PAT).
Teknik ini sangat bermanfaat jika kita menginginkan user di jaringan kita
untuk meng-inisiasi koneksi ke Internet (browsing internet atau mengirim
email misalnya), tapi kita tidak menginginkan host dari Internet untk
meng-inisiasi koneksi ke PC user kita.
Host dari Internet tidak bisa meng-inisiasi koneksi ke internal host kita
karena hanya ada 1 public IP address yg terlihat di jaringan kita, sedangkan
jumlah PC yg sebenarnya ada lebih dari 1. Tentunya jika PC kita yg
meng-inisiasi, maka reply atau return packet akan bisa kembali karena device
yg kita gunakan untuk melakukan NAT, akan memiliki mapping table dari NAT yg
terjadi di jaringan.
Untuk kasus one-to-one NAT, dimana 1 private IP akan di-translate menjadi 1
global IP, maka mapping nya akan spt berikut:
R4#sh ip nat tra
Pro Inside global Inside local Outside local Outside global
— 195.1.134.1 192.168.1.1 — —
— 195.1.134.2 192.168.1.2 — —
Dalam contoh ini, IP private 192.168.1.1 di-translate ke public IP
195.1.134.1, IP private 192.168.1.2 di-translate ke public IP
195.1.134.2 dst.
Inside local adalah terminologi utk real IP address PC di jaringan kita,
sedangkan Inside Global adalah public IP address yg kita gunakan untuk
men-translasi real IP address tsb.
Outside local adalah local IP address dari tujuan kita sebagaimana kita
melihatnya dari jaringan kita. Sedangkan Outside global adalah global IP
address dari tujuan kita yg terlihat di Internet.
Ini bermanfaat utk destination based NAT, yg sayangnya tidak dibahas di
posting ini, sbg contoh sbg berikut:
ada server di Internet dgn global IP address 11.11.11.11 tapi kita ingin
semua users di jaringan kita utk melihat server tsb sbg 192.168.1.11 Maka
kita bisa melakukan destination based NAT, dgn outside local adalah
192.168.1.11 dan outside global, IP address tujuan yg sebenernya, adalah
11.11.11.11.
Jika kita tidak melakukan destination based NAT, maka outside local dan
outside global dari tujuan kita akan sama, yaitu public IP tujuan yg
sebenernya, dan ini bisa dilihat di contoh mapping PAT.
Untuk contoh Many-to-one NAT atau PAT, dimana banyak real IP dari PC kita
di-translate menjadi 1 public IP, maka contoh mapping nya sbg
berikut:
R4#sh ip nat tra
Pro Inside global Inside local Outside local Outside global
tcp 195.1.134.4:12338 192.168.1.3:12338 33.33.33.33:23 33.33.33.33:23
tcp 195.1.134.4:12337 192.168.1.2:12337 22.22.22.22:23
22.22.22.22:23
Dalam contoh ini, kita melakukan telnet ke remote host 22.22.22.22 dari
private IP 195.1.1.2, dan telnet ke remote host 33.33.33.33 dari private IP
192.168.1.3.
Kita bisa lihat bahwa ke-2 private IP kita di-translate ke public IP yg
sama, yaitu 195.1.134.4. Yg membedakan adalah source port yg digunakan di
public IP.
Jadi di mapping ini terlihat bahwa koneksi dari 192.168.1.2 di map ke
195.1.134.4 port 12337, sedangkan koneksi dari 192.168.1.3 di map ke
195.1.134.4 port 12338.
Dgn adanya mapping ini, remote host 22.22.22.22 ketika mengirimkan paket
reply (ingat di TCP/IP reply dari remote host destination port nya ditujukan
ke source port dari host kita), akan mengirimkan paket ke 195.1.134.4 port
12337. Sedangkan reply packet dari 33.33.33.33 kan ke 195.1.134.4 port
12338.
Berdasarkan mapping tadi, NAT device atau router yg melakukan map bisa
mengetahui bahwa packet reply dari 22.22.22.22 harus dikirimkan ke host
192.168.1.2 dan paket reply dari 33.33.33.33 harus dikirimkan ke host
192.168.1.3
Dari ke-2 contoh di atas kelihatan bahwa untuk normal NAT atau one-to-one
NAT, setiap private IP akan memiliki public IP sendiri sehingga setiap host
di jaringan kita masih bisa di hubungi dari luar, host dari Internet masih
bisa utk menghubungi tiap host kita karena mereka memiliki public IP yg
berbeda-beda.
Namun untuk kasus many-to-one NAT atau PAT, host dari Internet tidak dapat
menghubungi setiap host karena semua host memiliki 1 public IP yg sama. Host
dari internet hanya bisa me-reply koneksi dari host kita berdasarkan source
port yg berbeda-beda.
Ok, langsung masuk contoh konfigurasi biar makin jelas. Contoh dilakukan dgn
menggunakan Cisco router dgn 1 ethernet interface konek ke internal network
dan 1 serial interface konek ke Internet. Kalo udah ngerti konsepnya bisa
pake NAT device apa aja, gue sendiri buat memproteksi home lab gue pake
OpenBSD PF.
Topologi:
Internal network - (eth0) router (s0/0) - internet
Internal network kita menggunakan private IP 192.168.1.0/24.
IP address eth0 router kita 192.168.1.1 yg merupakan default gateway dari
semua host di internal network.
1. Many-to-one PAT, semua private IP ke 1 public IP address
Kita dapet 1 IP address dari ISP 195.1.134.4 yg juga merupakan IP address
serial 0/0, maka konfigurasi PAT sbg berikut:
- Buat ACL yg mem-permit semua network 192.168.1.0/24
R4(config)#ip access-list standard internal_network
R4(config-std-nacl)#permit 192.168.1.0 0.0.0.255
- Bikin NAT rule untuk mentranslate net 192.168.1.0/24 ke 195.1.134.4 yg
merupakan IP address s0/0
R4(config)#ip nat inside source list internal_network interface s0/0
overload
- enable NAT di interface e0/0 dan s0/0
R4(config)#int e0/0
R4(config-if)#ip nat inside
R4(config)#int s0/0
R4(config-if)#ip nat outside
2. ISP kita ternyata memberikan kita public IP 195.1.134.0/24, yg berarti
range public IP yg bisa kita gunakan adalah 195.1.134.1 - 195.1.134.254. Ini
berarti kita bisa melakukan one-to-one NAT, contoh:
192.168.1.1 ke 195.1.134.1, 192.168.1.2 ke 195.1.134.2 dst.
Maka konfigurasi yg perlu dilakukan hanya:
R4(config)#ip nat inside source static network 192.168.1.0 195.1.134.0 /24
Tentunya enable NAT di e0/0 dan s0/0 spt contoh no.1
3. Kalo gak dapet persis 254 public IP gimana? Misal dapetnya
195.1.134.0/29, yg berarti range public IP yg bisa digunakan adalah
195.1.134.1-195.1.134.6 (ingat dgn /29 ada total 8 IP dari 0 sampai 7 tapi 0
adalah network address dan 7 sebagai IP terakhir merupakan broadcast
address).
Jika kita mau mentranslate net 192.168.1.0/24 ke range IP
195.1.134.1-195.1.134.6
- bikin NAT pool
R4(config)#ip nat pool public_IP 195.1.134.1 195.1.134.6 netmask
255.255.255.248
- bikin NAT rule, ada ACL spt contoh no.1 buat permit semua internal net
192.168.1.0/24
R4(config)#ip nat inside source list intenal_network pool public_IP
Jgn lupa enable NAT di e0/0 dan s0/0 spt contoh no.1
4. Ada masalah dgn contoh no.3? Ada.
Dalam 1 waktu, hanya ada 6 internal private IP yg bisa di translate ke
6 public IP. Jadi koneksi dari internal host ke 7 akan gagal dan harus
menunggu sampai translation table timeout.
Cara mengatasinya, kita bisa bikin pool dgn 5 public IP address, dan 1 IP
terakhir buat PAT. IP terakhir, 195.1.134.6 digunakan sbg IP address utk
interface s0/0
R4(config)#ip nat pool public_IP 195.1.134.1 195.1.134.5 netmask
255.255.255.248
R4(config)#Ip nat inside source list internal_network pool public_IP
R4(config)#Ip nat inside source list internal_network interface s0/0
overload
Dgn begini, 5 private IP yg pertama akan di translate ke 5 public IP ke
pool, sedangkan private IP yg lain akan di translate ke ip ke-6, yg
merupakan ip address dari interface s0/0.
5. Ok, ayo masuk ke contoh yg lebih advance:
Kita punya 6 public IP dari range 195.1.134.1.- 195.1.134.6 IP address
195.1.134.4 kita gunakan sbg ip address interface s0/0 router kita IP
address 195.1.134.1 digunakan oleh router ISP interface s0/0, yg merupakan
default gateway router kita IP address 195.1.134.2 mau kita gunakan sbg ip
address web server kita, dgn real IP 192.168.1.2 Dan IP addres 195.1.134.3
mau kita gunakan sbg ip address mail server kita, dgn real IP 192.168.1.3
Sisanya, 195.1.134.5 dan 6, akan kita pergunakan nanti buat server2 baru
- Bikin ACL buat semua network, access-list internal_network permit
192.168.1.0 0.0.0.255
- Konfigure PAT buat semua internal network ke interface s0/0
R4(config)#ip nat inside source list internal_network interface s0/0
overload
- Bikin one-to-one NAT buat web dan mail server
R4(config)#Ip nat inside source static 192.168.1.2 195.1.134.2 R4(config)#Ip
nat inside source static 192.168.1.3 195.1.134.3
Jgn kuatir jika terjadi overlap antara static NAT diatas dgn PAT di
konfigurasi sebelumnya. Static NAT akan meng-overide rule utk
192.168.1.2 dan 192.168.1.3, sehingga ke-2 IP tsb tidak akan di PAT meskipun
termasuk dlm ACL internal_network.
Jgn lupa enable NAT di interface s0/0 dan e0/0 spt contoh no.1
Dan kalo kita punya IOS FW dan ACL ingress in interface s0/0, maka kita
harus permit koneksi dari internet ke public IP web dan mail server kita,
dgn port yg terkait spt tcp 80 dan 25. Jadi di ACL ingress s0/0 jgn gunakan
real IP address.
6. Kita terkoneksi dgn ISP, router kita cuman dapet 1 public IP address buat
interface s0/0 tapi punya web server dan mail server? Jgn kuatir, ini bisa
dilakukan dgn teknik port redirection.
Jadi, bikin dulu PAT biar internal network kita bisa konek ke Internet
R4(config)#ip nat inside source list internal_network interface s0/0
overload
Trus bikin port redirection buat traffic ke port 80 dan 25, di contoh ini
private IP web server kita tetap 192.168.1.2 dan mail server
192.168.1.3
R4(config)#ip nat inside source static tcp 192.168.1.2 80 interface s0/0 80
R4(config)#ip nat inside source static tcp 192.168.1.3 25 interface s0/0 25
Dgn cara begini, traffic yg datang ke public IP interface serial port 80
akan di redirect ke real IP web server 192.168.1.2, dan traffic yg dating ke
serial port 25 akan di redirect ke reap IP mail server
192.168.1.3
Tinggal daftar di public DNS untuk web dan MX record mail server kita, untuk
me-resolve ke public IP router interface s0/0.
Mulai kerasakan The Power of NAT?
7. Ok, seandainya kita gak mau mentranlasi koneksi dari 192.168.1.0/24 ke
192.168.2.0/24 (katakanlah ini network partner kita dan kita setup VPN
misalnya), tapi kalo tujuannya ke internet maka spt contoh yg sebelumnya
kita mau translasikan dgn PAT ke interface s0/0
- bikin ACL, extended dgn men-deny traffic dari net 192.168.1.0 ke
192.168.2.0, tapi permit yg lain
R4(config)#Ip access-list extended selective_NAT R4(config-ext-nacl)#deny ip
192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 R4(config-ext-nacl)#permit ip
192.168.1.0 0.0.0.255 any
Lalu bikin PAT rules
R4(config)#Ip nat inside source list selective_NAT interface s0/0 overload
Karena di deny di ACL, maka traffic dari net 192.168.1.0 ke 192.168.2.0
tidak akan di translate, sedangkan diluar itu akan di PAT ke interface s0/0.
8. Makin advance, misalnya kita skrg punya 2 koneksi ke Internet, lewat
interface s0/0 ke ISP 1 dan lewat interface s0/1 ke ISP 2.
Ke-dua ISP tsb memberikan kita 1 public IP buat masing-masing interface
serial.
Kita mau pada saat internal network konek ke ISP 1, maka akan di translate
dan lewat interface s0/0, sedangkan pada saat internal network konek ke ISP
2 akan di translate dan lewat interface s0/1 (penentuan traffic dari
internal network akan ke ISP yg mana sebenernya di atur oleh normal routing,
atau bisa menggunakan policy based routing, tapi di contoh ini kita
berasumsi routingnya sudah jalan dan fokus kita adalah NAT berdasarkan
interface output dari
traffic)
Jadi kita menggunakan teknik policy based routing alias route-map untuk
melihat traffic dari internal network melalui interface serial yg mana,
kemudian akan di PAT secara sesuai:
R4(config)#route-map to_ISP1 permit 10
R4(config-route-map)#match interface s0/0
R4(config)#route-map to_ISP2 permit 10
R4(config-route-map)#match interface s0/1
R4(config)#Ip nat inside source route-map to_ISP1 interface s0/0 overload
R4(config)#Ip nat inside source route-map to_ISP2 interface s0/1 overload
Dgn ke-2 route-map tsb, packet yg akan keluar melalui interface s0/0 akan
match dgn route-map to_ISP1, dan di PAT ke interface s0/0 IP address.
Sedangkan packet yg akan keluad melalui interface s0/1 akan match dgn
route-map to_ISP2, dan di PAT ke interface s0/1 IP address.
Sebenernya masih banyak contoh dan trick penggunaan NAT dgn Cisco router,
misal load balancing di public IP pool, destination-based NAT dll. Tapi
kayaknya udah kepanjangan nih dan spt nya semua contoh di atas sudah cukup
buat small-medium business network.
Kalo ada masalah dgn konfigurasi NAT, periksa mapping kita dgn show ip nat
translation, dan lakukan debug ip nat.
Kalo mau baca-baca lebih lanjut, coba lihat NAT technical tips dan contoh
config dari CCO:
http://www.cisco.com/en/US/tech/tk648/tk361/tk438/tsd_technology_support_sub
-protocol_home.html
