Sekilas Tentang RIP
Saat belajar CCNA dulu, salah satu materi yang menarik adalah soal routing protocol. Protokol routing yang paling pertama diajarkan adalah RIP (Routing Information Protokol). Katanya RIP adalah salah satu protokol routing yang paling tua umurnya. RIP termasuk dalam kategori distance vector routing protocol. Proses routing ditentukan berdasarkan perhitungan jarak terdekat antar router, berapa router yang harus dilewati yang diperlukan untuk mencapai tujuan. Masing-masing router akan berbagi topologi jaringannya kepada setiap router di dekatnya (neighbor router).
Salah satu kelemahan RIP adalah tidak bisa melakukan routing antar jaringan yang menggunakan subnetting (classless network). RIP hanya bisa melakukan routing antar jaringan dengan classfull netmask. Classfull netmask misalnya 255.255.0.0 atau 255.255.255.0.
Misalnya dua jaringan masing-masing menggunakan network address 192.168.10.0/26 dan 192.168.10.64/26. Normalnya IP dengan prefiks 192.168.xxx.xxx termasuk pada class C & memiliki subnet mask 255.255.255.0 (atau biasa ditulis dalam notasi /24). Tapi dua jaringan tadi menggunakan /26 atau bisa ditulis menjadi 255.255.255.192, artinya 2 jaringan tadi tidak lagi menggunakan class C subnetmask. Dua jaringan itu menggunakan apa yang disebut sebagai Classless Subnet.
RIP tidak bisa membedakan dua jaringan yang menggunakan “classless subnet”. Bagi RIP kedua jaringan tersebut berada pada jaringan yang sama : 192.168.10.0 255.255.255.0. Kelemahan ini diperbaiki pada RIP versi 2 yang mendukung CIDR (Classless Inter-Domain Routing). Dengan RIP versi 2 kita bisa mengatur routing jaringan yang menggunakan subnetting (jaringan dengan classless subnetmask).
Testing RIPv2 Dengan FreeBSD Sebagai Router
Misalnya saya ingin mensimulasikan struktur jaringan seperti pada gambar di bawah ini :
Tanpa adanya proses routing, PC1 tidak bisa berkomunikasi dengan PC2 & PC3. Begitupun seterusnya untuk PC2 & PC3, masing-masing akan terisolir dalam jaringannya masing-masing. Router bertugas mengatur lalu lintas data dari jaringan yang satu ke jaringan yang lainnya. Router bisa berupa dedicated hardware seperti Cisco Router atau Unix server. Semua sistem operasi Unix punya fitur untuk melakukan proses routing.
Dengan menggunakan VirtualBox saya bisa membuat beberapa virtual machine untuk mensimulasikan routing dengan protokol RIP. Saya ingin mencoba menggunakan FreeBSD sebagai router. Saya buat 6 virtual machine, 3 sebagai router & 3 lainnya sebagai client dalam 3 jaringan yang berbeda. Saya belajar menggunakan FreeBSD 9 sebagai router. Sementara untuk komputer client saya gunakan Tiny Linux. Saya pilih Tiny Linux untuk menghemat memory resource & space harddisk, Tiny Linux hanya perlu beberapa puluh Megabyte space harddisk saja.
FreeBSD menyediakan daemon routed
untuk melakukan proses routing. Untuk mengaktifkan daemon tersebut saya perlu menambahkan beberapa baris berikut ini dalam berkas /etc/rc.conf
:
routed_enable="YES" routed_program="/sbin/routed" routed_flags="-P ripv2,rdisc_interval=45"
Parameter flag -P ripv2
maksudnya kita minta FreeBSD untuk menggunakan protokol RIP versi 2. Sementara parameter rdisc_interval
itu maksudnya kita mengatur daemon routed
supaya melakukan broadcast routing table-nya setiap 45 detik sekali. Hal tersebut karena dalam protokol RIP, masing-masing router akan saling berbagi routing table dengan semua router “di sekitarnya”.
Berikut ini adalah konfigurasi di masing-masing virtual machine :
- Router 1 menggunakan hostname “
routerA
”, mesin ini memiliki 2 network interface :- Network interface
em0
menggunakan IP address 192.168.5.1/24. Interface ini akan bertindak sebagai default gateway bagi jaringan (LAN#1) dengan network address 192.168.5.0 (255.255.255.192). - Network interface
em1
menggunakan IP address 192.168.5.193/30. Interface akan terhubung denganrouterB
. Dalam diagram di atas koneksi ini disebut sebagai WAN#1 dengan network address 192.168.5.192/30.
Semua konfigurasi tadi disimpan dalam berkas
/etc/rc.conf
seperti berikut ini :ttirtawi@routerA:~ % cat /etc/rc.conf hostname="routerA" # Interface em0 connect to LAN #1 network 192.168.5.0 /26 ifconfig_em0="inet 192.168.5.1 netmask 255.255.255.192" # Interface em1 connect to WAN #1 network 192.168.5.192 /30 ifconfig_em1="inet 192.168.5.193 netmask 255.255.255.252" gateway_enable="YES" sshd_enable="YES" # Configuration for RIPv2 routing protocol routed_enable="YES" routed_program="/sbin/routed" routed_flags="-P ripv2,rdisc_interval=45" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="NO" allscreens_flags="MODE_332" ipv6_activate_all_interfaces="NO" ttirtawi@routerA:~ %
- Network interface
- Router 2 menggunakan hostname “
routerB
”, mesin ini memiliki 3 network interface :- Network interface
em0
menggunakan IP address 192.168.5.65/24. Interface ini akan bertindak sebagai default gateway bagi jaringan (LAN#2) dengan *network address * 192.168.5.64 (255.255.255.192). - Network interface
em1
menggunakan IP address 192.168.5.194/30. Interface akan terhubung denganrouterA
. Dalam diagram di atas koneksi ini disebut sebagai WAN#1 dengan network address 192.168.5.192/30. - Network interface
em2
menggunakan IP address 192.168.5.197/30. Interface akan terhubung denganrouterC
. Dalam diagram di atas koneksi ini disebut sebagai WAN#2 dengan network address 192.168.5.196/30.
Semua konfigurasi tadi disimpan dalam berkas
/etc/rc.conf
seperti berikut ini :ttirtawi@routerB:~ % cat /etc/rc.conf hostname="routerB" # Interface em0 connect to LAN #2 network 192.168.5.64 /26 ifconfig_em0="inet 192.168.5.65 netmask 255.255.255.192" # Interface em1 connect to WAN #1 network 192.168.5.192 /30 ifconfig_em1="inet 192.168.5.194 netmask 255.255.255.252" # WAN 2 network 192.168.5.196 /30 ifconfig_em2="inet 192.168.5.197 netmask 255.255.255.252" gateway_enable="YES" sshd_enable="YES" # Configuration for RIPv2 routing protocol routed_enable="YES" routed_program="/sbin/routed" routed_flags="-P ripv2,rdisc_interval=45" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="NO" allscreens_flags="MODE_332" ipv6_activate_all_interfaces="NO" ttirtawi@routerB:~ %
- Network interface
- Router 3 menggunakan hostname “
routerC
”, mesin ini memiliki 2 network interface :- Network interface
em0
menggunakan IP address 192.168.5.129/24. Interface ini akan bertindak sebagai default gateway bagi jaringan (LAN#2) dengan *network address * 192.168.5.128 (255.255.255.192). - Network interface
em1
menggunakan IP address 192.168.5.198/30. Interface akan terhubung denganrouterB
. Dalam diagram di atas koneksi ini disebut sebagai WAN#2 dengan network address 192.168.5.196/30.
Semua konfigurasi tadi disimpan dalam berkas
/etc/rc.conf
seperti berikut ini :ttirtawi@routerC:~ % cat /etc/rc.conf hostname="routerC" # Interface em0 connect to LAN#3 network 192.168.5.128 /26 ifconfig_em0="inet 192.168.5.129 netmask 255.255.255.192" # Interface em1 connect to WAN#2 network 129.168.5.196 /30 ifconfig_em1="inet 192.168.5.198 netmask 255.255.255.252" gateway_enable="YES" sshd_enable="YES" # RIPv2 routing protocol routed_enable="YES" routed_program="/sbin/routed" routed_flags="-P ripv2,rdisc_interval=45" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="NO" allscreens_flags="MODE_332" ipv6_activate_all_interfaces="NO" ttirtawi@routerC:~ %
- Network interface
PC1
memiliki hostname “lan1host01
”, virtual machine ini terhubung dengan LAN#1 & menggunakan IP address 192.168.5.2 255.255.255.192.PC2
memiliki hostname “lan2host01
”, virtual machine ini terhubung dengan LAN#2 & menggunakan IP address 192.168.5.66 255.255.255.192.PC3
, memiliki hostname “lan3host01
”, virtual machine ini terhubung dengan LAN#3 & menggunakan IP address 192.168.5.130 255.255.255.192.
Setelah selesai melakukan konfigurasi keenam VirtualBox VM tadi, saya tinggal me-restart masing-masing VM untuk mengaktifkan konfigurasinya. Khusus untuk FreeBSD, bila konfigurasi IP & routing daemon sudah ada di dalam berkas /etc/rc.conf
, sebenarnya saya bisa mengaktifkannya dengan perintah berikut ini (tanpa perlu restart) :
ttirtawi@routerC:~ % /etc/rc.d/netif restart ttirtawi@routerC:~ % /etc/rc.d/routed restart ttirtawi@routerC:~ % /etc/rc.d/routing restart
Untuk memeriksa apakah protokol RIP versi 2 sudah aktif, saya bisa gunakan perintah rtquery
pada masing-masing router. Misalnya seperti contoh berikut ini, saya menjalankan perintah rtquery
pada routerA
:
ttirtawi@routerA:~ % rtquery localhost (127.0.0.1): RIPv2 104 bytes 192.168.5.0/26 metric 1 192.168.5.64/26 metric 2 nhop=192.168.5.194 192.168.5.128/26 metric 3 nhop=192.168.5.194 192.168.5.192/30 metric 1 192.168.5.196/30 metric 2 nhop=192.168.5.194 ttirtawi@routerA:~ %
Dari hasil perintah rtquery
saya bisa lihat kalau routerA sekarang sudah bisa “melihat” LAN#2 & LAN#3 meskipun routerA sendiri tidak punya koneksi fisik ke 2 jaringan tersebut. Dua parameter yang muncul dari hasil perintah rtquery
adalah :
nhop
(next hop) : Informasinhop=192.168.5.194
artinya untuk mengakses LAN#2 & LAN#3,routerA
harus meneruskan paket data melalui IP 192.168.5.194 milikrouterB
. Semua data menuju LAN#2 & LAN#3 akan diteruskan kerouterB
untuk sampai ke tujuan akhirnya.metric
: Informasimetric
menandakan berapa jumlah “lompatan” yang harus dilalui untuk sampai ke tujuan akhir. Misalnya, bilarouterA
akan mengirimkan data ke jaringan 192.168.5.128/26, kita lihat informasi metric 3, berarti data akan dikirimkan lewat 2 router atau 2 “hop”. Hop pertama adalahrouterB
dan hop kedua adalahrouterC
. Informasi “metric 1
” artinya jaringan tersebut terhubung langsung ke router yang bersangkutan.
Berikut ini adalah contoh hasil rtquery
pada kedua router lainnya :
ttirtawi@routerB:~ % rtquery localhost (127.0.0.1): RIPv2 104 bytes 192.168.5.0/26 metric 2 nhop=192.168.5.193 192.168.5.64/26 metric 1 192.168.5.128/26 metric 2 nhop=192.168.5.198 192.168.5.192/30 metric 1 192.168.5.196/30 metric 1 ttirtawi@routerB:~ % ttirtawi@routerC:~ % rtquery localhost (127.0.0.1): RIPv2 104 bytes 192.168.5.0/26 metric 3 nhop=192.168.5.197 192.168.5.64/26 metric 2 nhop=192.168.5.197 192.168.5.128/26 metric 1 192.168.5.192/30 metric 2 nhop=192.168.5.197 192.168.5.196/30 metric 1 ttirtawi@routerC:~ %
Dengan menggunakan perintah tcpdump
saya juga bisa melihat kiriman routing table dari routerB
. Paket yang berisi routing table akan diterima oleh routerA
melalui interface em1
:
root@routerA:~ # tcpdump -i em1 -vvv tcpdump: listening on em1, link-type EN10MB (Ethernet), capture size 65535 bytes 21:54:23.144882 IP (tos 0x0, ttl 1, id 378, offset 0, flags [none], proto ICMP (1), length 36) 192.168.5.194 > 224.0.0.1: ICMP router advertisement lifetime 2:15 1: {192.168.5.194 2147483649}, length 16 21:54:44.175029 IP (tos 0x0, ttl 1, id 380, offset 0, flags [none], proto UDP (17), length 92) 192.168.5.194.router > 224.0.0.9.router: [udp sum ok] RIPv2, Response, length: 64, routes: 3 or less AFI IPv4, 192.168.5.64/26, tag 0x0000, metric: 1, next-hop: self AFI IPv4, 192.168.5.192/30, tag 0x0000, metric: 1, next-hop: self AFI IPv4, 192.168.5.196/30, tag 0x0000, metric: 1, next-hop: self 0x0000: 0202 0000 0002 0000 c0a8 0540 ffff ffc0 0x0010: 0000 0000 0000 0001 0002 0000 c0a8 05c0 0x0020: ffff fffc 0000 0000 0000 0001 0002 0000 0x0030: c0a8 05c4 ffff fffc 0000 0000 0000 0001 21:55:04.284218 IP (tos 0x0, ttl 1, id 384, offset 0, flags [none], proto ICMP (1), length 36) 192.168.5.194 > 224.0.0.1: ICMP router advertisement lifetime 2:15 1: {192.168.5.194 2147483649}, length 16 21:55:14.174453 IP (tos 0x0, ttl 1, id 386, offset 0, flags [none], proto UDP (17), length 92) 192.168.5.194.router > 224.0.0.9.router: [udp sum ok] RIPv2, Response, length: 64, routes: 3 or less AFI IPv4, 192.168.5.64/26, tag 0x0000, metric: 1, next-hop: self AFI IPv4, 192.168.5.192/30, tag 0x0000, metric: 1, next-hop: self AFI IPv4, 192.168.5.196/30, tag 0x0000, metric: 1, next-hop: self 0x0000: 0202 0000 0002 0000 c0a8 0540 ffff ffc0 0x0010: 0000 0000 0000 0001 0002 0000 c0a8 05c0 0x0020: ffff fffc 0000 0000 0000 0001 0002 0000 0x0030: c0a8 05c4 ffff fffc 0000 0000 0000 0001 21:55:44.174523 IP (tos 0x0, ttl 1, id 391, offset 0, flags [none], proto UDP (17), length 92) 192.168.5.194.router > 224.0.0.9.router: [udp sum ok] RIPv2, Response, length: 64, routes: 3 or less AFI IPv4, 192.168.5.64/26, tag 0x0000, metric: 1, next-hop: self AFI IPv4, 192.168.5.192/30, tag 0x0000, metric: 1, next-hop: self AFI IPv4, 192.168.5.196/30, tag 0x0000, metric: 1, next-hop: self 0x0000: 0202 0000 0002 0000 c0a8 0540 ffff ffc0 0x0010: 0000 0000 0000 0001 0002 0000 c0a8 05c0 0x0020: ffff fffc 0000 0000 0000 0001 0002 0000 0x0030: c0a8 05c4 ffff fffc 0000 0000 0000 0001 21:55:47.024706 IP (tos 0x0, ttl 1, id 393, offset 0, flags [none], proto ICMP (1), length 36) 192.168.5.194 > 224.0.0.1: ICMP router advertisement lifetime 2:15 1: {192.168.5.194 2147483649}, length 16 ^C 6 packets captured 6 packets received by filter 0 packets dropped by kernel root@routerA:~ #
Dari hasil tcpdump
, kita juga bisa lihat kalau routerB
aktif mengirimkan routing table-nya setiap 30 detik sekali.
Tes Routing
Tanpa Proses Routing
Tanpa proses routing, routing table routerA
seperti berikut ini :
ttirtawi@routerA:~ % netstat -rn -f inet Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire 127.0.0.1 link#3 UH 0 0 lo0 192.168.5.0/26 link#1 U 0 66 em0 192.168.5.1 link#1 UHS 0 0 lo0 192.168.5.192/30 link#2 U 0 0 em1 192.168.5.193 link#2 UHS 0 0 lo0 ttirtawi@routerA:~ %
routerA
tidak bisa melakukan ping
ke PC2 :
ttirtawi@routerA:~ % ping 192.168.5.66 PING 192.168.5.66 (192.168.5.66): 56 data bytes ping: sendto: No route to host ping: sendto: No route to host ping: sendto: No route to host ^C --- 192.168.5.66 ping statistics --- 3 packets transmitted, 0 packets received, 100.0% packet loss ttirtawi@routerA:~ %
routerA
tidak bisa melakukan ping
ke PC3 :
ttirtawi@routerA:~ % ping 192.168.5.130 PING 192.168.5.130 (192.168.5.130): 56 data bytes ping: sendto: No route to host ping: sendto: No route to host ping: sendto: No route to host ^C --- 192.168.5.130 ping statistics --- 3 packets transmitted, 0 packets received, 100.0% packet loss ttirtawi@routerA:~ %
routerA
tidak bisa melakukan ping
ke interface em0
miliki routerC
:
ttirtawi@routerA:~ % ping 192.168.5.129 PING 192.168.5.129 (192.168.5.129): 56 data bytes ping: sendto: No route to host ping: sendto: No route to host ^C --- 192.168.5.129 ping statistics --- 2 packets transmitted, 0 packets received, 100.0% packet loss ttirtawi@routerA:~ %
routerA
tidak bisa melakukan ping
ke interface em0
milik routerB
:
ttirtawi@routerA:~ % ping 192.168.5.65 PING 192.168.5.65 (192.168.5.65): 56 data bytes ping: sendto: No route to host ping: sendto: No route to host ^C --- 192.168.5.65 ping statistics --- 2 packets transmitted, 0 packets received, 100.0% packet loss ttirtawi@routerA:~ %
routerA
bisa melakukan ping
ke interface em1
milik routerB
karena routerA
terhubung langsung ke interface tersebut :
ttirtawi@routerA:~ % ping 192.168.5.194 PING 192.168.5.194 (192.168.5.194): 56 data bytes 64 bytes from 192.168.5.194: icmp_seq=0 ttl=64 time=0.522 ms 64 bytes from 192.168.5.194: icmp_seq=1 ttl=64 time=0.931 ms 64 bytes from 192.168.5.194: icmp_seq=2 ttl=64 time=0.831 ms 64 bytes from 192.168.5.194: icmp_seq=3 ttl=64 time=0.571 ms ^C --- 192.168.5.194 ping statistics --- 4 packets transmitted, 4 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.522/0.714/0.931/0.172 ms ttirtawi@routerA:~ %
Hal yang sama dialami oleh mesin lan1host01
dalam LAN#1, mesin ini tidak bisa mengakses mesin lan2host01
& lan3host01
:
ttirtawi@lan1host01:~$ ping 192.168.5.1 PING 192.168.5.1 (192.168.5.1): 56 data bytes 64 bytes from 192.168.5.1: seq=0 ttl=64 time=0.851 ms 64 bytes from 192.168.5.1: seq=1 ttl=64 time=0.967 ms 64 bytes from 192.168.5.1: seq=2 ttl=64 time=0.929 ms 64 bytes from 192.168.5.1: seq=3 ttl=64 time=0.692 ms ^C --- 192.168.5.1 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.692/0.859/0.967 ms ttirtawi@lan1host01:~$ ttirtawi@lan1host01:~$ ping 192.168.5.66 PING 192.168.5.66 (192.168.5.66): 56 data bytes ^C --- 192.168.5.66 ping statistics --- 63 packets transmitted, 0 packets received, 100% packet loss ttirtawi@lan1host01:~$ ttirtawi@lan1host01:~$ ping 192.168.5.130 PING 192.168.5.130 (192.168.5.130): 56 data bytes ^C --- 192.168.5.130 ping statistics --- 9 packets transmitted, 0 packets received, 100% packet loss ttirtawi@lan1host01:~$ ttirtawi@lan1host01:~$ traceroute 192.168.5.66 traceroute to 192.168.5.66 (192.168.5.66), 30 hops max, 38 byte packets 1 192.168.5.1 (192.168.5.1) 0.488 ms 0.360 ms 0.248 ms 2 192.168.5.1 (192.168.5.1) 0.303 ms !H 0.196 ms !H 0.148 ms !H ttirtawi@lan1host01:~$ ttirtawi@lan1host01:~$ traceroute 192.168.5.130 traceroute to 192.168.5.130 (192.168.5.130), 30 hops max, 38 byte packets 1 192.168.5.1 (192.168.5.1) 0.589 ms 0.435 ms 0.243 ms 2 192.168.5.1 (192.168.5.1) 0.007 ms !H 0.139 ms !H 0.355 ms !H ttirtawi@lan1host01:~$
Perintah traceroute
di atas menunjukkan kalau semua akses akan berhenti pada IP 192.168.5.1 yaitu default gateway-nya (routerA
).
Setelah Proses Routing Aktif
Setelah proses routing aktif (setelah sesama router saling berbagi routing table), tampilan routing table-nya routerA
menjadi seperti berikut ini :
ttirtawi@routerA:~ % netstat -rn -f inet Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire 127.0.0.1 link#3 UH 0 0 lo0 192.168.5.0/26 link#1 U 0 6718 em0 192.168.5.1 link#1 UHS 0 0 lo0 192.168.5.64/26 192.168.5.194 UG 0 2 em1 192.168.5.128/26 192.168.5.194 UG 0 1 em1 192.168.5.192/30 link#2 U 0 436 em1 192.168.5.193 link#2 UHS 0 0 lo0 192.168.5.196/30 192.168.5.194 UG 0 0 em1 ttirtawi@routerA:~ %
routerA
sekarang punya informasi rute yang harus diambil untuk meneruskan data ke LAN#2 (192.168.5.64/26) & LAN#3 (192.168.5.128/26).
Begitu juga routerB
sekarang punya informasi rute menuju LAN#1 (192.168.5.0/26) & LAN#3 (192.168.5.128/26) :
ttirtawi@routerB:~ % netstat -rn -f inet Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire 127.0.0.1 link#4 UH 0 0 lo0 192.168.5.0/26 192.168.5.193 UG 0 1257 em1 192.168.5.64/26 link#1 U 0 241 em0 192.168.5.65 link#1 UHS 0 0 lo0 192.168.5.128/26 192.168.5.198 UG 0 446 em2 192.168.5.192/30 link#2 U 0 103 em1 192.168.5.194 link#2 UHS 0 0 lo0 192.168.5.196/30 link#3 U 0 0 em2 192.168.5.197 link#3 UHS 0 0 lo0 ttirtawi@routerB:~ %
Dan terakhir routerC
juga tidak ketinggalan sudah memiliki informasi rute menuju LAN#1 (192.168.5.0/26) & LAN#2 (192.168.5.64/26)
ttirtawi@routerC:~ % netstat -rn -f inet Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire 127.0.0.1 link#3 UH 0 0 lo0 192.168.5.0/26 192.168.5.197 UG 0 387 em1 192.168.5.64/26 192.168.5.197 UG 0 0 em1 192.168.5.128/26 link#1 U 0 678 em0 192.168.5.129 link#1 UHS 0 0 lo0 192.168.5.192/30 192.168.5.197 UG 0 13 em1 192.168.5.196/30 link#2 U 0 64 em1 192.168.5.198 link#2 UHS 0 0 lo0 ttirtawi@routerC:~ %
Masing-masing PC dari tiap jaringan sekarang sudah bisa berkomunikasi, seperti terlihat pada contoh tangkapan layar berikut ini :
Kira-kira seperti itu percobaan saya menggunakan FreeBSD sebagai router dengan RIP versi 2 sebagai protokol routing-nya.