Social Icons

Pages

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

     

0 komentar:

Posting Komentar

 
Blogger Templates