(mininet)如何用两台路由器和各自的主机创建一个拓扑结构

问题描述 投票:0回答:1

该方案由两台路由器组成,相互连接r1-r2(我在Mininet给出的例子中找到了LinuxRouter类)。连接3个主机到r1,每个主机属于不同的子网,网络ping正常。

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 ):
        r1 = self.addNode( 'r1', cls=LinuxRouter, ip='192.168.1.1/24' )
        s1, s2, s3, s4= [ self.addSwitch( s ) for s in ( 's1', 's2', 's3','s4') ]

        self.addLink( s1, r1, intfName2='r1-eth1', params2={ 'ip' : '192.168.1.1/24' } )  
        self.addLink( s2, r1, intfName2='r1-eth2', params2={ 'ip' : '172.16.0.1/12' } )
        self.addLink( s3, r1, intfName2='r1-eth3', params2={ 'ip' : '10.0.0.1/8' } )
        self.addLink( s4, r1, intfName2='r1-eth4', params2={ 'ip' : '5.5.5.1/16' } )

        h1 = self.addHost( 'h1', ip='192.168.1.100/24', defaultRoute='via 192.168.1.1' )
        h2 = self.addHost( 'h2', ip='172.16.0.100/12', defaultRoute='via 172.16.0.1' )
        h3 = self.addHost( 'h3', ip='10.0.0.100/8', defaultRoute='via 10.0.0.1' )
        r2 = self.addNode( 'r2',cls=LinuxRouter,ip='5.5.5.100/16', defaultRoute='via 5.5.5.1' )

        for h, s in [ (h1, s1), (h2, s2), (h3, s3) ]:
            self.addLink( h, s)
        self.addLink(r2,s4)

def run():
    topo = NetworkTopo()
    net = Mininet( topo=topo)
    net.start()
    CLI( net )
    net.stop()

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

如果我试着添加一个主机(我们称它为h4)到r2,就像我为其他主机做的那样(也添加一个交换机,s4,就像r2--s4--h4),它不能ping。请问如何管理?

python router mininet
1个回答
-1
投票

让我们把问题降低到最简单的拓扑结构,你可以有2个路由器,2个交换机和2个主机。就变成。

h1 - s1 - r1 - r2 - s2 - h2。

# Add 2 routers in two different subnets
r1 = net.addHost('r1', cls=LinuxRouter, ip='10.0.0.1/24')
r2 = net.addHost('r2', cls=LinuxRouter, ip='10.1.0.1/24')

# Add 2 switches
s1, s2 = [net.addSwitch(s) for s in ('s1', 's2')]

# Add host-switch links in the same subnet
net.addLink(s1, r1, intfName2='r1-eth1',
            params2={'ip': '10.0.0.1/24'})

net.addLink(s2, r2, intfName2='r2-eth1',
            params2={'ip': '10.1.0.1/24'})

# Add router-router link in a new subnet for the router-router connection
net.addLink(r1, r2, intfName1='r1-eth2', intfName2='r2-eth2',
          params1={'ip': '10.100.0.1/24'}, params2={'ip': '10.100.0.2/24'})

# Add routing for reaching networks that aren't directly connected
r1.cmd("ip route add 10.1.0.0/24 via 10.100.0.2 dev r1-eth2")
r2.cmd("ip route add 10.0.0.0/24 via 10.100.0.1 dev r2-eth2")

# Adding hosts specifying the default route
d1 = net.addHost(name='d1', ip='10.0.0.251/24', defaultRoute='via 10.0.0.1')
d2 = net.addHost(name='d2', ip='10.1.0.252/24', defaultRoute='via 10.1.0.1')

# Add host-switch links
for d, s in [(d1, s1), (d2, s2)]:
    info(net.addLink(d, s))

回顾:你有两个网络10.0.0.024和10.1.0.024通过2个路由器连接,使用网络10.100.0.024。

© www.soinside.com 2019 - 2024. All rights reserved.