Mininet/Python环境下双主机经双路由器无法互通问题求助
Mininet/Python环境下双主机经双路由器无法互通问题求助
我仔细看了你的Mininet脚本和ping测试结果,发现问题主要出在路由表配置错误和一些冗余的IP设置上,下面帮你一步步梳理问题并给出修正方案:
问题1:冗余且错误的IP重复配置
你在通过net.addLink()给路由器接口设置IP后,又用ifconfig重复配置,其中r2的接口IP还写错了:
- r2的
r2-eth0接口在addLink时已经设置为192.168.2.2/24,但后面的ifconfig r2-eth0 192.168.2.1 netmask 255.255.255.0把IP改成了和r1的r1-eth1(192.168.2.1/24)冲突的地址,这直接导致r1和r2的直连通路出现异常。
问题2:完全错误的路由表配置
路由器的路由表只需要添加非直连网段的路由即可,直连网段会因为接口配置了IP自动生成路由,你的脚本里添加的路由完全不符合逻辑:
- r1直连
192.168.0.0/24(r1-eth0)和192.168.2.0/24(r1-eth1),不需要再添加这两个网段的路由,只需要添加到192.168.1.0/24的路由,下一跳指向r2的192.168.2.2 - r2直连
192.168.2.0/24(r2-eth0)和192.168.1.0/24(r2-eth1),同样不需要添加这两个网段的路由,只需要添加到192.168.0.0/24的路由,下一跳指向r1的192.168.2.1 - 主机的默认路由已经在
addHost()时通过defaultRoute参数设置了,后面重复设置属于冗余操作,虽然不影响,但可以去掉
修正后的脚本关键部分
把你脚本中# Setting up IP addresses and routing tables下面的代码替换成以下内容:
# 移除冗余的ifconfig配置,因为addLink时已经设置了接口IP # 设置正确的路由表 r1.cmd('ip route add 192.168.1.0/24 via 192.168.2.2') r2.cmd('ip route add 192.168.0.0/24 via 192.168.2.1') # 主机默认路由已在addHost时设置,这里可以省略
验证方法
运行修正后的脚本,进入Mininet CLI后执行pingall,应该能看到所有节点都能互通。另外你也可以在CLI中通过r1 ip route和r2 ip route命令查看路由表,确认直连路由和手动添加的路由是否正确。
备注:内容来源于stack exchange,提问作者Toshitt Ahuja
相关产品推荐
相关产品推荐

