Jawdat Mini Hackaton 2016 by Jumroh Arrasid
-
Upload
jumroh-arrasid -
Category
Technology
-
view
376 -
download
1
Transcript of Jawdat Mini Hackaton 2016 by Jumroh Arrasid
Jawdat Mini-Hackaton 2016
I'm going to show you my SDN skill!
Jumroh Arrasid Watch the demo here: https://youtu.be/BZB_7EuTtxo
Jawdat Mini-Hackaton 2016
Informasi Dokumen
Jenis Dokumen Laporan Hackathon
Target SDN NFV AIO VM v1.0
Penulis Jumroh Arrasid
Versi Dokumen 1.0
Tanggal Dibuat 25/03/2016
Sejarah Versi
Versi Tanggal Penulis Deskripsi
1.0 25/03/2016 Jumroh Arrasid Dokumen Awal
Kontak
Nama Jumroh Arrasid
E-Mail [email protected]
Jawdat Mini-Hackaton 2016
Contents
Deskripsi Pekerjaan ................................................................................... 1
Konfigurasi ............................................................................................................... 2
1. Konfigurasi Topologi .................................................................................................................... 2
2. Konfigurasi file “startaio.sh” ....................................................................................................... 2
3. Konfigurasi file “configpusher.py”............................................................................................... 2
4. Konfigurasi file “aiomanager.py” ................................................................................................ 3
5. Konfigurasi file “topo.py “ ........................................................................................................... 4
6. Konfigurasi OpenFlow Entries “HQ-FLOW.txt” dan “BR1-FLOW.txt” ......................................... 6
7. Konfigurasi file “pushOVS.sh” dan “clearOVS.sh” ....................................................................... 6
8. Konfigurasi file “ovsHQpusher.py” dan “ovsBR1pusher.py” ...................................................... 7
9. Konfigurasi file “ovsHQclear.py” dan “ovsBR1clear.py” ............................................................. 8
Hasil dan Pembahasan .......................................................................................... 9
1
Jawdat Mini-Hackaton 2016
Deskripsi Pekerjaan
Dalam SDN Mini-Hackathon kali ini penulis melakukan beberapa perubahan pada Jawdat AIO VM dengan
melakukan penambahan dan pengurangan node dan mencoba menemukan solusi network automation
pada topologi jaringan yang berbeda (Opsi skenario 5). Berikut penjelasan perubahan yang ditambah dan
topologi jaringan yang dibuat oleh penulis:
i. Penulis membuat kasus dimana suatu perusahaan ingin menghubungkan jaringan pada 2 kantor
yang berbeda secara geografis (HQ dan Branch1) serta membangun komunikasi yang aman antara
ke-2 cabang tersebut yang terhubung melalui Internet.
ii. Setiap cabang pada perusahaan menggunakan 1 Cisco Router dan 1 Open vSwitch. Dilokasi HQ
terdapat Jawdat AIO VM yang digunakan untuk melakukan automasi pada jaringan tersebut.
iii. Untuk mewujudkan komunikasi yang aman penulis mebangun jaringan point-to-point antara HQ
dan BR1 dengan menggunakan GRE over IPsec Tunnel.
iv. Pada Open vSwitch tidak digunakan menggunakan SDN Controller, penulis mencoba melakukan
entry manual untuk OpenFlow entries(just for lab purposes, not recommended for large networks).
v. Penulis juga membangun layer 2 adjacency pada masing-masing Open vSwitch dengan
menggunakan VXLAN sebagai mekanisme tunneling. Host pada setiap Open vSwitch menggunakan
alamat IP yang sama (overlapping).
vi. Routing Protocol yang digunakan adalah EIGRP.
vii. Semua konfigurasi di push melalui Jawdat AIO VM.
viii. Berikut topologi jaringan yang akan dibangun dengan menggunakan network automation:
2
Jawdat Mini-Hackaton 2016
Konfigurasi
1. Konfigurasi Topologi
Node Running On Interface
Cisco IOU GNS3 VM 1.4.4 VMnet1
Jawdat AIO VM VMware WS 10.0.1 VMnet4
Open vSwitch (Mininet VM) VirtualBox 5.0.10 VBox Host only #
2. Konfigurasi file “startaio.sh”
Pada file shell “startaio.sh” penulis menonaktifkan beberapa services pada AIO VM dan hanya
mengaktifkan services yang dibutuhkan yaitu webgui dan aiomanager. Hal ini dilakukan karena penulis
merubah topologi jaringan dan juga untuk menghemat penggunaan memory pada VM.
3. Konfigurasi file “configpusher.py”
3
Jawdat Mini-Hackaton 2016
Konfigurasi
Pada file “configpusher.py” penulis hanya merubah nilai pada variable self.waiting_time = 5 dengan tujuan
ketika proses SSH Failed penulis hanya perlu menunggu selama 5 detik.
4. Konfigurasi file “aiomanager.py”
Function def start(), penulis menambah baris perintah untuk melakukan SSH ke router HQ dan BR1 dan
list konfigurasi yang akan di push ke masing-masing router (provision). config_list_HQ = [ "int e0/0", "ip nat outside", "int range e0/1-2", "ip nat inside", "access-list 10 permit any", "ip nat inside source list 10 interface e0/0 overload", "crypto isakmp policy 1", "authentication pre-share", "group 1", "crypto isakmp key KUNCI address 33.33.33.2", "crypto ipsec transform-set SECURE esp-3des esp-sha-hmac", "access-list 100 permit gre host 11.11.11.2 host 33.33.33.2", "crypto map SECURE-MAP 1 ipsec-isakmp", "set peer 33.33.33.2", "set transform-set SECURE", "match address 100", "int e0/0 ", "crypto map SECURE-MAP", "interface tun 1", "ip add 10.10.10.1 255.255.255.252", "tunnel source e0/0", "tunnel destination 33.33.33.2", "router eigrp 10", "network 10.10.10.0 0.0.0.3", "network 192.168.99.0", "192.168.100.0", "!"] config_list_BR1 = [ "int e0/0", "ip nat outside", "int e0/1", "ip nat inside", "access-list 10 permit any", "ip nat inside source list 10 interface e0/0 overload", "crypto isakmp policy 1", "authentication pre-share", "group 1", "crypto isakmp key KUNCI address 11.11.11.2", "crypto ipsec transform-set SECURE esp-3des esp-sha-hmac", "access-list 100 permit gre host 33.33.33.2 host 11.11.11.2 ", "crypto map SECURE-MAP 1 ipsec-isakmp", "set peer 11.11.11.2", "set transform-set SECURE", "match address 100", "int e0/0 ", "crypto map SECURE-MAP", "ip route 192.168.100.0 255.255.255.0 10.10.10.1", "interface tun 1", "ip add 10.10.10.2 255.255.255.252", "tunnel source e0/0", "tunnel destination 11.11.11.2", "router eigrp 10", "network 10.10.10.0 0.0.0.3", "network 172.16.99.0 0.0.0.255","!"] HQ=ConfigPusher("HQ", "ios", config_list_HQ, "ssh", "192.168.100.1", 22,"cisco","cisco") BR1=ConfigPusher("BR1", "ios", config_list_BR1, "ssh", "33.33.33.2", 22,"cisco","cisco") HQ.start() BR1.start()
4
Jawdat Mini-Hackaton 2016
Konfigurasi
Function def stop(), penulis menambah baris perintah untuk melakukan SSH ke router HQ dan BR1 dan
akan menghapus konfigurasi yang telah di push pada masing-masing router (deprovision). config_list_HQ = [ "int e0/0","no crypto map SECURE-MAP", "no crypto isakmp policy 1", "no crypto isakmp key KUNCI address 33.33.33.2", "no access-list 100", "no crypto map SECURE-MAP 1 ipsec-isakmp", "no crypto ipsec transform-set SECURE", "no int tun 1", "no router eigrp 10", "!"] config_list_BR1 = [ "int e0/0","no crypto map SECURE-MAP", "no crypto isakmp policy 1", "no crypto isakmp key KUNCI address 11.11.11.2", "no access-list 100", "no crypto map SECURE-MAP 1 ipsec-isakmp", "no crypto ipsec transform-set SECURE", "no int tun 1", "no router eigrp 10", "!"] HQ = ConfigPusher("HQ","ios",config_list_HQ, "ssh","192.168.100.1",22,"cisco","cisco") BR1 = ConfigPusher("BR1","ios",config_list_BR1,"ssh","33.33.33.2",22,"cisco", "cisco") HQ.start() BR1.start()
5. Konfigurasi file “topo.py “
File “topo.py” adalah file yang berisikan script python yang akan digunakan untuk membuat Open vSwitch
dan host yang berada pada Open vSwitch tersebut dimana pada kasus ini Open vSwitch di emulasikan
dengan Mininet VM.
from mininet.net import Mininet from mininet.cli import CLI from mininet.log import lg from mininet.node import Node from mininet.topolib import TreeNet from mininet.node import Controller #NAT Configuration# ######################################################################################## def startNAT( root, inetIntf='eth3', subnet='10.0/8' ): # Identify the interface connecting to the mininet network localIntf = root.defaultIntf() # Configure NAT root.cmd( 'iptables -I FORWARD -i', localIntf, '-d', subnet, '-j DROP' ) root.cmd( 'iptables -A FORWARD -i', localIntf, '-s', subnet, '-j ACCEPT' ) root.cmd( 'iptables -A FORWARD -i', inetIntf, '-d', subnet, '-j ACCEPT' ) root.cmd( 'iptables -t nat -A POSTROUTING -o ', inetIntf, '-j MASQUERADE' ) # Instruct the kernel to perform forwarding root.cmd( 'sysctl net.ipv4.ip_forward=1' ) def stopNAT( root ): """Stop NAT/forwarding between Mininet and external network""" # Flush any currently active rules root.cmd( 'iptables -F' )
5
Jawdat Mini-Hackaton 2016
Konfigurasi root.cmd( 'iptables -t nat -F' ) # Instruct the kernel to stop forwarding root.cmd( 'sysctl net.ipv4.ip_forward=0' ) def fixNetworkManager( root, intf ): cfile = '/etc/network/interfaces' line = '\niface %s inet manual\n' % intf config = open( cfile ).read() if line not in config: print '*** Adding', line.strip(), 'to', cfile with open( cfile, 'a' ) as f: f.write( line ) # Probably need to restart network-manager to be safe - # hopefully this won't disconnect you root.cmd( 'service network-manager restart' ) def connectToInternet( network, switch='S1', rootip='10.254', subnet='10.0/8'): """Connect the network to the internet switch: switch to connect to root namespace rootip: address for interface in root namespace subnet: Mininet subnet""" switch = network.get( switch ) prefixLen = subnet.split( '/' )[ 1 ] # Create a node in root namespace root = Node( 'root', inNamespace=False ) # Prevent network-manager from interfering with our interface fixNetworkManager( root, 'root-eth3' ) # Create link between root NS and switch link = network.addLink( root, switch ) link.intf1.setIP( rootip, prefixLen ) # Start network that now includes link to root namespace network.start() # Start NAT and establish forwarding startNAT( root ) # Establish routes from end hosts for host in network.hosts: host.cmd( 'ip route flush root 0/0' ) host.cmd( 'route add -net', subnet, 'dev', host.defaultIntf() ) host.cmd( 'route add default gw', rootip ) return root ######################################################################################## if __name__ == '__main__': lg.setLogLevel( 'info') ################### Topologi OVS ################## net = Mininet( controller=Controller ) A1 = net.addHost( 'A1', ip='10.0.0.1/24', mac='00:00:00:00:00:A1' ) B1 = net.addHost( 'B1', ip='10.0.0.1/24', mac='00:00:00:00:00:B1' ) S1 = net.addSwitch( 'S1' ) net.addLink( A1, S1 ) net.addLink( B1, S1 ) ################### Topologi OVS ###################
Pada konfigurasi diatas, terdapat konfigurasi NAT agar host pada Open vSwitch dapat berkomunisi keluar
dari Open vSwitch. Konfigurasi tersebut bisa didapatkan dari file “/mininet/mininet/examples/nat.py”.
Keterangan “## Topologi OVS ##” adalah script yang digunakan untuk membentuk topologi Open vSwitch.
Script tersebut akan menghasilkan topologi seperti dibawah ini:
6
Jawdat Mini-Hackaton 2016
Konfigurasi
6. Konfigurasi OpenFlow Entries “HQ-FLOW.txt” dan “BR1-FLOW.txt”
File “HQ-FLOW.txt” dan “BR1-FLOW.txt” adalah file teks yang dibuat oleh penulis yang berisi OpenFlow
flow entries yang akan di push ke masing-masing Open vSwitch. Kedua file tersebut berada pada direktori
“/var/www/html/flow/”. Terdapat 2 table pada file tersebut, table 0 berfungsi untuk menandai paket dan
table 1 berfungsi untuk memforward paket. Berikut penjelasan entries pada file “BR1-FLOW.txt” (file HQ-
FLOW.txt tidak dijelaskan karena fungsinya kurang lebih sama):
*note: port 10 adalah VXLAN tunnel port.
7. Konfigurasi file “pushOVS.sh” dan “clearOVS.sh”
Berfungsi untuk menandai (tag) flow yang melalui
port 1 atau port 2 dengan VNI 1000 atau VNI 2000,
dan kemudian flow tersebut akan di di proses pada
Table 1.
-jika VNI=1000 & dest.MAC=::A2, forward ke port 1
-jika VNI=2000 & dest.MAC=::B2, forward ke port 2
-jika VNI=1000 & dest.MAC=::A1, forward ke port 10
-jika VNI=2000 & dest.MAC=::B1, forward ke port 10
-Berfungsi untuk menentukan kemana untuk
meneruskan ARP Request. Dalam kasus ini ke Local
VM.
-Explicit default drop (deny any)
7
Jawdat Mini-Hackaton 2016
Konfigurasi
File “pushOVS.sh” adalah file shell yang dibuat oleh penulis untuk melakukan push OpenFlow flow
entries dan membuat VXLAN tunnel interface pada masing-masing Open vSwitch. Shell “pushOVS.sh”
sendiri akan memanggil script python pada file /root/ovsBr1psuher.py dan /root/ovsHQpusher.py.
File “clearOVS.sh” adalah file shell yang dibuat oleh penulis untuk menghapus OpenFlow flow entries
dan VXLAN tunnel interface pada masing-masing Open vSwitch. Shell “clearOVS.sh” sendiri akan
memanggil script python pada file /root/ovsBr1clear.py dan /root/ovsHQclear.py.
8. Konfigurasi file “ovsHQpusher.py” dan “ovsBR1pusher.py”
import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.99.10', port=22, username='mininet', password='mininet' ) stdin, stdout, stderr = ssh.exec_command('wget http://192.168.100.200/flow/HQ-FLOW.txt') stdin, stdout, stderr = ssh.exec_command('sudo ovs-ofctl add-flows S1 HQ-FLOW.txt') stdin, stdout, stderr = ssh.exec_command('sudo ovs-vsctl add-port S1 vtep -- set interface vtep type=vxlan option:remote_ip=172.16.99.10 option:key=flow ofport_request=10’)
import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('172.16.99.10', port=22, username='mininet', password='mininet' ) stdin, stdout, stderr = ssh.exec_command('wget http://192.168.100.200/flow/BR1-FLOW.txt') stdin, stdout, stderr = ssh.exec_command('sudo ovs-ofctl add-flows S1 BR1-FLOW.txt') stdin, stdout, stderr = ssh.exec_command('sudo ovs-vsctl add-port S1 vtep -- set interface vtep type=vxlan option:remote_ip=192.168.99.10 option:key=flow ofport_request=10')
Penjelasan VXLAN Tunnel interface:
'sudo ovs-vsctl add-port S1 vtep -- set interface vtep type=vxlan option:remote_ip=192.168.99.10 option:key=flow ofport_request=10'
File “ovsHQpusher.py” dan “ovsBR1pusher.py” adalah script python yang dibuat penulis untuk melakukan
beberapa hal pada Open vSwitch:
Membuat port pada OVS dengan nama port=“vtep”
Konfigurasi interface sebagai VXLAN Tunnel
Konfigurasi IP remote OVS, dalam kasus ini IP address OVS HQ
Konfigurasi flow untuk menggunakan VNI yang ditentukan pada OpenFlow Eentries
OpenFlow Port = 10
8
Jawdat Mini-Hackaton 2016
Konfigurasi
i. Mengunduh OpenFlow Entries. ('wget http://192.168.100.200/flow/xx’)
ii. Push OpenFlow Entries ke OVS. ('sudo ovs-ofctl add-flows S1 HQ-FLOW.txt’)
iii. Membuat VXLAN Tunnel Interface. ('sudo ovs-vsctl add-port S1 vtep -- set interface vtep type=vxlan
option:remote_ip=172.16.99.10 option:key=flow ofport_request=10’)
File tersebut dibuat dengan modul paramiko (module pada Python untuk implementasi SSHv2).
9. Konfigurasi file “ovsHQclear.py” dan “ovsBR1clear.py”
import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.99.10', port=22, username='mininet', password='mininet' ) stdin, stdout, stderr = ssh.exec_command('wget http://192.168.100.200/flow/HQ-FLOW.txt') stdin, stdout, stderr = ssh.exec_command('sudo ovs-ofctl add-flows S1 HQ-FLOW.txt') stdin, stdout, stderr = ssh.exec_command('sudo ovs-vsctl add-port S1 vtep -- set interface vtep type=vxlan option:remote_ip=172.16.99.10 option:key=flow ofport_request=10’)
import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('172.16.99.10', port=22, username='mininet', password='mininet' ) stdin, stdout, stderr = ssh.exec_command('rm BR1-FLOW.txt*') stdin, stdout, stderr = ssh.exec_command('sudo ovs-ofctl del-flows S1') stdin, stdout, stderr = ssh.exec_command('sudo ovs-vsctl del-port S1 vtep -- set interface vtep type=vxlan option:remote_ip=192.168.99.10 option:key=flow ofport_request=10')
File “ovsHQpusher.py” dan “ovsBR1pusher.py” adalah script python yang dibuat penulis untuk melakukan:
i. Menghapus file FLOW.txt
ii. Menghapus flow entries pada OVS.
iii. Menghapus VXLAN Tunnel Interface.
9
Jawdat Mini-Hackaton 2016
Hasil dan Pembahasan
Untuk hasil dan pembahasan penulis berharap pembaca dapat melihat short demo yang telah dibuat
penulis pada url berikut:
https://youtu.be/BZB_7EuTtxo
.