[Mininet/Python]:无法让两个主机互相 ping

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

作为实验的一部分,我的网络具有以下拓扑结构,两台主机连接到 mininet 中的两个路由器(在 Ubuntu 22.04.02 虚拟机上)

     h1 - r1 - r2 - h2      

我在 mininet API 中编写了以下脚本来设置我的网络拓扑和路由:

    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='192.168.0.0/16')
        info( '* Adding controller\n' )
        info( '* Add switches\n')
        r1 = net.addHost('r1', cls=Node, ip='0.0.0.0')
        r1.cmd('sysctl -w net.ipv4.ip_forward=1')
        r2 = net.addHost('r2', cls=Node, ip='0.0.0.0')
        r2.cmd('sysctl -w net.ipv4.ip_forward=1')

        info( '* Add hosts\n')
        h1 = net.addHost('h1', cls=Host, ip='192.168.0.103/24', defaultRoute='via 192.168.0.1')
        h2 = net.addHost('h2', cls=Host, ip='192.168.1.2/24', defaultRoute='via 192.168.1.1')

        info( '* Add links\n')
        net.addLink(h1, r1, intfName2='r1-eth0', params2={'ip':'192.168.0.1/24'})
        net.addLink(r1, r2, intfName1='r1-eth1', intfName2='r2-eth0', params1=   {'ip':'192.168.2.1/24'}, params2={'ip':'192.168.2.2/24'})
        net.addLink(r2, h2, intfName1='r2-eth1', params1={'ip':'192.168.1.1/24'})


        info( '* Starting network\n')
        net.build()
    
        info( '* Post configure switches and hosts\n')
    # Setting up IP addresses and routing tables
        r1.cmd('ifconfig r1-eth0 192.168.0.1 netmask 255.255.255.0')
        r1.cmd('ip route add 192.168.1.0/24 via 192.168.2.2')
        r1.cmd('ip route add 192.168.2.0/24 via 192.168.0.1')

        r2.cmd('ifconfig r2-eth0 192.168.2.1 netmask 255.255.255.0')
        r2.cmd('ip route add 192.168.0.0/24 via 192.168.2.2')
        r2.cmd('ip route add 192.168.1.0/24 via 192.168.2.2')

        h1.cmd('ip route add default via 192.168.0.1')
        h2.cmd('ip route add default via 192.168.1.1')

    
        CLI(net)
        net.stop()


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

问题是我无法让主机相互 ping 通,也无法让主机到达另一端的路由器。以下是 ping 可达性矩阵:

mininet> pingall
*** Ping: testing ping reachability
r1 -> r2 h1 X 
r2 -> r1 X h2 
h1 -> r1 r2 X 
h2 -> r1 r2 X 
*** Results: 33% dropped (8/12 received)

可以理解为:

通过ping,

  1. r1
    可以达到
    r2
    h1
    但不能达到
    h2
    .
  2. r2
    可以达到
    r1
    但不能达到
    h1
    也不能达到
    h2
    .
  3. h1
    可以达到
    r1
    r2
    但不能达到
    h2
    .
  4. h2
    可以达到
    r1
    r2
    但不能达到
    h1
    .

奇怪的是,我让其他人在 gns3 中使用相同的路由设置运行该程序,并且对他们有效。我错过了什么吗?任何步骤?任何配置?任何线索表示赞赏。

python networking network-programming mininet sdn
© www.soinside.com 2019 - 2024. All rights reserved.