Mininet 传统拓扑:2 路由器,4 主机,无远程控制器
以下是一个不使用远程控制器的传统拓扑,包含 2 个路由器和 4 个主机,每个路由器连接 2 台主机,路由器中设置转发规则的 Mininet 代码:
from mininet.net import Mininet
from mininet.node import Controller, OVSKernelSwitch, RemoteController
from mininet.link import TCLink
if '__main__' == __name__:
net = Mininet(controller=None, switch=OVSKernelSwitch, link=TCLink)
# 创建路由器和主机
r1 = net.addHost('r1')
r2 = net.addHost('r2')
h1 = net.addHost('h1')
h2 = net.addHost('h2')
h3 = net.addHost('h3')
h4 = net.addHost('h4')
# 创建连接
net.addLink(h1, r1)
net.addLink(h2, r1)
net.addLink(h3, r2)
net.addLink(h4, r2)
net.addLink(r1, r2)
# 设置路由器转发规则
r1.cmd('ifconfig r1-eth0 0')
r1.cmd('ifconfig r1-eth1 0')
r1.cmd('echo 1 > /proc/sys/net/ipv4/ip_forward')
r1.cmd('ip addr add 10.0.1.1/24 dev r1-eth0')
r1.cmd('ip addr add 10.0.2.1/24 dev r1-eth1')
r1.cmd('route add default gw 10.0.2.2')
r2.cmd('ifconfig r2-eth0 0')
r2.cmd('ifconfig r2-eth1 0')
r2.cmd('echo 1 > /proc/sys/net/ipv4/ip_forward')
r2.cmd('ip addr add 10.0.3.1/24 dev r2-eth0')
r2.cmd('ip addr add 10.0.4.1/24 dev r2-eth1')
r2.cmd('route add default gw 10.0.4.2')
# 启动网络
net.start()
# 测试连通性
net.ping([h1, h3])
net.ping([h2, h4])
# 停止网络
net.stop()
在此拓扑中,我们创建了两个路由器 r1 和 r2,以及四个主机 h1、h2、h3 和 h4。每个路由器都连接两个主机。我们使用 addLink() 方法来创建连接,并使用 cmd() 方法来设置路由器的转发规则。在这种情况下,我们使用静态路由。我们在每个路由器上将第一个接口配置为 10.0.1.1 和 10.0.3.1 的 IP 地址,并将第二个接口配置为 10.0.2.1 和 10.0.4.1 的 IP 地址。我们还将每个路由器的默认网关设置为相邻路由器的另一个接口的 IP 地址。这样,当主机发送数据包时,它将被路由器转发到正确的接口,进而到达目标主机。
我们在启动网络之前设置了控制器为 None,这意味着我们不使用远程控制器。我们使用 start() 方法启动网络,并使用 ping() 方法测试主机之间的连通性。最后,我们使用 stop() 方法停止网络。
原文地址: https://www.cveoy.top/t/topic/lLeC 著作权归作者所有。请勿转载和采集!