Sekilas Tentang IP Forwarding

Test Fowarding RHEL6

Beberapa hari lalu salah seorang rekan bertanya via Whatsapp. Dia punya masalah dengan Linux servernya. Katanya servernya punya 2 IP (berbeda jaringan) & ada broadcast request yang datang dari network 1 ke network 2. Padahal menurut rekan saya, kedua IP tersebut harusnya terisolasi satu sama lain. Karena kami berkomunikasi via Whatsapp, saya kurang paham betul apa sebenarnya yang jadi masalah. Rekan saya minta pendapat apa saja yang perlu dicek. Dengan informasi yang terbatas itu saya cuma bisa menduga 2 hal, isu pada IP Forwarding atau Firewall.

Karena pertanyaan itu saya jadi berpikir lagi tentang IP Forwarding. Meskipun saya tahu cara mengaktifkan IP Forwarding di mesin Linux, tapi sampai sekarang saya belum pernah berhenti sejenak untuk memikirkan konsepnya seperti apa. Konsep IP Forwarding yang saya tahu secara sederhana kira-kira seperti ini :

  • Misalkan sebuah server punya 2 NIC (network interface card), NIC#1 terhubung ke network A & NIC#2 terhubung ke B.
  • Bila ada paket IP yang datang melalui NIC#1 menuju network B. Ada 2 kemungkinan yang terjadi :
    • Tanpa IP Forwarding, server tidak akan meneruskan paket itu keluar ke network B. Meskipun dia punya akses ke network B. Ilustrasinya seperti gambar berikut ini :
      Tanpa IP Forwarding
    • Dengan IP Forwarding, server akan meneruskan paket IP melalui NIC#2 itu menuju network B. Jadi gampangnya, akan ada serah terima paket dari NIC#1ke NIC#2 karena server tahu hanya NIC#2 yang tahu caranya mengantar paket ke tujuan. Ilustrasinya seperti gambar berikut ini :
      Dengan IP Forwarding

Konsep sederhana di atas belum melibatkan kemungkinan adanya Firewall yang aktif dalam server tersebut. Mungkin saja meskipun IP Forwarding sudah aktif, paket tetap tidak bisa dikirimkan ke network B karena terbentur oleh Firewall.

Saya jadi penasaran melakukan tes untuk makin menyakinkan diri sendiri soal IP Forwarding & Firewall tadi. Saya segera buka VirtualBox & membuat 2 buah VM (virtual machine), masing-masing menggunakan RedHat Linux 6.

VirtualBox Setup

Strukturnya saya buat mengikuti diagram pada gambar pertama tadi. Berikut detailnya :

Continue reading

FreeBSD Sebagai Router

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 :

Continue reading

Konversi KVM Image Ke VirtualBox

Tulisan ini masih berkait dengan tulisan sebelumnya tentang virtualisasi dengan KVM Linux. Saat membuat virtual machine dengan KVM, aplikasi qemu-kvm akan membuat sebuah virtual harddisk dengan format *.img. Virtual harddisk ini dapat dipasangkan juga pada VirtualBox. Dengan begitu OS yang sudah dipasang di KVM, bisa dijalankan juga di virtual machine-nya VirtualBox.

Untuk dapat menggunakan virtual harddisk ini kita perlu mengkonversi dulu menjadi format *.vdi. Berikut ini adalah contoh proses konversi menggunakan perintah VBoxManage bawaan VirtualBox :

ttirtawi@macmini:~ $ VBoxManage convertfromraw -format VDI centos65-template.img  centos65-template.vdi
Converting from raw image file="centos65-template.img" to file="centos65-template.vdi"...
Creating dynamic image with size 8589934592 bytes (8192MB)...
ttirtawi@macmini:~ $

Di contoh tadi, virtual disk dari KVM berukuran 8GB sementara hasil konversinya cuma berukuran 836MB. Ini karena saat membuat virtual machine KVM, saya memilih opsi “Allocate entire disk now”, artinya KVM melakukan reservasi terlebih dahulu sebesar 8GB. Sementara VirtualBox membuat VDI yang sesuai jumlah data yang sudah dipakai. Meskipun pada akhirnya VirtualBox VM akan mengenali virtual harddisk tersebut sebagai harddisk berukuran 8GB.

