SOFTWARE DEFINED NETWORK Tim Teaching MKP SDN
BAGIAN 3 MININET S1 Teknik Telekomunikasi Fakultas Teknik Elektro 2016
Apa itu mininet ? Mininet adalah emulator berbasis CLI yang digunakan untuk membuat sebuah topologi jaringan pada Software Defined Network. • Sebuah emulator jaringan yang menciptakan jaringan virtual yang realistis. • Berjalan dengan kernel yang sama seperti aslinya, switch dan kode aplikasi pada mesin yang seperti aslinya.
• Menyediakan Command Line Interface (CLI) dan Application Programming Interface (API) • Abstraction • Host: mengemulatorkan pada level OS process • Switch: mengemulatorkan berdasarkan fungsi dari software pada switch • Contoh : Open vSwitch, SoftSwitch
Tipe-tipe dari Testbeds pada Jaringan Platform
Advantages
Disadvantages
Hardware testbed
Lebih Cepat Akurat
Mahal Susah untuk di konfigurasi ulang Susah untuk di ubah Susah untuk di download
Simulator
Tidak mahal, fleksibel Mudah untuk di download Kurang akurat
May require app changes Might not run OS code May not be “believable” May be slow/non-interactive
Emulator
Tidak mahal, fleksibel Memiliki konfigurasi seperti aslinya Cukup akurat Mudah di download Cepat
Lebih lambat dari hadware aslinya Kemungkinan akurasinya kurang ketika terlalu banyak perangkat yang diemulatorkan
Instalasi Mininet Cara instalasi mininet di Ubuntu • Clone mininet dari github dengan perintah :
• Menginstall : Mininet + Open vSwtich + wireshark + etc dengan perintah :
Instalasi Mininet lanjut • Melakukan pengecekan apakah mininet sudah terinstall dengan benar atau belum dengan perintah mn –test pingall .
Mininet Topologi •Terdapat beberapa topologi bawaan pada mininet : Contoh command untuk membuat topologi bawaan dari mininet: Single, membuat topologi single switch dengan jumlah host 4 : $ mn --topo single,4 --mac --switch ovsk --controller=remote
Tree, membuat topologi tree yang memiliki level kedalaman 2 : $ mn --topo tree,2 --mac --switch ovsk --controller=remote
Mininet Topologi Linear, membuat topologi linear dengan 3 switch dan 1 host tiap switchnya : $ mn --topo linear,3 --mac --switch ovsk --controller=remote
Custom Topologi VND • Pada mininet kita juga dapat melakukana custom topologi. Kita dapat menggunakan berbagai pilihan dalam membuat custom topologi. 1. Menggambarkan topologi dengan virtuan network description (VND) • Akses VND secara online pada situs http://www.ramonfontes.com/vnd/
Custom Topologi VND • Gambar topologi yang diinginkan
Custom Topologi VND • Lakukan konfigurasi pada controller dengan melakukan double click pada icon controller Setting mulai dari ip controller, apakah controller bersifat remote atau tidak dan jenis controller yang di gunakan. Setelah melakukan setting tinggal klik apply setting. Selain itu kita juga bisa membuat flow table sesuai dengan yang kita inginkan dengan mengklik create flow table
Custom Topologi VND • Klik File>Export>Export to mininet, kemudian ubah format file menjadi .py • Copy file eksport yang telah di buat ke dalam folder mininet/examples • Buat agar file vnd dapat dieksekusi oleh mininet dengan bantuan chmod +x $ chmod +x
• Untuk melakukan pengecekan apakah topologi yang kita gunakan sudah berjalan dengan bener atau tidak kita. Kita lakukan pengecekan dengan menjalankan topologi yang telah di buat. tetapi sebelum menjalankan topologi yang telah di buat kita jalankan controllernya terlebih dahulu. Pada percobaan ini controller yang di gunakan adalah controller pox sebagai controller dengan fungsi forwarding l2 learning
Custom Topologi VND $ sudo ./pox.py forwarding.l2_learning
• Jalankan script topologi dengan menggunakan command $ sudo ./
Custom Topologi VND • Lalu lakukan pengecekan koneksi dengan perintah pingall pada mininet
Custom Topologi MiniEdit 2. Menggunakan GUI untuk membentuk topologi dengan MiniEdit • Jalankan MiniEdit dengan menggunakan perintah
• Lalu akan muncul tampilan miniedit sebagai berikut
Custom Topologi MiniEdit • Bentuk topologi yang diinginkan
Custom Topologi MiniEdit • Setelah di bentuk topologi yang diinginkan, lakukan konfigurasi pada controller Kita dapat mengatur nama, port controller dan juga ip yang di gunakan oleh controller.
Custom Topologi MiniEdit • Lalu lakukan setting pada miniedit di edit>preference Centang pada start CLI untuk memunculkan CLI mininet pada terminal. Lalu klik ok
• Sebelum menjalankan mininet dari miniedit terlebih dahulu kita jalankan controller yang di gunakan, dalam hal ini saya menggunakan controller pox sebagai controller dengan fungsi forwarding l2 learning
Custom Topologi MiniEdit • Jalankan minieditnya dengan mengklik run pada pojok kiri bawah
Custom Topologi MiniEdit • Lalu buka kembali terminal yang di gunakan untuk mejalankan miniedit tadi.
Mininet siap di gunakan, lakukan perintah pingall untuk mengetes koneksi antar host. Untuk mengeluarkan miniedit exit terlebih dahulu pada mininet
Custom Topologi Format .py 3. Dengan menuliskan script dalam format .py seperti contoh di bawah ini: from mininet.topo import Topo from mininet.link import TCLink,Link class Topologi(Topo): def __init__(self): Topo.__init__(self) h1 h2 h3 h4
= = = =
self.addHost('h1', self.addHost('h2', self.addHost('h3', self.addHost('h4',
mac= mac= mac= mac=
s1 s2 s3 s4
= = = =
self.addSwitch('s1', self.addSwitch('s2', self.addSwitch('s3', self.addSwitch('s4',
'00:00:00:00:01:01', '00:00:00:00:01:02', '00:00:00:00:01:03', '00:00:00:00:01:04',
ip='10.0.0.1/24') ip='10.0.0.2/24') ip='10.0.0.3/24') ip='10.0.0.4/24')
mac='00:00:00:00:00:01') mac='00:00:00:00:00:02') mac='00:00:00:00:00:03') mac='00:00:00:00:00:04')
Custom Topologi Format .py self.addLink( self.addLink( self.addLink( self.addLink(
s1 s2 s3 s4
self.addLink(s1, self.addLink(s1, self.addLink(s2, self.addLink(s3,
, , , ,
h1 h2 h3 h4
s2, s3, s3, s4,
) ) ) )
cls=TCLink, cls=TCLink, cls=TCLink, cls=TCLink,
bw=70, delay='1ms') bw=100, delay='4ms') bw=90, delay='2ms') bw=90, delay='3ms')
topos = {'switch4' :(lambda:Topologi())}
self.addHost
Membangun entitas host dengan menggunakan nama yang kita inginkan. Disini dapat pula di spesifikasikan mac address dan IP address yang diinginkan
self.addSwitch
Membangun entitas switch, dapat pula di spesifikasikan mac address yang diinginkan
self.addLink
Membangun link antar 2 node dan dapat mendefinisikan bandwidth dalam mb dan delay dalam ms pada setiap link
Costum Topologi Format .py • Setelah script di buat, file di simpan dalam format .py dan di simpan pada direktori mininet/custom • Sebelum menjalankan mininet dari miniedit terlebih dahulu kita jalankan controller yang di gunakan, dalam hal ini saya menggunakan controller pox sebagai controller dengan fungsi forwarding l2 learning
Costum Topologi Format .py • Lalu jalankan file topologi yang telah di simpan dengan perintah # sudo mn --custom switch3h.py --topo switch3 --mac --switch ovsk --controller=remote
• Mininet siap di gunakan, lakukan perintah pingall untuk mengetes koneksi antar host.
Command Line Interface pada Mininet Setelah kita masuk kedalam mininet kita bisa melakukan interaksi antar host dan switch. Berikut adalah contoh dari beberapa command yang ada pada mininet. • Melihat nodes yang ada di topologi mininet> nodes
• Melihat interaksi links di topologi mininet> net
Command Line Interface pada Mininet • Melihat informasi nodes di topologi
mininet> dump
• Melihat seluruh interface pada masing-masing device di topologi mininet> intfs
Command Line Interface pada Mininet • Melihat status setiap link di topologi mininet> links
• Test koneksi antara host satu dengan host lainya mininet> h1 ping –c 3 h2 Melakukan perintah ping antar host 1 dengan host 2 sebanyak 3 kali.
Command Line Interface pada Mininet Mengirim packet icmp antar host 1 dengan host 2 secara terus menerus. mininet> h1 ping h2
untuk menghentikan dengan menekan ctrl+c • Test koneksi antar semua host mininet> pingall
Command Line Interface pada Mininet • Melihat port yang aktif pada setiap node di topologi mininet> ports
• Mematikan link antar dua node
mininet> link <device 1> <device 2> up/down Mematikan link antara s2 dengan s3 mininet> link s2 s3 down
Command Line Interface pada Mininet Menghidupkan link antara s2 dengan s3 mininet> link s2 s3 up
• Mematikan dan menyalakan salah satu node di topologi mininet> switch start/stop Mematikan switch s3
Command Line Interface pada Mininet Menghidupkan switch s3
• Membuka command line interface pada perangkat mininet> xterm
Command Line Interface pada Mininet
• Melihat isi, menghapus, dan menambahkan flow tabel pada switch openflow mininet> dpctl - Melihat isi dari flow table pada switch
Menghapus flow table pada semua switch
Command Line Interface pada Mininet Untuk menghapus flow table pada spesifik switch kit bisa menggunakan xterm dengan cara sebagai berikut : • Buka xterm s1 pada mininet • Cek flow table pada s1 dengan perintah sebagai berikut # ovs-ofctl dump-flows s1
Command Line Interface pada Mininet • Lalu hapus flow table pada s1 dengan perintah sebagai berikut # ovs-ofctl del-flows s1
•Lalu cek flow table pada switch 1 dengan perintah berikut # ovs-ofctl dump-flows s1
Flow table telah hilang dari switch 1
Command Line Interface pada Mininet Lalu gimana cara menambahkan flow table secara manual? Ini dia caranya : • Pertama buka kembali xterm pada node yang kita ingin tambah flow table sendiri, dalam kasus ini switch 1 yang telah kita hapus flow tabelnya tadi.
Command Line Interface pada Mininet • Untuk menambahkan rules pada flow table kita menggunakan perintah. # ovs-ofctl add-flows s1 in_port=1, action=output:2
• Lalu kita lihat rules untuk flow table pada switch 1 dengan perintah # ovs-ofctl dump-flows s1
Command Line Interface pada Mininet • Lalu lakukan pengecekan ping pada mininet dengan pingall
Tetapi kenapa belum bisa melakukan ping pada packet yang melewati s1 ? karena pada penambahan flow table yang kita buat kita hanya menambahkan rules flow table yang berasal dari port 1 lalu melakukan action dengan meneruskan ke port 2. sedangkan ketika paket masuk dari port 2 kita tidak mengatur rules pada flow table sehingga switch akan melakukan drop pada packet yang masuk.
Command Line Interface pada Mininet
• Sekarang kita menabahkan rules untuk port in 2 lalu melakukan action dengan mengeluarkannya melalui port 1. # ovs-ofctl add-flows s1 in_port=2, action=output:1
• Lakukan pengecekan flow table # ovs-ofctl dump-flows s1
Command Line Interface pada Mininet Flow table yang ada pada switch 1 sekarang adalah ketika paket masuk melalui port 1 switch akan meneruskan packet ke port 2 sesuai dengan flow table yang di buat. Begitu juga sebalikanya ketika ada packet masuk dari port 2 switch 1 akan meneruskan packet melalui port 1. • Lalukan test pingall pada mininet, untuk melihat apakah host 1 sudah bisa terhubung dengan semua host yang lain
Memberikan background traffic Untuk membuat sebuah background traffic kita menggunakan iperf dengan host tujuan sebagai server dan host pengirim sebagai client. • Jalankan mininet yang telah terhubung semua hostnya
Memberikan background traffic • Setelah itu buka xterm host yang ingin menjadi server dan client, dalam hal ini menggunakan h1 sebagai pengirim dan h3 sebagai penerima.
Memberikan background traffic • Lakukan ping h1 dengan h3 untuk melihat waktu yang di butuhkan untuk melakukan ping antar host 1 dengan host 3 sebelum adanya background traffic.
Memberikan background traffic • Buka xterm h3 sebagai penerima packet traffic (server) dan jalankan command
# iperf -s -u -i <waktu print traffic>
Memberikan background traffic • Buka xterm h1 sebagai pengirim packet traffic (client) dan jalankan command # iperf -c -u -t <waktu> -i <waktu print traffic> -b
Memberikan background traffic
• Lalu lakukan ping antara h1 dan h3 pada mininet untuk melihat perubahan waktu yang di dapat ketika melakukan ping.
Disini didapat waktu ping yang lebih lama ketika jaringan diberikan background traffic melebihi dari kapasitas link.
Referensi • http://www.brianlinkletter.com/using-pox-components-to-create-asoftware-defined-networking-application/ • http://www.ramonfontes.com/vnd/ • http://mininet.org/walkthrough/#link-updown • http://dpnm.postech.ac.kr/cs702/2015/lecture/MininetTutorial.pptx