【问题标题】:How do I connect three routers to three hosts in mininet?如何将三个路由器连接到 mininet 中的三个主机?
【发布时间】:2021-11-29 19:07:43
【问题描述】:

我有这段代码,我试图用它来将三个路由器 r1、r2、r3 连接在一起。我想我必须使用交换机将主机节点连接到路由器,以便每个路由器都连接到连接到主机的交换机。我让它适用于 2 个路由器,但我无法让它适用于三个路由器 我正在使用 mininet 来运行 python 脚本。有没有办法将 IP 地址添加到主机的路由表中。我是 mininet 的新手,所以我不熟悉连接路由器。我必须为 7 个路由器执行此操作,而不仅仅是三个,但我现在从 3 个开始。有没有更好的方法来做到这一点?

#!/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 2 routers in two different subnets
        r1 = self.addHost('r1', cls=LinuxRouter, ip='10.0.0.1/24')
        r2 = self.addHost('r2', cls=LinuxRouter, ip='10.1.0.1/24')
        r3 = self.addHost('r3', cls=LinuxRouter, ip='10.2.0.1/24')

        # Add 2 switches
        s1 = self.addSwitch('s1')
        s2 = self.addSwitch('s2')
        s3 = self.addSwitch('s3')

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

        self.addLink(s2,
                     r2,
                     intfName2='r2-eth1',
                     params2={'ip': '10.1.0.1/24'})
                     
        self.addLink(s3,
                     r3,
                     intfName2='r3-eth1',
                     params2={'ip': '10.2.0.1/24'})
        
        # Add router-router link in a new subnet for the router-router connection
        self.addLink(r1,
                     r2,
                     intfName1='r1-eth2',
                     intfName2='r2-eth2',
                     params1={'ip': '10.100.0.1/24'},
                     params2={'ip': '10.100.0.2/24'})
        
        self.addLink(r1,
                     r2,
                     intfName1='r1-eth3',
                     intfName2='r2-eth3',
                     params1={'ip': '10.101.0.1/24'},
                     params2={'ip': '10.101.0.2/24'})
     
        
        # Adding hosts specifying the default route
        d1 = self.addHost(name='d1',
                          ip='10.0.0.251/24',
                          defaultRoute='via 10.0.0.1')
        d2 = self.addHost(name='d2',
                          ip='10.1.0.252/24',
                          defaultRoute='via 10.1.0.1')
        d3 = self.addHost(name='d3',
                          ip='10.1.0.253/24',
                          defaultRoute='via 10.1.0.1')

        # Add host-switch links
        self.addLink(d1, s1)
        self.addLink(d2, s2)
        self.addLink(d3, s2)


def run():
    topo = NetworkTopo()
    net = Mininet(topo=topo)

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

    net.start()
    CLI(net)
    net.stop()


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

【问题讨论】:

  • 您要解决什么问题?当您遇到无法解决的特定问题时,最好使用本网站,寻求指导的一般问题不符合 SO 的目标。
  • 你为什么需要这个?尝试将自己的组件配置为仅使用提供的开关有什么好处?

标签: python python-2.7 mininet


【解决方案1】:

路由器3不工作的原因是你没有连接它!所以不是

self.addLink(r1,
                     r2,
                     intfName1='r1-eth3',
                     intfName2='r2-eth3',
                     params1={'ip': '10.101.0.1/24'},
                     params2={'ip': '10.101.0.2/24'})

使用

self.addLink(r1,
                     r2,
                     intfName1='r1-eth0',
                     intfName2='r3-eth0',
                     params1={'ip': '10.101.0.1/24'},
                     params2={'ip': '10.101.0.2/24'})

【讨论】:

    猜你喜欢
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    相关资源
    最近更新 更多