ttirtawi@macmini:~ $ ls -thlr centos65-template.*
-rw-------  1 ttirtawi  staff   836M May 31 21:51 centos65-template.vdi
-rw-------  1 ttirtawi  staff   8.0G May 31 17:25 centos65-template.img
ttirtawi@macmini:~ $ 

Memasang Wireshark Versi Lama Di MacPorts

Di tulisan sebelumnya (Sekilas Tentang MacPorts) saya menuliskan bahwa kita bisa memasang beberapa versi port bersamaan (meskipun hanya 1 yang aktif). Di posting tersebut saya mencoba memasang Wireshark versi 1.10.7. Saya bisa mencari versi terdahulu dari sebuah port dari website http://trac.macports.org. Misalnya seperti contoh tangkapan layar di bawah ini :

Revision Browser

Sebagai contoh saya ingin memasang Wireshark versi yang lebih lama, misalnya 1.10.6. Yang perlu dicatat adalah Revision number yang menghasilkan Wireshark versi 1.10.6. Dari website tadi saya dapat nomor revisinya 118753.

Revision Number Wireshark Upgrade 1.10.6

Untuk memasang port versi lama ini langkah-langkahnya adalah sebagai berikut :

  1. Saya perlu mengambil port revision number 118753 dengan menggunakan svn. SVN (subversion) adalah aplikasi untuk kontrol versi, ini biasanya digunakan para developer software untuk mengontrol perubahan yang dilakukan pada source code software-nya. Perintah svn di Mac OSX sudah termasuk dalam paket XCode Command Line Tools. Perintah yang perlu saya gunakan adalah seperti contoh berikut ini :
    ttirtawi@macmini:Downloads $ svn co -r 118753 http://svn.macports.org/repository/macports/trunk/dports/net/wireshark
    A    wireshark/files
    A    wireshark/files/patch-configure.diff
    A    wireshark/files/patch-epan-dissectors-pacet-dtls.c.diff
    A    wireshark/files/patch-svnversion
    A    wireshark/Portfile
    Checked out revision 118753.
    ttirtawi@macmini:Downloads $ 
    

    Saya bisa melakukan perintah ini di direktori mana saja. Perintah svn akan mengambil direktori wireshark dari server SVNnya Macports.

  2. Selanjutnya saya bisa lihat versi port yang ada di direktori tersebut :
    ttirtawi@macmini:Downloads $ cd wireshark/
    ttirtawi@macmini:wireshark $ port info
    wireshark @1.10.6 (net)
    Variants:             no_adns, no_geoip, no_gnutls, no_ipv6, no_libgcrypt, no_libsmi, no_lua, no_rtp, no_ssl, no_x11, universal
    
    Description:          A network analyzer that lets you capture and interactively browse Ethernet frames. Packet data can be read from a file, or live from a
                          local network interface.
    Homepage:             http://wireshark.org/
    
    Build Dependencies:   pkgconfig
    Library Dependencies: adns, libgcrypt, libgeoip, glib2, libsmi, lua, gnutls, gtk2, openssl, portaudio, libpcap, kerberos5, zlib
    Conflicts with:       wireshark-devel
    Platforms:            darwin
    License:              GPL-2 GPL-3
    Maintainers:          opendarwin.org@darkart.com
    ttirtawi@macmini:wireshark $ 
    

    Benar bahwa port yang diambil tadi adalah Wireshark versi 1.10.6.

  3. Selanjutnya untuk memasang port Wireshark 1.10.6 tersebut saya tinggal gunakan perintah port install seperti pada contoh berikut ini :
    ttirtawi@macmini:wireshark $ port install
    --->  Computing dependencies for wireshark
    --->  Fetching distfiles for wireshark
    --->  Attempting to fetch wireshark-1.10.6.tar.bz2 from http://jog.id.distfiles.macports.org/macports/mpdistfiles/wireshark
    --->  Attempting to fetch wireshark-1.10.6.tar.bz2 from http://www.wireshark.org/download/src/
    --->  Verifying checksums for wireshark
    --->  Extracting wireshark
    --->  Applying patches to wireshark
    --->  Configuring wireshark
    --->  Building wireshark
    --->  Staging wireshark into destroot
    --->  Installing wireshark @1.10.6_0
    --->  Deactivating wireshark @1.10.7_0+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11
    --->  Cleaning wireshark
    --->  Activating wireshark @1.10.6_0
    --->  Cleaning wireshark
    --->  Updating database of binaries: 100.0%
    --->  Scanning binaries for linking errors: 100.0%
    --->  No broken files found.
    ttirtawi@macmini:wireshark $ 
    
  4. Bila proses instalasi port tadi sudah selesai saya bisa melihat ada 2 port Wireshark yang terpasang & hanya versi 1.10.6 yang aktif.
    ttirtawi@macmini:wireshark $ port installed wireshark
    The following ports are currently installed:
      wireshark @1.10.6_0 (active)
      wireshark @1.10.7_0+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11
    ttirtawi@macmini:wireshark $ 
    
  5. Contoh lain bila saya ingin memasang port Wireshark versi 1.2.5. Revision number-nya adalah 61926.
    ttirtawi@macmini:Downloads $ svn co -r  61926 http://svn.macports.org/repository/macports/trunk/dports/net/wireshark
    svn: E000017: Can't create directory '/Users/ttirtawi/mydata/Downloads/wireshark/.svn': File exists
    ttirtawi@macmini:Downloads $ 
    

    Pada contoh di atas muncul error dari perintah svn karena direktori wireshark sudah ada. Saya perlu menghapus dulu direktori wireshark atau pindah menggunakan direktori lainnya.

    ttirtawi@macmini:Downloads $ rm -r wireshark/
    ttirtawi@macmini:Downloads $ svn co -r  61926 http://svn.macports.org/repository/macports/trunk/dports/net/wireshark
    A    wireshark/files
    A    wireshark/files/patch-svnversion
    A    wireshark/Portfile
    Checked out revision 61926.
    ttirtawi@macmini:Downloads $
    ttirtawi@macmini:wireshark $ port install
    --->  Computing dependencies for wireshark
    --->  Dependencies to be installed: c-ares
    --->  Fetching distfiles for c-ares
    --->  Attempting to fetch c-ares-1.10.0.tar.gz from http://jog.id.distfiles.macports.org/macports/mpdistfiles/c-ares
    --->  Verifying checksums for c-ares
    --->  Extracting c-ares
    --->  Configuring c-ares
    --->  Building c-ares
    --->  Staging c-ares into destroot
    --->  Installing c-ares @1.10.0_0
    --->  Activating c-ares @1.10.0_0
    --->  Cleaning c-ares
    --->  Fetching distfiles for wireshark
    --->  Attempting to fetch wireshark-1.2.5.tar.bz2 from http://jog.id.distfiles.macports.org/macports/mpdistfiles/wireshark
    --->  Verifying checksums for wireshark
    --->  Extracting wireshark
    --->  Configuring wireshark
    --->  Building wireshark
    --->  Staging wireshark into destroot
    --->  Installing wireshark @1.2.5_0
    --->  Deactivating wireshark @1.10.6_0
    --->  Cleaning wireshark
    --->  Activating wireshark @1.2.5_0
    --->  Cleaning wireshark
    --->  Updating database of binaries: 100.0%
    --->  Scanning binaries for linking errors: 100.0%
    --->  No broken files found.
    ttirtawi@macmini:wireshark $ 
    ttirtawi@macmini:wireshark $ port installed wireshark
    The following ports are currently installed:
      wireshark @1.2.5_0 (active)
      wireshark @1.10.6_0
      wireshark @1.10.7_0+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11
    ttirtawi@macmini:wireshark $ 
    ttirtawi@macmini:~ $ MacPorts/bin/wireshark -version
    wireshark 1.2.5
    
    Copyright 1998-2009 Gerald Combs <gerald@wireshark.org> and contributors.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    Compiled with GTK+ 2.24.23, with GLib 2.40.0, with libpcap 1.5.3, with libz
    1.2.8, without POSIX capabilities, without libpcre, with SMI 0.4.8, with c-ares
    1.10.0, without Lua, with GnuTLS 3.1.22, with Gcrypt 1.5.3, with MIT Kerberos,
    with GeoIP, without PortAudio, without AirPcap.
    NOTE: this build doesn't support the "matches" operator for Wireshark filter
    syntax.
    
    Running on Darwin 13.2.0 (MacOS 10.9.3), with libpcap version 1.5.3, GnuTLS
    3.1.22, Gcrypt 1.5.3.
    
    Built using gcc 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40).
    ttirtawi@macmini:~ $ 
    

