Öncelikle birkaç cümle ile Mininet'ten biraz bahsedeyim. Mininet ile tek bir makinede çalışan içinde gerçek çekirdek, uygulama kodu ve anahtar bulunan ve saniyeler içinde derlenebilen gerçekçi sanal ağlar oluşturulabilir. Ayrıca Python kodlarını kullanarak kendi oluşturacağımız sanal ağ üzerinde de ping atabiliriz. Mininet´in bu özelliği Network ağları anlamamıza yardımcı olabilmektedir.
Bilgisayara Kurulumu
Öncelikle Virtual Box indirip kurulumunu yapıyoruz. Eğer dosya dizinini değiştirmeyecekseniz "next" yazılarına tıklayıp kurulumu gerçekleştirebilirsiniz.Daha sonra Virtual box´a üzerinde kurmak istediğimiz işletim sistemi ve bu işletim sisteminin kaç bit olduğunu bildiriyoruz. Yapacağım bu işlemi ve yapılacak diğer önemli işlemleri size anlatmaya çalışacağım.
Bu işlemden sonra ne kadar önbellek ayırmak istediğimizi seçiyoruz.
Daha sonra Mininet'i bilgisayarımıza indirip "Zip" dosyasından çıkarıyoruz. "Varolan sanal bir disk dosyası kullan" seçeneğini işaretleyip Virtual Box´ta zip dosyasından çıkarttığımız dosyanın adresini gösteriyoruz.
Daha sonra Virtual Box´a çift tıklayıp açıyoruz. Karşımıza aşağıdaki ekran çıkıyor. Bu ekranda "mininet-vm login:" yazan kısma "mininet" yazısını girip karşımıza gelen "Password:" ekranına da "mininet" yazısını giriyoruz.
Daha sonra eğer isterseniz "sudo mn" yapıp Mininet´te ping denemesi yapabilirsiniz. "mininet>" ekranından çıkmak için "exit" komutunu kullanabilirsiniz.
Daha sonra "sudo nano ~/ahmt.py" komutuyla ahmt.py adlı Python dosyası oluşturuyoruz. "sudo dhclient eth1", "sudo dhclient eth2", "sudo dhclient eth3" komutları ile eth1, eth2, eth3 bağlantıları da kullanabiliyoruz. Ayrıca Putty ile bağlanmak için eth1 bağlantısının adresini kullanıyoruz.
Daha sonra ise aşağıdaki komutları yazdığımızda yukarıdaki resim gibi bir sanal ağ elde etmiş oluyoruz.
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import Node
from mininet.log import setLogLevel, info
from mininet.cli import CLI
class LinuxRouter( Node ):
"A Node with IP forwarding enabled."
def config( self, **params ):
super( LinuxRouter, self).config( **params )
# Enable forwarding on the router
self.cmd( 'sysctl net.ipv4.ip_forward=1' )
def terminate( self ):
self.cmd( 'sysctl net.ipv4.ip_forward=0' )
super( LinuxRouter, self ).terminate()
class NetworkTopo( Topo ):
"Ahmet ag topolojisi"
def build( self, **_opts ):
defaultIP = '192.168.1.1/24' # IP address for r0-eth1
r1, r2, r3 = [self.addNode( n, cls=LinuxRouter, ip=d ) for n, d in [ ( 'r0', '192.168.1.1/29' ), ( 'r1', '192.168.1.2/29' ), ( 'r2', '192.168.1.3/29' ) ] ]
self.addLink( r1, r2,
intfName1='r0-eth0', params1={ 'ip' : '172.16.16.1/30' },
intfName2='r1-eth0', params2={ 'ip' : '172.16.16.2/30' } )
self.addLink( r2, r3,
intfName1='r1-eth1', params1={ 'ip' : '172.16.16.5/30' },
intfName2='r2-eth0', params2={ 'ip' : '172.16.16.6/30' } )
s1, s2, s3, s4, s5 = [ self.addSwitch( s ) for s in 's0', 's1', 's2', 's3', 's4' ]
self.addLink( s1, r1, intfName2='r0-eth1',
params2={ 'ip' : '10.9.128.1/17' } )
self.addLink( s2, r1, intfName2='r0-eth2',
params2={ 'ip' : '10.9.0.1/17' } )
self.addLink( s3, r3, intfName2='r2-eth1',
params2={ 'ip' : '10.7.0.1/23' } )
self.addLink( s4, r3, intfName2='r2-eth2',
params2={ 'ip' : '10.6.0.1/25' } )
self.addLink( s5, r2, intfName2='r1-eth3',
params2={ 'ip' : '10.8.110.1/24' } )
h1 = self.addHost( 'h1', ip='10.9.128.100/17',
defaultRoute='via 10.9.128.1' )
h2 = self.addHost( 'h2', ip='10.9.128.101/17',
defaultRoute='via 10.9.128.1' )
h3 = self.addHost( 'h3', ip='10.9.0.100/17',
defaultRoute='via 10.9.0.1' )
h4 = self.addHost( 'h4', ip='10.9.0.101/17',
defaultRoute='via 10.9.0.1' )
h5 = self.addHost( 'h5', ip='10.7.0.100/23',
defaultRoute='via 10.7.0.1' )
h6 = self.addHost( 'h6', ip='10.7.0.101/23',
defaultRoute='via 10.7.0.1' )
h7 = self.addHost( 'h7', ip='10.6.0.100/25',
defaultRoute='via 10.6.0.1' )
h8 = self.addHost( 'h8', ip='10.6.0.101/25',
defaultRoute='via 10.6.0.1' )
h9 = self.addHost( 'h9', ip='10.8.110.100/24',
defaultRoute='via 10.8.110.1' )
h10 = self.addHost( 'h10', ip='10.8.110.101/24',
defaultRoute='via 10.8.110.1' )
for h, s in [ (h1, s1), (h2, s1), (h3, s2), (h4, s2), (h5, s3), (h6, s3), (h7, s4), (h8, s4), (h9, s5), (h10, s5) ]:
self.addLink( h, s )
def run():
"Test linux router"
topo = NetworkTopo()
net = Mininet( topo=topo ) # controller is used by s1-s3
net.start()
info( '*** Router yonlendirme tablolari:\n---------MC--pw--------\n' )
for s in [ 'r0', 'r1', 'r2' ]:
print net[ s ].cmd( 'route' )
CLI( net )
net.stop()
#if __name__ == '__main__':
# setLogLevel( 'info' )
# run()
topos = { 'mytopo': ( lambda: run() ) }
En son olarakta "sudo mn --custom ~/ahmt.py --topo mytopo --test pingall" komutuyla derleyip tüm ping´leri test ediyoruz. "exit" komutunu girerek Mininet´ten çıkş yapıyoruz.
KAYNAKLAR
https://www.youtube.com/watch?v=jAhCuHq08pc
http://mininet.org/walkthrough/
https://github.com/mininet/mininet/wiki/Mininet-VM-Images
https://github.com/mininet/mininet/tree/master/examples
Hiç yorum yok:
Yorum Gönder