Social Icons

Pages

Featured Posts

Kamis, 26 Februari 2015

Linux User Mode - tinycore linux

Linux user mode adalah virtualisasi linux didalam linux itu sendiri. Virtualisasi lain seperti qemu, virtual box, vmware, bekerja dengan meng-emulasikan lingkungan platform hardware agar OS virtual machine dapat berjalan diatasnya dan pilihan OS menjadi beragam. Linux user mode tidak melakukan emulasi hardware ia menggunakan hardware yang juga digunakan oleh host OS. User mode linux hanya menjalankan linux OS didalam linux OS, ini tidak seperti colinux dimana linux berjalan berdampingan dengan windows OS.

User mode linux berupa kernel linux yang dicompilasi sebagai executable file dan dapat berjalan dengan dipanggil dari command shell host linux. biasanya bernama vmlinux yang adalah hard linked ke file linux.

Ketika  dipanggil vmlinux akan mencari initrd sebagai root disk yang akan digunakan. Initrd biasanya berupa file block device yang didalamnya berisi filesystem ext2 dan linux system.

Berikut akan dijelaskan prosedur kompilasi kernel untuk keperluan User Mode Linux.

spesifikasi platform:
ASUS Laptop X401U
Processor AMD brazo c60
ATI Radeon 6900 Display
memory 2Gb ( 1.649.532 MB)
ArchLinux - bbqlinux


Kebutuhan:
vanila kernel - dapat di ambil dari kernel.org

initrd - saya menggunakan tinycore linux karena distro ini compact, small dan dapat dikustomisasikan.



Prosedur:

1. BLOCK DISK - TINYCORE LINUX ROOTDISK (Initrd)

Downloadlah terlebih dahulu tinycore linux untuk mengetahui versi kernel yang akan digunakan. download dari situs http://distro.ibiblio.org/tinycorelinux/downloads.html. silahkan pilih ukuran distro yang diinginkan. Saya menggunakan distro TinyCore 15 Mb.




Setelah selesai download, buka console shell dan lakukan mount iso file tinycore tersebut ke sebuah folder
$ mkdir coreiso
$ sudo  mount -o loop TinyCore-current.iso coreiso/
$ cp /coreiso/boot/core.gz `pwd`
$ gunzip core.gz

Akan didapat file core dari proses extract gunzip core.gz file core inilah yang akan kita extract sebagai initrd bagi User Mode Linux.

Aagar tidak terlalu banyak working folder, maka unmount coreiso dan selanjutnya copy/move file core kedalam folder coreiso tersebut.

$ sudo umount coreiso
$ mv core coreiso/
$ cd coreiso
$ mkdir initrd
$ cd initrd
$ cpio -i -d < ../core
19279 blocks

Silahkan lihat dengan ls -lra, kita telah medapatkan initrd / root disk dari tiny core linux.


Ingat posisi working directory saat ini, gunakan perintah pwd untuk menampilkan posisi work dir saat ini.

Langkah selanjutnya adalah membuat block device untuk UML. Silahkan pindah working directory setingkat keatas terlebih dahulu. Ada banyak cara untuk membuat block device, bisa dengan dd, atau tools lain, saya menggunakan tool fallocate karena lebih cepat dalam membuat block device. syntaxnya:

fallocate -l  <ukuran>  <nama_file>

$ cd ..
$ fallocate -l 50MB pccorevm

Perintah tersebut akan membuat dummy file berukuran 50MB dengan nama pccorevm.  Selanjutnya buat file system didalam pccorevm tersebut.

$ mke2fs -F pccorevm





Setelah block device selesai dibuat, maka copylah isi folder initrd kedalam block device tersebut. Lakukan mounting pccorevm ke suatu folder temporer.

