作为实验的一部分,我的网络具有以下拓扑结构,两台主机连接到 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,
r1
可以达到r2
和h1
但不能达到h2
.r2
可以达到r1
但不能达到h1
也不能达到h2
.h1
可以达到r1
和r2
但不能达到h2
.h2
可以达到r1
和r2
但不能达到h1
.奇怪的是,我让其他人在 gns3 中使用相同的路由设置运行该程序,并且对他们有效。我错过了什么吗?任何步骤?任何配置?任何线索表示赞赏。