Sampai tahap ini saya punya 3 port Wireshark yang terpasang :

ttirtawi@macmini:~ $ port installed wireshark
The following ports are currently installed:
  wireshark @1.2.5_0 (active)
  wireshark @1.10.6_0
  wireshark @1.10.7_0+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11
ttirtawi@macmini:~ $ 

Bila saya ingin kembali menggunakan Wireshark versi 1.10.7, saya cukup mengaktifkannya dengan perintah port activate seperti contoh di bawah ini :

ttirtawi@macmini:~ $ port activate wireshark @1.10.7_0+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11
--->  Computing dependencies for wireshark
--->  Deactivating wireshark @1.2.5_0
--->  Cleaning wireshark
--->  Activating wireshark @1.10.7_0+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11
--->  Cleaning wireshark
ttirtawi@macmini:~ $
ttirtawi@macmini:~ $ port installed wireshark
The following ports are currently installed:
  wireshark @1.2.5_0
  wireshark @1.10.6_0
  wireshark @1.10.7_0+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11 (active)
ttirtawi@macmini:~ $ 
ttirtawi@macmini:~ $ MacPorts/bin/wireshark -version
wireshark 1.10.7 (Git Rev Unknown from unknown)

Copyright 1998-2014 Gerald Combs <gerald@wireshark.org> and contributors.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Compiled (64-bit) with GTK+ 2.24.23, with Cairo 1.12.16, with Pango 1.36.3, with
GLib 2.40.0, with libpcap, with libz 1.2.8, without POSIX capabilities, without
libnl, with SMI 0.4.8, without c-ares, with ADNS, with Lua 5.2, without Python,
with GnuTLS 3.1.22, with Gcrypt 1.5.3, with MIT Kerberos, with GeoIP, with
PortAudio V19-devel (built May 23 2014 02:29:07), with AirPcap.