$ mkdir tmpcore
$ sudo mount -o loop pccorevm tmpcore/
$ sudo cp -r initrd/* tmpcore/


Sekarang kita masuk ke tmpcore (pccorevm) untuk membuat node blockdevice ubd0 dengan menggunakan mknod.

$ cd tmpcore/dev
$ sudo mknod --mode=660 ubd0 b 98 0
$ sudo chown root:disk ubd0

kemudian kita edit file ../etc/fstab --- saya menggunakan mcedit

$ cd ../etc
$ sudo mcedit fstab

beri tanda pagar pada entry yang ada, dan entry baris baru dengan:
 
/dev/ubd0 / ext2 defaults 0 0


tekan F10 untuk exit dan simpan.

selanjutnya silahkan ls -lra ../lib/modules catat nama folder yang muncul, karena itulah versi kernel yang harus kita ambil dari kernel.org.



Untuk diketahui, bahwa rootdisk tinycore linux ini sesungguhnya bekerja dalam mode bootable iso, dan ia sebelumnya benar-benar berupa initrd, maka ada beberapa persesuaian dalam proses init yang harus dilakukan.

untuk mempersingkat saya telah menyesuaikan file etc/init.d/tc-config sebagai berikut:

#!/bin/busybox ash
# RC Script for Tiny Core Linux
# (c) Robert Shingledecker 2004-2012
# Several modifications for speed by Curaga
. /etc/init.d/tc-functions
useBusybox

USER="tc"
TCEDIR="/tmp/tce"
TCEOPT="/tmp/tce/optional"
TCLOOP="/tmp/tcloop"
TCEINSTALLED="/usr/local/tce.installed"
INSTALLED=""
VERSION="$(cat /usr/share/doc/tc/release.txt)"
KERNEL="$(uname -r)"

addUser(){
    echo "${GREEN}Adding user ${YELLOW}$USER ${NORMAL}"
    /bin/adduser -s /bin/sh -G staff -D "$USER"
    echo "$USER":tcuser | /usr/sbin/chpasswd -m
    echo -e "$USER\tALL=NOPASSWD: ALL" >> /etc/sudoers
}

### END functions

# Main

clear                              
echo "${GREEN}Booting ${YELLOW}Core $VERSION ${NORMAL}"
echo "${GREEN}Running Linux Kernel ${YELLOW}$KERNEL${GREEN}.${NORMAL}"
export PATH=/usr/local/sbin:/usr/local/bin:"$PATH"


if [ -n "$HOST" ]; then
    sethostname
else
    /bin/hostname -F /etc/hostname
fi

/sbin/ifconfig lo 127.0.0.1 up
/sbin/route add 127.0.0.1 lo &


if [ -n "$USER" ]; then
    if ! grep "$USER" /etc/passwd >/dev/null; then addUser; fi
else
    USER="tc"
fi
echo "$USER" > /etc/sysconfig/tcuser
mkdir -p /home/"$USER"


# Setup base directories for TCE Applicatons
[ -d "$TCEINSTALLED" ] || mkdir "$TCEINSTALLED"
[ -d "$TCEDIR" ] || mkdir "$TCEDIR"
[ -d "$TCEOPT" ] || mkdir "$TCEOPT"
[ -d "$TCLOOP" ] || mkdir "$TCLOOP"
ln -sf "$TCEDIR" /etc/sysconfig/tcedir
chown "$USER" "$TCEOPT"
chgrp staff "$TCEDIR" "$TCEOPT" "$TCEINSTALLED" "$TCLOOP"
chmod g+w "$TCEDIR" "$TCEOPT" "$TCEINSTALLED" "$TCLOOP"

chmod u+s /bin/busybox.suid /usr/bin/sudo

get_app() {
    LOADER="tce-load -i" ; PKG=optional
    PROTO=$1
    HOST=${2%%/*}
    REST=${2#*/}
    LENG=$((${#HOST}-1)) ; LAST=${HOST:$LENG:1}
    [ "$LAST" == ":" ] && HOST=${HOST:0:$LENG}
    FILE=${REST%:*}
    NAME=${FILE##*/}
    OPTS=${REST#*:}
    [ "$OPTS" == "no-ping" ] && NOPING=1 || NOPING=0
    [ -z "$DHCP_RAN" ] && wait4Server $HOST $NOPING
    (    TCE=/tmp/tce/$PKG
        cd $TCE
        [ "$PROTO" = "TFTP" ] && tftp -g -r $FILE $HOST
        [ "$PROTO" = "HTTP" ] && wget -q http://${HOST}/${FILE}
        [ $SHOWAPPS ] && echo -ne "${BLUE}TFTP Loading Extensions ${YELLOW}"
        dos2unix -u $NAME
        while read FILE FL
        do
            APP=${FILE##*/}
            [ "$PROTO" = "TFTP" ] && tftp -g -r $FILE $HOST
            [ "$PROTO" = "HTTP" ] && wget -q http://${HOST}/${FILE}
            [ $SHOWAPPS ] && echo -ne "$APP "
            su "$USER" -c "$LOADER $FL $TCE/$APP"
            [ "$FL" == "-c" ] && rm $APP
        done < $NAME
        [ $SHOWAPPS ] && echo "${GREEN} Done.${NORMAL}"
        rm $NAME
    )
}


touch /var/tmp/k5_skip
if [ -n "$NBD" ]; then
    modprobe -q nbd
    SERVER=$( echo $NBD | awk -F: '{ print $1 }')
    PORT=$(    echo $NBD | awk -F: '{ print $2 }')
    OPTS=$(   echo $NBD | awk -F: '{ print $3 }')
    [ "$OPTS" == "no-ping" ] && NOPING=1 || NOPING=0
    [ -z "$DHCP_RAN" ] && wait4Server $SERVER $NOPING
    nbd-client $SERVER $PORT /dev/nbd0
    mkdir /mnt/nbd0
    mount /dev/nbd0 /mnt/nbd0 2>&1
    pidof nbd-client nbd0 >> /var/tmp/k5_skip
fi

if grep -q "^/dev/root" /proc/mounts; then
    INSTALLED=1
    echo "${RED}Detected Traditional Hard drive installation.${NORMAL}"
fi

/sbin/ldconfig 2>/dev/null

[ -n "$TEXT" ] && touch /etc/sysconfig/text
[ -n "$XONLY" ] && touch /etc/sysconfig/xonly


if [ -n "$MYHOME" ]; then
    wait $fstab_pid
    PARTITION=${MYHOME##/dev/}
    find_mountpoint "$PARTITION"
    if [ -n "$MOUNTPOINT" ]; then
        [ "$MOUNTED" == "yes" ] || mount "$MOUNTPOINT"

        MS_MNTS=`mount|awk '$5~/fat|vfat|msdos|ntfs/{printf "%s ",$3}'`
        case "$MS_MNTS" in
            *"$MOUNTPOINT"* )
                echo "Persistent HOME not supported on Microsoft File Systems."
                echo "${YELLOW}Request for persistent HOME on $PARTITION ignored."
                echo -n "${RED}Press Enter key.${NORMAL}"; read ans
            ;;
            * )
                if [ -d "$MOUNTPOINT/home/$USER" ]; then
                    mount --bind "$MOUNTPOINT/home" /home
                else
                    mkdir -p "$MOUNTPOINT/home/$USER"
                    mount --bind "$MOUNTPOINT/home" /home
                fi
            ;;
        esac

    else
        echo "Invalid device specified. Ignoring persistent HOME request!"
    fi
fi

setupHome

unset OPT_SETUP
if [ -n "$MYOPT" ]; then
    wait $fstab_pid
    PARTITION=${MYOPT##/dev/}
    find_mountpoint "$PARTITION"
    if [ -n "$MOUNTPOINT" ]; then
        [ "$MOUNTED" == "yes" ] || mount "$MOUNTPOINT"

        MS_MNTS=`mount|awk '$5~/fat|vfat|msdos|ntfs/{printf "%s ",$3}'`
        case "$MS_MNTS" in
            *"$MOUNTPOINT"* )
                echo "Persistent OPT not supported on Microsoft File Systems."
                echo "${YELLOW}Request for persistent OPT on $PARTITION ignored."
                echo -n "${RED}Press Enter key.${NORMAL}"; read ans
            ;;
            * )
                [ -d "$MOUNTPOINT"/opt ] || mkdir "$MOUNTPOINT"/opt
                yes n | cp -ai /opt/. "$MOUNTPOINT"/opt/ 2>/dev/null
                mount --bind "$MOUNTPOINT"/opt/ /opt/
                chgrp -R staff /opt/ >/dev/null 2>&1
                chmod -R g+w /opt/ >/dev/null 2>&1
                chmod g+s /opt/ >/dev/null 2>&1
            ;;
        esac

    else
        echo "Invalid device specified. Skipping persistent OPT request!"
    fi
fi


[ -n "$KEYMAP" ] || KEYMAP="us"
if [ -f "/usr/share/kmap/$KEYMAP.kmap" ]; then
    echo -n "${GREEN}Setting keymap to ${MAGENTA}$KEYMAP"
    /sbin/loadkmap < /usr/share/kmap/$KEYMAP.kmap
    echo "KEYMAP=$KEYMAP" > /etc/sysconfig/keymap
    echo "${GREEN} Done.${NORMAL}"
fi

if [ -n "$SECURE" ]; then
    getpasswd "root"
    echo "root:$PASSWD" | chpasswd -m
    getpasswd "$USER"
    echo "$USER:$PASSWD" | chpasswd -m
fi
if [ -n "$PROTECT" ]; then
    getpasswd "encryption"
    echo "$PASSWD" > /etc/sysconfig/bfe
    chown ${USER}:root /etc/sysconfig/bfe
    chmod 600 /etc/sysconfig/bfe
fi


/sbin/loadcpufreq 2>/dev/null &

/opt/bootsync.sh

[ -n "$NOAUTOLOGIN" ] && echo "booting" > /etc/sysconfig/noautologin

if [ -n "$PAUSE" ]; then
    echo -n "${BLUE}Boot time configuration completed. Press <Enter> to continue.${NORMAL}"
    read junk
fi

#END=======OF=======TC-CONFIG

silahkan copy paste persesuaian tersebut diatas kedalam script etc/init.d/tc-config yang ada didalam pccorevm.

dan persesuaian di etc/fstab sebagai berikut:

# /etc/fstab
proc /proc proc defaults 0 0
sysfs /sys  sysfs defaults 0 0
devpts         /dev/pts     devpts  defaults          0       0
tmpfs           /dev/shm     tmpfs   defaults          0       0
/dev/ubd0    /    ext2    defaults    0    0
 #END====OF====FSTAB

silahkan copy paste persesuaian tersebut diatas kedalam script etc/fstab yang ada didalam pccorevm.

Sampai disini block device telah selesai disiapkan. ingat yang akan kita gunakan hanya file pccorevm saja dan saat ini pccorevm sedang mounted di tmpcore. unmount tmpcore, dan boleh hapus working directory dan file-file yang ada, sisakan hanya pccorevm.

2. KOMPILASI KERNEL LINUX USER MODE

Dari proses pembuatan rootdisk / blockdisk tinycore linux diatas telah diketahui bahwa kernel yang digunakan adalah versi 3.16.6.

download source code kernel terlebih dahulu dari ftp://kernel.org/pub/linux/kernel/v3.x/linux-3.16.6.tar.gz untuk memudahkan gunakan wget untuk mendownload kernel tersebut.

$ wget ftp://kernel.org/pub/linux/kernel/v3.x/linux-3.16.6.tar.gz

tunggu sampai proses download selesai.

setelah selesai silahkan extract file tar.gz tersebut

$ gunzip linux-3.16.6.tar.gz
$ tar -xf linux-3.16.6.tar

akan diperoleh folder linux-3.16.6

$ cd linux-3.16.6
$ make mrproper
$ make menuconfig ARCH=um SUBARCH=i386

silahkan konfigurasikan atau pilih bagian bagian kernel yang akan diaktifkan atau tidak diaktifkan, jika sudah selesai silahkan exit dan konfirmasi yes untuk menyimpan .config.

Kompilasi kernel dapat dilakukan dengan:

$ make ARCH=um SUBARCH=i386

Kompilasi module module dapat dilakukan dengan:

$ make modules ARCH=um SUBARCH=i386

setelah kompilasi selesai akan terdapat file vmlinux yang hardlinked ke file linux, kedua file tersebut adalah executable.

copy file vmlinux tersebut ke directory dimana pccorevm berada.

$ cp vmlinux ..
$ cp linux ..

module module kernel yang tersimpan di folder mods harus di copy kedalam pccorevm directorynya /usr/lib/modules.

$ sudo mount -oloop ../pccorevm ../tmpcore/
$ cp -r mods/lib/modules/3.16.6 ../tmpcore/

sampai disini UML sudah selesai dan tinggal di coba saja. untuk menjalankan Linux User Mode ini hanya dibutuhkan file:

 vmlinux
 linux
 pccorevm

ketiga file tersebut sudah kita build. hapuslah selain ketiga file tersebut.

untuk menjalankan UML berikan perintah:
$ cd ..
$ ./vmlinux ubd0=pccorevm con1=xterm

atau dengan

$ ./linux ubd0=pccorevm con1=xterm






catatan:

konfigurasi yang dipilih sewaktu make menuconfig akan menentukan apakah kompilasi akan dapat berjalan dan hasil vmlinux/linux dapat bekerja. silahkan melakukan search di google untuk mendapatkan konfigurasi terbaik yang akan digunakan untuk kompilasi kernel UML.


untuk keluar dari UML gunakan perintah poweroff

#poweroff


Rabu, 25 Februari 2015

Belajar Network dengan IOU + UML + VLAN /inter vlan routing + Trunk + Linux Iptables + koneksi ke internet

Belajar Network dengan IOU + UML + VLAN /inter vlan routing + Trunk + Linux Iptables + koneksi ke internet


Ingin belajar network dengan cisco router dan L2 vlan tapi tidak punya perangkat realnya?. Pakai GNS3 lambat dan memori terbatas, pakai packet tracert – tidak bisa terhubung ke real internet connection plus tidak bisa belajar iptables. Berikut contoh diagram network yang ingin kita coba.



Pada ilustrasi diatas, terdapat 1unit cisco router L3, 1 unit switch L2, 2 unit PC client, 1 koneksi ke internet. Semua perangkat tersebut dapat berjalan pada satu machine - Linux saja alias semua perangkat adalah virtual machine (mesin yang berjalan didalam mesin sesungguhnya).

Virtualisasi dengan software seperti qemu, virtual box, Vmware dapat dilakukan namun akan membutuhkan memory yang lumayan banyak. Dan akan berjalan lambat untuk setiap perangkat virtual tersebut.

Berikut ini solusi yang saya gunakan:
  • Host machine:
    • ASUS X401U
    • Processor AMD c60 Brazo
    • Memory 2 Gb (1649532Mb)
    • OS ArchLinux (bbqlinux)
    • Desktop Openbox
  • Virtualisasi untuk Cisco router dan switch – menggunakan IOU image.
  • Virtualisasi untuk Client PC – menggunakan UML (User mode Linux)

Kembali ke ilustrasi diagram network yang akan di ujicoba. Pada gambar tersebut,
  • Host machine mempunyai koneksi internet wireless, perangkat wireless dikenal oleh system sebagai wlp7s0.
  • Router – IOU L3 router – akan dihubungkan ke IOU switch L2 pada iou-interface:e0/0 pada kedua perangkat. Koneksi ini merupakan trunk link dari switch l2 ke router.
  • Pada switch l2 akan dikonfigurasikan interface vlan 100 (untuk segment 192.168.1.xxx) pada interface e0/2 dan vlan 200 (untuk segmen 192.168.2.xxx) pada interface e0/3.
  • masing-masing vlan akan dihubungkan ke PC client sebagai tester jaringan.
  • Interface e0/4 di switch akan dihubungkan ke host machine dengan tap0 (perumpamaan: sebagai kabelnya) ke bridge device host machine (perumpamaan: sebagai switch / router), bridge device tersebut diberi ip address: 172.16.1.1 dan dapat berlaku seperti sebuah router atau gateway external bagi switch l2 atau bagi system lab yang di bangun.
  • Routing packet dari bridge BRVL0 dapat dilakukan dengan iptables host machine sebagaimana biasa.
  • BRVL1 dan BRVL2 – akan menjadi switch (*umpamanya switch) bagi tap device yang terhubung kepadanya. Keduanya tidak perlu diberi ip address


GOAL:
Tujuan lab ini adalah mengenai inter vlan routing, jadi setiap pc client akan dapat saling berhubungan (PING) meskipun mereka berada dalam segment yang berbeda, dan mereka dapat mengakses dunia luar (internet) melalui segment vlan yang berbeda juga.

Yang dibutuhkan:
  • Linux System yang telah terkoneksi ke Internet. - saya menggunakan ArchLinux 3.8.18
  • Kernel User mode linux yang sudah di kompilasi – biasanya bernama vmlinux (baca bagian Linux User Mode – archlinux). - saya menggunakan vanila kernel dari kernel.org 3.16.6
  • virtual machine root disk image – ini adalah initrd linux os yang dikemas dalam block device berbentuk image file. Saya menggunakan tinycorelinux 3.16.6 – yang dikemas dalam file image bernama pccorevm.
  • OPENSSL – host machine
  • TUNTAP modul – host machine
  • BRIDGE modul – host machine
  • IOU l2 switch image file
  • IOU l3 router image file
  • IPTABLES – Host machine
  • perl – host machine
  • python – version 2 – host machine
  • iou2net.pl script
  • wrapper-linux / wrapper.bin – iou to telnet loader

Peringatan!!!
IOU adalah bukan barang open source, ia dimiliki oleh CISCO dan hanya digunakan untuk keperluan internal CISCO saja. Semua yang berhubungan dengan IOU tidak akan saya berikan link downloadnya, silahkan cari sendiri.!!!

Dari keperluan diatas, hanya yang berhubungan dengan IOU saja yang tidak disediakan oleh linux, perl, python, tuntap, bridge biasanya telah tersedia di system linux yang digunakan, jika tidak tersedia silahkan menginstallnya sendiri sesuai prosedur distro masing-masing.

Prosedur:
Dengan telah tersedianya berbagai keperluan tersebut diatas, maka kita dapat memulai prosedur lab kita.

  1. Mempersiapkan Host system
    • bukalah terminal console (xterm atau yang lainnya) – saya menggunakan terminator.
    • Beralih ke root access (sudo)
    • tuntap modprobe
    • bridge modprobe
    • buat device tap sesuai kebutuhan (pada ilustrasi diawal dibutuhkan 5 tap device).
    • Buat device bridge sesuai kebutuhan (dibutuhkan 3 bridge device).
# modprobe tun
# modprobe bridge
# ip tuntap add tap0 mode tap group users
# ip tuntap add tap1 mode tap group users
# ip tuntap add tap2 mode tap group users
# ip tuntap add tap3 mode tap group users
# ip tuntap add tap4 mode tap group users
# brctl addbr brvl0
# brctl addbr brvl1
# brctl addbr brvl2
  1. Libcrypto yang digunakan oleh iou adalah libcrypto.so.4, jika ini belum tersedia pada host machine silahkan buat link ke libcrypto host machine yang aktif. Untuk system saya libcrypto yang active adalah libcrypto.so.1.0.0 jadi saya buat symbolic link dengan nama librypto.so.4 kepada libcrypto.so.1.0.0 tersebut.

    Membuat symbolic link dapat dilakukan dengan:

    # ln -s /usr/lib32/libcrypto.so.1.0.0 /usr/lib32/libcrypto.so.4


  1. Persiapkan bridge device, ini akan menjadi seumpama switch atau router bagi koneksi-koneksi kabel (tap device) yang kita rangkai. Pada gambar diawal diketahui: brvl0 akan menjadi router bagi switch l2 dengan kabel (tap device) tap0. Tap2 dan tap3 akan terhubung melalui satu switch bayangan bernama brvl1, dan tap1 bersama tap4 terhubung di switch bayangan bernama brvl2. Maka konfigurasikan system host machine dengan:
    # brctl addif brvl0 tap0
    # ip addr add 172.16.1.1 255.255.255.0 dev brvl0
    # ip link set brvl0 up
    #
    #
    # brctl addif brvl1 tap2
    # brctl addif brvl1 tap3
    #
    #
    # brctl addif brvl2 tap1
    # brctl addif brvl2 tap4
    #
    # brctl show
        bridge name bridge id                   STP enabled interfaces
        brvl0            8000.f2a0afb85470   no     tap0
        brvl1            8000.0aae92e1abb8  no     tap2
                                                                       tap3
        brvl2            8000.facddbdb9809  no     tap1
                                                                       tap4
  2. Edit file NETMAP – file ini merupakan deskripsi hubungan antar device-device IOU. Untuk diketahui setiap IOU device switch/router akan dipanggil dengan memberi ID pada masing-masing perangkat tersebut. ID inilah yang akan digunakan didalam NETMAP. Deskripsi hubungan akan dibentuk dengan format:

device_id:ethernet_slot_Number/Number       device_id:ethernet_slot_Number/Number

contoh:

111:0/0     112:0/0

baris tersebut akan membuat hubungan antara perangkat IOU yang memiliki id:111 interface ethernet0/0 ke perangkat IOU yang memiliki id:112 interface ethernet0/0.

Bila baris tersebut sudah menunjukkan hubungan kedua perangkat (111:0/0 112:0/0) maka tidak perlu mendefinisikan kebalikannya seperti 112:0/0 111:0/0

  • pseudo_id – adalah id bayangan yang dapat digunakan untuk menghubungkan IOU interface dengan perangkat real yang terpasang di host machine. Ini dapat dilakukan dengan menggunakan iou2net.pl.
  • Contoh : menghubungkan tap1 host machine dengan interface e0/1 IOU device_id 112 dapat dilakukan dengan notasi:
    112:0/1@bbqspiro    312:0/0@bbqspiro

112:0/1@bbqspiro – adalah interface ethernet0/1 yang ada di IOU device_id 112
312:0/0@bbqspiro – adalah pseudo_id (id bayangan) dimana paket dapat di arahkan dengan iou2net.pl ke perangkat pisik host machine.

Katakanlah IOU router l3 akan kita beri ID=111 dan IOU switch l2 akan kita beri ID=112, dan hostname machine adalah bbqspiro, maka untuk keperluan lab kita NETMAP akan berisi:

111:0/0 112:0/0
112:0/1@bbqspiro 301:0/0@bbqspiro
112:0/2@bbqspiro 302:0/0@bbqspiro
112:0/3@bbqspiro 303:0/0@bbqspiro


  1. Panggil IOU device dengan wrapper-linux / wrapper.bin. Untuk diketahui wrapper adalah program yang dapat mengaktifkan IOU device agar dapat di “telnet” oleh host machine pada port yang dapat ditentukan. Syntaxnya:
    wrapper-linux -m iou_binary_file -p port_number - - IOU options IOU_ID

Contoh pemanggilan:

#wrapper-linux -m l3.bin -p 3110 -- -e1 -s0 111 (l3.bin dipanggil dengan ID 111, telnet port:3110)

#wrapper-linux -m l2.bin -p 3111 -- -e1 -s0 112 (l2.bin dipanggil dengan ID 112, telnet port:3111)
catatan:
IOU binary adalah cisco ios yang dikompilasi untuk linux / unix, ia dapat running pada os linux dengan option pada contoh diatas:
-e1 : akan membuat IOU dipanggil dengan dilengkapi 1 block module ethernet (1slot). 1 module ethernet tersebut akan berisi 4 port interface ethernet. Kelak interface tersebut akan dikenal dengan format:

ethernet slot_number/interface_number

jadi notasinya akan menjadi seperti ini:

ethernet 0/0, ethernet 0/1, ethernet 0/2, ethernet 0/3.

atau dengan ringkas dituliskan seperti ini:

e0/0, e0/1, e0/2, e0/3

jika dibutuhkan lebih dari 4 interface ethernet maka IOU binary dapat dipanggil dengan option misalnya seperti ini:

#wrapper-linux -m l2.bin -p 3111 - - -e2 -s0 112

opsi “-e2” akan membuat IOU l2.bin dipanggil dengan 2 slot module interface terisi, 1 slot akan berisi 4 interface ethernet. Notasi yang digunakan adalah:

e0/0, e0/1, e0/2, e0/3, e1/0, e1/1, e1/2, e1/3

opsi “-s0” akan membuat IOU l2.bin dipanggil tanpa disertai modul / slot serial.
Dan angka “112” pada bagian akhir baris adalah IOU ID.

  1. Test IOU dengan telnet (pada distro archlinux belum terdapat program telnet secara default, maka dapat diinstall dengan “pacman -S telnet” atau dengan “yaourt -S telnet”)

test l3 dengan:
# telnet localhost 3110

test l2 dengan:
# telnet localhost 3111
OK – IOU sudah up namun hubungan antar perangkat harus di bentuk terlebih dahulu, ingat NETMAP file yang kita buat dan lakukan langkah selanjutnya ini.

  1. Hubungkan pseudo_id dengan perangkat pisik host machine. Hubungan ini dapat dilakukan dengan berbagai cara, dapat langsung ke ethernet device yang tersedia di host machine, dapat ke perangkat virtual seperti tuntap device, dan lainnya. Pada skenario lab ini, hubungan dilakukan dari IOU interface ke tuntap device host machine.
Hubungan ini diperoleh dengan bantuan iou2net.pl – suatu script perl yang dapat melempar paket dari suatu interface IOU ke interface pisik host machine. Script ini akan membaca file NETMAP untuk memvalidasi pseudo_id dan relasi hubungannya. Ingat NETMAP yang kita buat adalah:

isi dari NETMAP:
111:0/0 112:0/0
112:0/1@bbqspiro 301:0/0@bbqspiro
112:0/2@bbqspiro 302:0/0@bbqspiro
112:0/3@bbqspiro 303:0/0@bbqspiro

baris pertama “111:0/0 112:0/0” berlaku antara IOU device 111 dengan IOU device 112.
baris kedua “112:0/1@bbqspiro 301:0/0@bbqspiro” pemberian “@hostname” akan membuat IOU menyerahkan system untuk mengelola paket yang berjalan pada interface yang dimaksud. Inilah yang digunakan oleh iou2net.pl untuk melakukan forwarding paket ke real device milik host machine dengan pseudo device berinisial 301.

Syntaxnya:

# iou2net.pl -t tuntap_dev -p IOU_pseudo_id

untuk tap0 yang terhubung ke IOU l2 interface e0/3 IOU_id 112, dapat dilakukan dengan:

# perl ./iou2net.pl -t tap0 -p 303

dan untuk hubungan tap1 ke IOU interface e0/1 id 112, dapat dilakukan dengan

# perl ./iou2net.pl -t tap1 -p 301

dan untuk hubungan tap2 ke IOU interface e0/2 id 112, dapat dilakukan dengan

# perl ./iou2net.pl -t tap2 -p 302

  1. langkah berikutnya adalah memanggil PC-PC virtual yang akan menjadi client. Seperti telah di jelaskan diawal, lab ini menggunakan User Mode Linux sebagai virtualisasi, UML lebih cepat dibandingkan virtualisasi lainnya, namun UML tidak mengemulasikan perangkat keras / mesin /platform seperti virtualisasi lain. UML akan berjalan dan hanya berjalan pada perangkat keras yang digunakan oleh host machine.
Setelah kompilasi kernel linux untuk UML (kernel 3.16.6), maka akan tersedia executable vmlinux yang adalah hardlinked kepada file linux. Tersedia juga modules kernel 3.16.6 di folder mods.

Untuk keperluan lab:
  • UML kernel – vmlinux-3.16.6
  • image rootdisk – pccorevm (tiny core linux)
  • untuk setiap pc client sediakan satu image rootdisk
load pcclient dengan syntax:

pcclient1:
# ./vmlinux-3.16.6 ubd0=pccorevm1 eth0=tuntap,tap3 con1=xterm

pcclient2
# ./vmlinux-3.16.6 ubd0=pccorevm2 eth0=tuntap,tap4 con1=xterm

perhatikan opsi “eth0=tap3” dan “eth0=tap4” - ini akan membuat UML mengenali tap3 / tap4 sebagai eth0 pada mesin virtualisasinya/uml guest machine. Ingat tap3 dan tap4 adalah tuntap device bagi host machine.

catatan:
pemanggilan virtualisasi UML dapat dilakukan di user biasa – non root user.
Sampai disini kita telah aktifkan semua perangkat yang dibutuhkan oleh lab.


  1. Konfigurasikan vlan di l2 switch – masuklah ke console – telnet ke localhost pada port 3111.

# telnet localhost 3111

console terminal cisco iou l2 switch akan muncul

switch>

ketik ena atau enable untuk masuk kemode administratif.

Switch> ena
switch# _

prompt akan berganti dengan tanda pagar. Selanjutnya masuk ke mode configure terminal.

Switch# conf t
switch(config)# int vlan 100
switch(config-if)# no shut
switch(config-if)# int vlan 200
switch(config-if)# no shut
switch(config-if)# int vlan 300
switch(config-if)# no shut

perintah diatas akan mengaktifkan vlan dengan id 100 (vlan100) dan vlan dengan id 200 (vlan200).
Dalam skenario lab, vlan 100 akan berisi e0/1 sebagai membernya dan vlan 200 akan berisi e0/2 sebagai membernya.

Switch# conf t
switch(config-if)# int e0/1
switch(config-if)# switchport mode access
switch(config-if)# switchport access vlan 100
switch(config-if)# int e0/2
switch(config-if)# switchport mode access
switch(config-if)# switchport access vlan 200
switch(config-if)# int e0/3
switch(config-if)# switchport mode access
switch(config-if)# switchport access vlan 300
switch(config-if)# ctrl-z

untuk melihat apakah perintah tersebut sudah berjalan silahkan lihat dengan:
switch# sh vlan

  1. konfigurasikan trunking port di l2 switch – sesuai skenario, maka e0/0 l2 akan dikonfigurasikan sebagai trunking port yang akan dihubungkan kepada router l3.

Switch# conf t
Switch(config)# int e0/0
Switch(config-if)# switchport trunk encapsulation dot1q
Switch(config-if)# switchport mode trunk
Switch(config-if)# switchport trunk allowed vlan all
Switch(config-if)# ctrl-z

jika dikehendaki sekedar untuk menguji hubungan pc client dalam segmennya (vlan), kita dapat memberi alamat ip kepada vlan yang kita buat.

Switch(config)# int vlan 100
Switch(config-if)# ip address 192.168.1.100 255.255.255.0
Switch(config)# int vlan 200
Switch(config-if)# ip address 192.168.2.100 255.255.255.0

kemudian test ping dari pc client masing masing segment. Sebelum melakukan ping pc client perlu di konfigurasikan ip address nya.

  1. konfigurasikan subinterface di router l3 – sekarang kita beralih ke router l3 – buka console dan telnet ke localhost port 3110.

Maka terminal router akan muncul – ingat hubungan yang terjadi antara router l3 dengan switch l2 adalah pada port trunk, hal ini berarti dalam port tersebut akan mengalir paket data yang dibungkus oleh vlan ID, ini disebut dengan encapsulasi dot1q. Port trunk tidak dapat dihubungkan secara langsung ke end device seperti PC Client, karena diperlukan pembongkaran tag id vlan vlan yang ada didalam encapsulasi tersebut.

Supaya router dapat mengenal vlan-vlan dalam port trunk, router perlu dikonfigurasikan sub interfacenya untuk masing masing vlan.

Router> ena
router# conf t
router(config)# int e0/0
router(config-if)# no shut
router(config)# int e0/0.100
router(config-if)# encapsulation dot1q 100
router(config-if)# ip address 192.168.1.254 255.255.255.0
router(config-if)# int e0/0.200
router(config-if)# encapsulation dot1q 200
router(config-if)# ip address 192.168.2.254 255.255.255.0
router(config-if)# int e0/0.300
router(config-if)# encapsulation dot1q 300
router(config-if)# ip address 172.16.1.254 255.255.255.0
router(config-if)# ctrl-z
router# conf t
router(config)# ip routing
router(config)# ip route 0.0.0.0 0.0.0.0 172.16.1.1
router(config-if)# ctrl-z

perhatikan “ip route 0.0.0.0 0.0.0.0 172.16.1.1” - ini berarti paket yang bukan milik segment manapun akan dilemparkan ke alamat 172.16.1.1 yang adalah device brvl0 host machine.

Dalam hal ini brvl0 akan menjadi seperti router/gateway bagi router l3 meskipun pisikal brvl0 adalah terhubung kepada switch l2 port e0/3.

  1. konfigurasikan ip address eth0 pc client – untuk setiap pc client dapat dikonfigurasikan dengan perintah ifconfig eth0 alamat_segment netmask mask_segment up

Untuk pc client vlan 100 networknya 192.168.1.xxx
# ifconfig eth0 192.168.1.51 netmask 255.255.255.0 up
# route add default gw 192.168.1.254

Untuk pc client vlan 200 networknya 192.168.2.xxx
# ifconfig eth0 192.168.2.51 netmask 255.255.255.0 up
# route add default gw 192.168.2.254

perhatikan bagian “route add” - alamat gw yang diberikan adalah alamat subinterface masing masing vlan yang telah dibuat di router l3.

  1. test ping antar vlan – silahkan test ping dari satu pc client ke pc client lainnya.

  1. test ping ke brvl0 – lakukan test ping ke brvl0 yang telah diberi alamat 172.16.1.1 (vlan300). Jika belum diberi alamat, silahkan dikonfigurasikan dari console host machine bukan UML bukan pula console router / console switch, karena brvl0 adalah device bridge yang dibuat di host machine.

# ifconfig brvl0 172.16.1.1 netmask 255.255.255.0 up

atau dengan

# ip addr add 172.16.1.1/24 dev brvl0
# ip link set brvl0 up

kemudian konfigurasikan routing tambahan di host machine untuk menuju vlan yang ada didalam IOU, syntaxnya:

# ip route add 192.168.0.0/16 via 172.16.1.254

  1. konfigurasikan iptables nat – terakhir kita konfigurasikan nat forward pada brvl0 agar paket dilempar ke wlp7s0.
  • Pastikan bahwa mode ip forwarding host machine adalah = 1.

# sysctl net.ipv4.ip_forward

jika hasinya = 0

# sysctl net.ipv4.ip_forward=1

  • lakukan nat pada wlp7s0
    #iptables -t nat -A POSTROUTING -o wlp7s0 -j MASQUERADE
  1. test ping dari pcclient ke internet

     

Sabtu, 31 Januari 2015

X11 Font Antialiasing - BBQLINUX / ArchLinux

X11 Font antialiasing sangat berguna untuk membuat nyaman tampilan tulisan dilayar window manager – X11.

X11 di BBQLinux / ArchLinux secara default memang tidak mengadopsi font antialiasing. Ini bisa jadi karena default desktop environtment yang digunakan -- mate -- mengadopsi secara independen terlepas dari X11.

Nah bagaimana jika kita menggunakan openbox sebagai desktop manager X11, font - font akan menjadi tidak nyaman untuk dilihat.

berikut prosedur yang saya gunakan untuk mengadopsi font antialiasing disisi X11.
sumber: https://wiki.archlinux.org/index.php/Infinality
sumber: https://bbs.archlinux.org/viewtopic.php?id=162098

catatan:
inti dari prosedur ini adalah tentang menginstall paket-paket yang diberikan oleh http://bohoomil.com/ ... nah permasalahan yang muncul kemudian adalah :

server bohomil tersebut adalah unofficial support oleh archlinux, sehingga diperlukan oprekan keyring agar server dapat dikenali oleh pacman.

PreInstallation:

pertama kita harus memanggil dirmngr sebagai server. Lakukan ini pada console yang berbeda

#sudo dirmngr --server

dirmngr akan membuat direktori /root/.gnupg biarkan dirmngr tetap berjalan pada console tersebut.

Buka satu console lagi dan lakukan penyegaran keyring (jaringan repository archlinux) dengan menunjuk kepada hkp://keyserver.kjls.com:80

#sudo pacman-key --refresh-keys --keyserver hkp://keyserver.kjsl.com:80

Kemudian edit /etc/pacman.conf dengan nano

#sudo nano /etc/pacman.conf

Isikan repository infinality-bundle kebaris paling bawah pacman.conf

[infinality-bundle]
Server = http://bohoomil.com/repo/$arch

[infinality-bundle-multilib]
Server = http://bohoomil.com/repo/multilib/$arch

Kemudian lakukan import keyring dengan pacman-key

# sudo pacman-key -r 962DDE58

# sudo pacman-key --lsign-key 962DDE58

Kemudian refresh dan update paket archlinux dengan:

# pacman -Syyu

Sekarang baru kita install paket infinality:

# pacman -S infinality-bundle

Selesai installasi silahkan reboot...

Kamis, 18 Desember 2014

BBQ Linux... Ready Linux System untuk pengembang aplikasi Android...

Beberapa hari telah lewat saya rutin menggunakan BBQ Linux. Ini setelah mencoba berbagai distro lain untuk keperluan pengembangan aplikasi android. Ubuntu, Suse, Slackware, Debian, dan beberapa yang lainnya sudah dicoba dengan platform ASUS X401U, processor AMD Brazo, memory 2 Gb, graphic ATI Radeon. Fakta yang saya rasakan adalah betapa lamban dan ribetnya distro distro lain tersebut dalam hal pengembangan aplikasi Android.

BBQ Linux adalah distro turunan dari ARCH Linux yang sepenuhnya compatible dengan repository ArchLinux tersebut. BBQLinux menawarkan paket instalasi Linux yang sudah dilengkapi dengan tools-tools serta dukungan untuk keperluan pengembangan di lingkungan Android. Meskipun demikian kita tetap membutuhkan koneksi internet untuk mengambil beberapa paket pendukung dari repository yang disediakan.

BBQLinux memberikan Desktop Environtment LighDM, yang merupakan turunan dari Gnome, atau versi slim dari Gnome. Karena masih merasakan kelambanan saya mengganti Desktop Environtment LightDM dengan Enlightenment yang lumayan lebih cepat. alternatif lain adalah Enlightenment16 yang adalah versi slim dari enlightenment.

AndroidStudio yang merupakan IDE untuk pengembangan aplikasi Android sudah tersedia dalam paket BBQLinux, demikian pula Android SDK, Android Tools, dan lainnya. Saya menambahkan Eclipse sebagai alternatif IDE pengembangan dengan menarik langsung dari repository ArchLinux menggunakan "$yaourt -S eclipse" yang dapat diperoleh dengan "#pacman -S yaourt".

Namun demikian secara resmi android studio adalah IDE yang direlease langsung oleh tim pengembang android untuk kita pakai dalam pengembangan aplikasi android.

 
Blogger Templates