以下是一个不使用远程控制器的传统拓扑,包含 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() 方法停止网络。

Mininet 传统拓扑:2 路由器,4 主机,无远程控制器

原文地址: https://www.cveoy.top/t/topic/lLeC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录