Running on Mac OS X 10.9.3, build 13D65 (Darwin 13.2.0), with locale
en_US.UTF-8, with libpcap version 1.5.3, with libz 1.2.8, GnuTLS 3.1.22, Gcrypt
1.5.3, without AirPcap.
       Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz

Built using clang 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40).
ttirtawi@macmini:~ $ 

Memperbaiki Tampilan Wireshark Di Mac OSX

Wireshark menggunakan GTK untuk menghasilkan tampilan grafisnya. Setelah memasang Wireshark melalui MacPorts, saya dapati tampilan Wireshark seperti ini :

Wireshark Default Tanpa Clearlook GTK+

Menurut saya tampilan Wireshak ini sangat jelek, tidak senada dengan environment Mac OSX. Beberapa referensi di Internet menyarankan untuk menggunakan GTK Theme Clearlooks untuk memperbaiki tampilan Wireshark. Pertama kali memasang Wireshark, hanya ada 1 theme seperti ini :

ttirtawi@macmini:~ $ port installed | egrep "gtk|gnome|theme"
  gnome-common @3.12.0_0 (active)
  gtk-doc @1.20_2+python27 (active)
  gtk2 @2.24.23_0+x11 (active)
  hicolor-icon-theme @0.13_0 (active)
ttirtawi@macmini:~ $ 

GTK Theme Clearlooks tersedia dalam port gnome-themes. Supaya bisa mengganti-ganti GTK Themes saya perlu memasang port gtk-theme-switch juga. Berikut adalah langkah-langkahnya :

ttirtawi@macmini:~ $ port -v install gtk-theme-switch
ttirtawi@macmini:~ $ launchctl load -w /Library/LaunchAgents/org.freedesktop.dbus-session.plist
ttirtawi@macmini:~ $ port -v install gnome-themes
ttirtawi@macmini:~ $ port installed | egrep "gtk|gnome|theme"
  gnome-common @3.12.0_0 (active)
  gnome-icon-theme @3.12.0_0 (active)
  gnome-themes @2.32.1_0 (active)
  gtk-doc @1.20_2+python27 (active)
  gtk-engines2 @2.20.2_3 (active)
  gtk-theme-switch @2.0.4_2 (active)
  gtk2 @2.24.23_0+x11 (active)
  gtk3 @3.12.2_0+x11 (active)
  hicolor-icon-theme @0.13_0 (active)
ttirtawi@macmini:~ $ 

Setelah itu saya bisa menjalankan perintah switch2 untuk mengaktifkan GTK Theme yang saya inginkan :

Switch2 Untuk Memilih GTK Theme

Setelah menggunakan theme Clearlooks, sekarang tampilan Wiresharknya jadi lebih enak untuk dilihat :

Wireshark Dengan Clearlook GTK+