mininet多网段主机路由实验配置

最近试了一下mininet的使用方法,觉得很有意思,现在总结一下路由配置的方法。

实验的主要内容为一台路由器连接多台不同网段的主机,实现多网段主机之间的通信,实验拓扑图如下:

 

然后来实现拓扑。拓扑配置直接用python脚本会比较复杂,所以我使用了miniedit,miniedit是mininet的一个可视化工具,用以下指令打开。

cd mininet/mininet/examples
./miniedit.py

执行后会跳出以下界面:

然后建立拓扑如图所示(注意:在连接链路时最好按主机名顺序向路由器连接,因为路由器网卡接口对主机到的分配是按顺序的,如果乱序到后面配置会很麻烦。):

然后右键点击拓扑中的主机设置IP地址,将h1-h5地址配置为下表所示(一定记得在地址后面加/24配置好子网掩码,如果不加则子网掩码为255.0.0.0,网络是通不了的。如果忘记加/24也可以在后面过程中启动CLI终端后用h* ifconfig netmask 255.255.255.0更改掩码,*代表主机号):

主机h1h2h3h4h5
IP地址192.168.8.1/24192.168.9.1/24192.168.10.1/24192.168.11.1/24192.168.12.1/24

配置好后点击左上角Edit->Preferences,然后选择Start CLI->OK,如下图所示:

然后继续点击左上角File->Export Level...将该拓扑保存为python脚本,方便后续的更改。

到此miniedit使用就结束了~,让我们开始编写脚本吧!脚本的编写难度不大,初学者很容易上手。

首先大家可以试一下运行python脚本,我把脚本命名为topo.py,在终端首先进入脚本文件所在位置,然后输入

sudo su         #进入root模式
python topo.py  #启动脚本

然后就会进入CLI命令台,输入pingall测试节点连通性,结果肯定是不通的,这是因为没有为主机配置网关,主机的包不会被发送到路由器去进行转发。

所以我们可以对每个主机进行路由配置,路由配置可以在CLI直接输入指令配置,但是这样的配置方式是一次性的,第二次启动脚本时主机的配置又会回到原来的状态,所以这里强烈建议直接写入python脚本。

我们设计的方案如下图所示,

所以我们的主要目的是为路由器r1的每个接口配置好与主机同网段的IP地址,然后把主机的网关设置为路由器相应接口的地址就好。所以在脚本中加入r1和各主机在启动时需要执行的指令,节点执行指令的代码写作
 

h*.cmd('   可执行指令        ')
r*.cmd('   可执行指令        ')
s*.cmd('   可执行指令        ')

h代表主机,r代表路由器,s代表交换机。然后把配置路由指令都写到脚本即可。注意所有节点指令执行代码都必须放在脚本的CLI(net)这行代码前,如果是用miniedit生成的脚本,会有info( '*** Post configure switches and hosts\n')的提醒,可以把命令都放在这个提示后面,不能放在网络启动代码前,否则命令不会被执行。

#!/usr/bin/python

from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call

def myNetwork():

    net = Mininet( topo=None,
                   build=False,
                   ipBase='10.0.0.0/8')

    info( '*** Adding controller\n' )
    info( '*** Add switches\n')
    r1 = net.addHost('r1', cls=Node, ip='0.0.0.0')

    info( '*** Add hosts\n')
    h1 = net.addHost('h1', cls=Host, ip='192.168.8.1/24', defaultRoute=None)
    h2 = net.addHost('h2', cls=Host, ip='192.168.9.1/24', defaultRoute=None)
    h3 = net.addHost('h3', cls=Host, ip='192.168.10.1/24', defaultRoute=None)
    h4 = net.addHost('h4', cls=Host, ip='192.168.11.1/24', defaultRoute=None)
    h5 = net.addHost('h5', cls=Host, ip='192.168.12.1/24', defaultRoute=None)
   

    info( '*** Add links\n')
    net.addLink(h1, r1, cls=TCLink , **h1r1)
    net.addLink(h2, r1, cls=TCLink , **h2r1)
    net.addLink(h3, r1, cls=TCLink , **h3r1)
    net.addLink(r1, h4, cls=TCLink , **r1h4)
    net.addLink(r1, h5, cls=TCLink , **r1h5)

    info( '*** Starting network\n')
    net.build()
    info( '*** Starting controllers\n')
    for controller in net.controllers:
        controller.start()

    info( '*** Starting switches\n')

    info( '*** Post configure switches and hosts\n')
    r1.cmd('ifconfig r1-eth0 192.168.8.2 netmask 255.255.255.0')
    r1.cmd('ifconfig r1-eth1 192.168.9.2 netmask 255.255.255.0')
    r1.cmd('ifconfig r1-eth2 192.168.10.2 netmask 255.255.255.0')
    r1.cmd('ifconfig r1-eth3 192.168.11.2 netmask 255.255.255.0')
    r1.cmd('ifconfig r1-eth4 192.168.12.2 netmask 255.255.255.0')

    h1.cmd('route add default gw 192.168.8.2')
    h2.cmd('route add default gw 192.168.9.2')
    h3.cmd('route add default gw 192.168.10.2')
    h4.cmd('route add default gw 192.168.11.2')
    h5.cmd('route add default gw 192.168.12.2')
 
    r1.cmd('sysctl net.ipv4.ip_forward=1')
  
    CLI(net)
    net.stop()

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

上文代码中以下部分为路由配置部分,如果我在前文中的解释不够清楚,大家可以结合图看一下,很轻松就明白原理了~

最后再次执行python脚本,在CLI输入pingall就可以实现所有节点的连通啦~

这篇为一台路由连接多台不同网段主机的实验实现过程,后面会介绍两台主机通过两台路由中继实现连通以及多台主机通过两台路由实现连通的实验~

 

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux是一种开源的操作系统,拥有强大的络功能,可以通过配置由来实现络的连接和通信。 首先,我们需要编辑配置文件。在Linux系统中,通常使用的配置文件是位于/etc/sysconfig/network-scripts/目录下的ifcfg-*文件,其中*代表络接口的名称,如eth0、eth1等。我们可以使用文本编辑器打开所需的络接口配置文件。 接下来,我们需要配置络接口的IP地址、子掩码和关。IP地址是用来标识络上每个节点的唯一地址,子掩码则用来划分络地址和主机地址的边界,而关是将数据包从一个络发送到另一个络的出口。 在ifcfg-*文件中,我们可以找到以下几个关键的配置参数: - IPADDR:指定络接口的IP地址。 - NETMASK:指定络接口的子掩码。 - GATEWAY:指定默认关的IP地址。 我们需要根据实际情况将这些参数填入配置文件中,并保存修改。 配置络接口参数之后,我们还需要配置静态由。静态由是事先手动配置好的由表项,用于指定数据包的发送径。我们可以使用route命令来添加、删除和查看由表项。 通过route命令,我们可以指定目标络、子掩码、关和出口络接口等参数,来配置由表项。具体的命令格式为: route add -net 目标段 netmask 子掩码 gw 关 在添加完成静态由之后,我们可以使用route命令来查看当前由表的情况,确保配置正确。 最后,我们可以使用ping命令来测试络的连通性,以验证配置是否成功。输入ping 加上目标IP地址或域名,如果能够收到回应表示配置成功。 总结起来,配置Linux的由需要编辑配置文件,指定络接口的IP地址、子掩码和关。然后通过route命令来添加和查看静态由表项,并使用ping命令测试络的连通性。这样就能够实现Linux系统的配置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值