mininet:使用vxlan鏈接兩臺虛擬機的網絡topo

需改虛擬機的網絡適配器,將其改成host-only

嘗試ping宿主機ip地址,此時可以ping同與虛擬機相連的虛擬網卡ip地址,沒法ping同其餘網卡ip地址node

在虛擬機和宿主機中建立網絡topo

在虛擬機運行如下指令建立topo

sudo  mn

此時,在虛擬機中含如下網絡節點bash

hosts:  h1 h2 
switches: s1 
links: (h1, s1) (h2, s1) 
controller:c0

其中h1和h2的ip分別爲10.0.0.110.0.0.2網絡

在宿主機中建立topo網絡

新建topo-2sw-2host.py併發

from mininet.topo import Topo

class MyTopo( Topo ):
    "Simple topology example."

    def build( self ):
        "Create custom topo."

        # Add hosts and switches
        h3 = self.addHost( 'h3',ip='10.0.0.3' )
        h4 = self.addHost( 'h4',ip='10.0.0.4' )
        leftSwitch = self.addSwitch( 's3' )
        # Add links
        self.addLink( h3, leftSwitch )
        self.addLink( leftSwitch,h4)
topos = { 'mytopo': ( lambda: MyTopo() ) }

經過命令sudo mn --custom topo-2sw-2host.py --topo mytopo建立網絡topo
其中h1和h2的ip分別爲10.0.0.310.0.0.4測試

關閉控制器

控制器可以幫助switch創建流表,若是要手動創建nodes連接關係,須要先關閉控制器。ui

注意:也能夠在mn命令的最後添加 --controller remote關閉controller,以省略如下步驟
在關閉控制器前測試h1與h2之間互ping,由於controller的存在,彼此可以ping通。
在宿主機和虛擬機中分別輸入sudo killall controller關閉控制器,這時候再嘗試ping,發現沒法ping通。由於switch中流表爲空。
執行sh ovs-ofctl dump-flows s1,能夠看到流表爲空,其信息以下code

mininet> sh ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):

建立vxlan

運行sh ovs-vsctl add-port s1 vxlan添加vxlan端口。
在虛擬機中,端口能夠成功成功建立,但在宿主機中建立失敗,提示錯誤信息:blog

mininet> sh ovs-vsctl add-port s13vxlan
ovs-vsctl: Error detected while setting up 'vxlan': could not open network device vxlan (No such device).  See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".

解決方案以下ip

The port‘s name should be a exist interface use ifconfig to see, such as eth0. If you just want to use a virtual port name to make a test you should 
specify the port's type like ovs-vsctl add-port br0 port0 -- set Interface port0 type=internal or ovs-vsctl set Interface port0 type=internal

將指令改成ci

sh ovs-vsctl add-port s3 vxlan   -- set Interface vxlan type=internal

在虛擬機中輸入如下指令

sh ovs-vsctl set interface vxlan type=vxlan option:remote_ip=10.0.0.7 option:key=100 ofport_request=10

其中 ip地址是宿主機的ip,key是vxlan的標籤,opport_request是端口名稱
在宿主機中須要將以上命令的ip改成虛擬機的ip地址。

總結

以上創建的網絡形式以下
20190725110710.png
其中R爲路由器,s1和s2爲交換機,h1-h4爲主機

同一交換機下的主機通訊

20190725113623.png

  1. h1嘗試ping h2時,擁有h2的ip地址但沒有h2的mac地址。所以h1首先嚐試經過arp獲取h2 mac地址。
  2. h1 發送 arp給 s1,s1收到arp後進行廣播,同時記錄h1的mac地址和端口的映射。h2收到廣播後發現與本身的ip一致,根據廣播給定的ip地址向s1發送響應,s1將響應發送給h1,同時s1記錄h2的mac地址和端口的映射。
  3. h1獲取h2的mac地址後,在包裏面加入h2的ip地址和mac地址併發送給s1.
  4. s1收到包後,檢查mac地址,找出對應的h2端口映射,將包發送到h2對應的端口
  5. h2收到包後,匹配包的ip地址,ip地址一致則對包作進一步處理

跨路由器主機通訊

相關文章
相關標籤/搜索