10. Mininet

Mininet是一个由Stanford大学Nick研究小组开发的网络虚拟化平台,可以用来方便的测试、验证和研究OpenFlow和SDN网络。

Mininet使用Linux Network Namespaces来创建虚拟节点,默认情况下,Mininet会为每一个host创建一个新的网络命名空间,同时在root Namespace(根进程命名空间)运行交换机和控制器的进程,因此这两个进程就共享host网络命名空间。由于每个主机都有各自独立的网络命名空间,我们就可以进行个性化的网络配置和网络程序部署。

Mininet提供了命令行工具mn和Python API,用来构建网络拓扑。

安装Mininet

在Ubuntu系统上可以使用通过下面的命令来安装mininet:

sudo apt-get install -y mininet openvswitch-testcontroller
sudo /usr/bin/ovs-testcontroller /usr/bin/ovs-controller
sudo service openvswitch-switch start

然后运行下面的命令验证安装是否正常

sudo mn --test pingall

其他系统上,可以参考这里下载预置mininet的虚拟机镜像。

mn命令行

直接运行mn命令可以进入mininet控制台,默认创建一个minimal拓扑,即一个控制器、一台OpenFlow交换机并连着两台host。

$ sudo mn
mininet> nodes
available nodes are:
h1 h2 s1
mininet> dump
<Host h1: h1-eth0:10.0.0.1 pid=21291>
<Host h2: h2-eth0:10.0.0.2 pid=21293>
<OVSBridge s1: lo:127.0.0.1,s1-eth1:None,s1-eth2:None pid=21298>

以节点名字开始的命令在节点内运行

命令和选项

命令列表

  • py:执行python命令,如py h1.IP()

  • dump:查看各节点的信息

  • nodes:查看所有节点

  • net:查看链路信息

  • links:查看网络接口连接拓扑

  • link:开启或关闭网络接口,如link s1 h1 up

  • xterm:开启终端

  • dpctl:操作OpenFlow流表

  • pingall:自动ping测试

选项列表

  • --topo:自定义拓扑,如linear|minimal|reversed|single|torus|tree

  • --link:自定义网络参数,如default|ovs|tc

  • --switch:自定义虚拟交换机,如default|ivs|lxbr|ovs|ovsbr|ovsk|user

  • --controller:自定义控制器,如default|none|nox|ovsc|ref|remote|ryu

  • --nat:自动设置NAT

  • --cluster:集群模式,将网络拓扑运行在多台机器上

  • --mac:自动设置主机mac

  • --arp:自动设置arp表项

自定义网络拓扑

默认的minimal拓扑比较简单,可以使用--topo选项设置网络拓扑。

自定义网络参数

可以使用--link选项设置网络参数。

自定义独立命名空间

默认情况下,host在独立的netns中,而switch和controller都还是使用host netns,可以使用--innamespace选项将它们也放到独立的netns中。

Python API

对于复杂的网络,需要使用Python API来构建。

比如,使用python API构造一个单switch接4台虚拟节点的示例

这个脚本可以直接运行,也可以使用mn命令启动

Mininet v2.2.0+还提供了一个miniedit的可视化界面,更直观的编辑和查看网络拓扑。miniedit实际上是一个python脚本,存放在mininet安装目录的examples中,如/usr/lib/python2.7/dist-packages/mininet/examples/miniedit.py

参考文档

最后更新于