我们将Mininet用于教学目的,作为网络模拟器,我们的学生可以在其中定义自己的IP网络和路由表。更新网络接口的IP地址时会出现一个常见问题。例如,如果我们通过ifconfig
更改其IP地址,则使用Mininet的默认拓扑(两个主机和一个交换机,以及属于10.0.0.0/8的两个主机):
h1 ifconfig h1-eth0 192.168.1.1/24
h2 ifconfig h2-eth0 192.168.1.2/24
然后我们输入dump
我们获得以下信息:
<Host h1: h1-eth0:10.0.0.1 pid=1169>
<Host h2: h2-eth0:10.0.0.2 pid=1173>
并且pingall
命令不起作用。
有没有办法强制通过python方法或类似方法更新信息?我们已经检查过,如果我们向主机发送数据包,信息会更新,但这对于由数十台主机组成的拓扑结构来说是不切实际和乏味的。
我知道py h1.setIP()
可以解决问题,但对于我们的目的而言,继续使用像ifconfig
这样的操作系统命令而不是使用python调用非常重要。
提前致谢。
答案 0 :(得分:0)
在mininet中,默认情况下将交换机创建为第2层交换机,默认情况下它具有多个规则。你可以使用
sh ovs-ofctl dump-flows s1
检查s1中的流规则。
因此,在更改h1和h2的IP地址之前,规则如下:
NXST_FLOW reply (xid=0x4)
是空的。
然后输入pingall,交换机将根据原始IP地址(10.0.0.1&amp; 10.0.0.2)添加规则,如下所示:
NXST_FLOW reply (xid=0x4):
cookie=0x0, duration=1.376s, table=0, n_packets=2, n_bytes=196, idle_timeout=60, idle_age=1, priority=65535,icmp,in_port=2,vlan_tci=0x0000,dl_src=f6:6b:f6:42:44:ac,dl_dst=06:37:92:eb:2c:a0,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,icmp_type=0,icmp_code=0 actions=output:1
cookie=0x0, duration=1.375s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=1, priority=65535,icmp,in_port=2,vlan_tci=0x0000,dl_src=f6:6b:f6:42:44:ac,dl_dst=06:37:92:eb:2c:a0,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,icmp_type=8,icmp_code=0 actions=output:1
cookie=0x0, duration=1.374s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=1, priority=65535,icmp,in_port=1,vlan_tci=0x0000,dl_src=06:37:92:eb:2c:a0,dl_dst=f6:6b:f6:42:44:ac,nw_src=10.0.0.1,nw_dst=10.0.0.2,nw_tos=0,icmp_type=0,icmp_code=0 actions=output:2
mininet将“h1”映射到10.0.0.1,将“h2”映射到10.0.0.2
现在如果您将IP更改为192.168.1.1/24和192.168.1.2/24。规则保留为10.0.0.1和10.0.0.2。然后在60秒空闲超时后,它再次变为空。
因此,如果您想使用新IP连接到彼此。您可以尝试对主机名使用单个ping,例如:
h1 ping h2
h2 ping h2
更改Mininet中的映射,然后您可以再次ping通。