Notice: Constant WP_DEBUG already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 12

Notice: Constant WP_DEBUG_LOG already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 13

Notice: Constant WP_DEBUG_DISPLAY already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 14
Mininet链接真实网络的实现【zoues.com】 – zoues

LOADING

Follow me

Mininet链接真实网络的实现【zoues.com】
六月 8, 2017|ITPaaSSDN

Mininet链接真实网络的实现【zoues.com】

Mininet链接真实网络的实现【zoues.com】

黄志文,福州大学数计学院2014级计算机科学与技术(实验班)本科生,研究侧重于数据平面可编程化。

一、背景

Mininet是由一些虚拟的终端节点(end-hosts)、交换机、路由器连接而成的一个网络仿真器,它采用轻量级的虚拟化技术使得系统可以和真实网络相媲美,在SDN实验中不乏发现它的身影。在默认的情况下,Mininet是没有链接到网络,自己独立形成一个局域网络。这通常来说是一个好事,隔离了外界网络的干扰,但是有时我们是需要我们创建的网络链接到网络中,比如需要进行主机与远端控制器的通信。这时候就需要我们进行一些相对应的配置来完成我们的目标。

二、环境

  • Ubuntu14.04LTS in VM
  • Mininet

2.1 Mininet安装

获取源码到本机

Java

1
git clone git://github.com/mininet/mininet

安装Mininet

Java

1
2
cd mininet
./util/install.sh [options]

这里典型的[options]主要有下面几种:

  • “-a”:完整安装包括Mininet VM,还包括如Open vSwitch的依赖关系,以及像的OpenFlow Wireshark分离器和POX。默认情况下,这些工具将被安装在你的home目录中。
  • “-nfv”:安装Mininet、基于OpenFlow的交换机和Open vSwitch。
  • “-s mydir” :在其他选项使用前使用此选项可将源代码建立在一个指定的目录中,而不是在你的home目录。

通常而言,选择完整安装Mininet

Java

1
./util/install a

2.2 Mininet链接真实网络详解

在Mininet2.2以及往后的版本中,可以通过–nat标签来实现链接

Java

1
sudo mn nat ...

Mininet链接真实网络的实现
通过ping指令确认是否与真实网络链接
Mininet链接真实网络的实现
值得注意的是,默认情况下,所有的这些方法将重路由(reroute)来自Mininet服务器或者VM的本地的流量,并将重定向到Mininet的IP子网当中(默认为10.0.0.0/8)。如果正在使用的LAN中相同的网段,则可能会造成断开链接。可以使用–ipbase来更改这个子网。

我们同样可以通过调用Python API包 Mininet.addNAT() 来达到NAT。

Java

1
2
3
4
net = Mininet( topo=... )
net.addNAT().configDefault()
net.start()
...

同时你也可以建立NAT拓扑。

Java

1
2
3
4
5
6
7
8
9
class NatTopo( Topo ):
    def build( self, natIP=‘10.0.0.254’ ):
        self.hopts = { ‘defaultRoute’: ‘via ‘ + natIP }
        hosts  = [ self.addHost( h ) for h in ‘h1’, ‘h2’ ]
        s1 = self.addSwitch( ‘s1’ )
        for h in hosts:
            self.addLink( s1, h )
        nat1 = self.addNode( ‘nat1’, cls=NAT, ip=natIP,inNamespace=False )
        self.addLink( nat1, s1 )

但是这种的实现方法会造成在Mininet中增加了一个nat0主机以达到链接Internet的目的。
Mininet链接真实网络的实现
在对于网络拓扑有要求的情况下这种方法就显得不太适用。

在Mininet 2.1.0版本试验NAT可以参考 examples目录下的nat.py文件。

在Mininet2.0及其更早的版本的实现的方法是将交换机链接到eth0端口从而实现链接网络的目的。

注意:脚本假定eth0是链接到互联网或者LAN的主机接口,如果不是的的话,你可以进行更改。

将以下语句添加到 /etc/network/interfaces

Java

1
iface rooteth0 inet manual

Mininet链接真实网络的实现
通过Mininet建立简单的网络拓扑。

Java

1
sudo mn

通过OVS命令将s1交换机增加本地端口eth0,开启DHCP功能,并将其ip地址设为跟PC同一个网段下,使其在Mininet的主机与控制器可以进行通信。

Java

1
2
sudo ovsvsctl addport s1 eth0
sudo ifconfig s1 Hostip

Mininet链接真实网络的实现
此时主机已经可以实现DHCP功能,可以自动分配IP,并且每次运行分配的IP不同。

更多的功能可以参考 https://gist.github.com/lantz/5640610

三、实验应用场景

Mininet链接真实网络的实现
创建如图所示的拓扑结构
Mininet链接真实网络的实现

Java

1
sudo mn topo single,3 controller=remote,ip=10.0.2.15,p

Topology: sudo mn –topo=

  • tree,n,m 第一个参数为深度,第二个位扇出系数。可以写成–tree,depth=2,fanout=8
  • single, n:单个交换机,n个交换机
  • liner, n: 线性拓扑,n个交换机

10.0.2.15为floodlight所在服务器的ip。采用6653端口作为openflow通信端口。(6633端口时常被mininet默认控制器占用)

在我们日常使用过程中,可能会遇到需要通过主机跟远端控制器进行通信,但是默认情况下Mininet下的主机却是无法实现的。
比如我们用主机h1去ping控制器所在ip地址10.0.2.15
Mininet链接真实网络的实现
方法一:这时我们使用mininet的nat标签尝试一下连通网络。
Mininet链接真实网络的实现
此时我们再用h1 ping一下10.0.2.15和百度
Mininet链接真实网络的实现
Mininet链接真实网络的实现
方法二:增加eth0端口
Mininet链接真实网络的实现
此时我们同样ping一下10.0.2.15
Mininet链接真实网络的实现
在每次退出mininet之后,建立使用sudo mn -c删除缓存。

no comments
Share