使用Mininet 作為VM之間的網路拓樸- Using Mininet as a network topology between VMs

篇會簡介如和使用Mininet VM作為VM之間的網路拓樸

 

類似圖中這樣的概念,每個方格都是一個VM

 

首先為了確定server VM 跟 Client VM 的網路在沒有中間mininet的情況下沒辦法互通

我分別將server 和client的網路介面設為 host only

將VMnet2設為server VM的網路介面,而VMnet3則是client VM的網路介面

 

 

而在MininetVM則要同時把 VMnet2,3都加進來

由於VMnet都是host only並沒有橋接的關係,到目前為止 Server vm 和Client vm沒辦法相通

但可以各自與mininet相通

 

接下來我們透過mininet來架設一個簡易的網路拓樸

from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.cli import CLI
from mininet.link import Intf
from mininet.log import setLogLevel, info

def myNetwork():

    net = Mininet( topo=None,
                   build=False)

    info( '*** Adding controller\n' )
    c0= net.addController(name='c0',
                          controller=RemoteController,
                          ip='192.168.2.130')  //設定controller資訊,我的controller是在另一台VM上

    info( '*** Add switches\n')
    s1 = net.addSwitch('s1', failMode ='secure')  //設定switch為secure模式
    s2 = net.addSwitch('s2', failMOde ='secure')

    Intf( 'eth1', node=s1 )  // eth1為先前設定的VMnet2
    Intf( 'eth2', node=s2 ) // eth2 為VMnet3

    info( '*** Add links\n')
    net.addLink(s1,s2)

    info( '*** Starting network\n')
    net.start()
    CLI(net)
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )
    myNetwork()

上面程式碼存成.py 執行之後 mininet就會產生一個 具有兩個switch的拓樸

switch1接到實體的eth2,switch2則是接到eth3

在Opendaylight的網頁介面上可以看到剛剛架好的網路拓樸

原本以為這樣server (192.168.20.128) 就ping的到client (192.168.30.128)

但後來發現還要去設定路由表,加一個新的網段到自己的subnet

於是就在server端新增client端192.168.30.xxx的網段

ip route add 192.168.30.0/24 dev eth0

同樣也在client端新增server網段的subnet

ip route add 192.168.20.0/24 dev eth0

之後server跟client端就能透過mininet 架設的拓樸來連接了

透過Controller也可以看到有封包經過我們的switch