在Mininet中创建简单的拓扑3个路由器和3个主机

问题描述

我试图通过修改微型网络(linuxrouter.py)的创建示例来创建具有3个路由器和3个主机的拓扑。

不幸的是,当我去:

h1 ping h2

它不起作用,并告诉我“目标主机不可达”。 我想知道我在用代码做错什么,非常感谢。

这是我要记住的拓扑:

enter image description here

这是python中的代码

#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import Node
from mininet.log import setLogLevel,info
from mininet.cli import CLI


class LinuxRouter(Node):
    def config(self,**params):
        super(LinuxRouter,self).config(**params)
        self.cmd('sysctl net.ipv4.ip_forward=1')

    def terminate(self):
        self.cmd('sysctl net.ipv4.ip_forward=0')
        super(LinuxRouter,self).terminate()


class NetworkTopo(Topo):
    def build(self,**_opts):
        # Add 3 routers in three different subnets
        r1 = self.addNode('r1',cls=LinuxRouter,ip='10.0.0.1/24')
        r2 = self.addNode('r2',ip='10.1.0.1/24')
        r3 = self.addNode('r3',ip='10.2.0.1/24')

       # Adding hosts specifying the default route
        h1 = self.addHost(name='h1',ip='10.0.0.251/24',defaultRoute='via 10.0.0.1')
        h2 = self.addHost(name='h2',ip='10.1.0.252/24',defaultRoute='via 10.1.0.1')
        h3 = self.addHost(name='h3',ip='10.2.0.253/24',defaultRoute='via 10.2.0.1')
        # Add router-router link in a new subnet for the router-router connection
        self.addLink(r1,r2,intfName1='r1-eth0',intfName2='r2-eth0',params1={'ip': '10.5.0.1/24'},params2={'ip': '10.5.0.100/24'})
        self.addLink(r1,r3,intfName1='r1-eth1',intfName2='r3-eth0',params1={'ip': '10.6.0.253/24'},params2={'ip': '10.6.0.254/24'})
        self.addLink(r2,intfName1='r2-eth1',intfName2='r3-eth1',params1={'ip': '10.7.0.1/24'},params2={'ip': '10.7.0.10/24'})
        # Add host-router links
        self.addLink(h1,r1,intfName1='h1-eth3',intfName2='r1-eth3')
        self.addLink(h2,intfName1='h2-eth4',intfName2='r2-eth4')
        self.addLink(h3,intfName1='h3-eth5',intfName2='r3-eth5')

def run():
    topo = NetworkTopo()
    net = Mininet(topo=topo)
    # Add routing for reaching networks that aren't directly connected
    info(net['r1'].cmd("route"))
    info(net['r2'].cmd("route"))
    info(net['r3'].cmd("route"))
    net.start()
    CLI(net)
    net.stop()


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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)