mininet(二)简单的路由实验

mininet(一)实验环境搭建
mininet(二)简单的路由实验
mininet(三)简单的NAT实验

在网上找了 好几个代码都是不能直接复现成功,这里把自己实现成功的代码给大家演示一下。

实验的拓扑结构如下:
这里写图片描述
试验中利用 一台主机代替router,开启ip_forward选项,来链接两个子网。

#!/usr/bin/python
import time
from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSKernelSwitch,UserSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel
from mininet.link import Link, TCLink

def topology():

    "Create a network."
    net = Mininet( controller=RemoteController, link=TCLink, switch=OVSKernelSwitch )

    print "*** Creating nodes ***"
    h1 = net.addHost( 'h1', mac='00:00:00:00:00:01', ip='10.0.10.1/24' )
    h2 = net.addHost( 'h2', mac='00:00:00:00:00:02', ip='10.0.10.2/24' )
    h3 = net.addHost( 'h3', mac='00:00:00:00:00:03', ip='10.0.1.1/24' )
    s1 = net.addSwitch( 's1', listenPort=6673, mac='00:00:00:00:00:11' )
    s2 = net.addSwitch( 's2', listenPort=6674, mac='00:00:00:00:00:12' )
    c0 = net.addController( 'c0', controller=RemoteController, ip='127.0.0.1', port=6633 )

    print "*** Creating links ***"
    net.addLink(s1, h1, 1, 0)
    net.addLink(s2, h3, 1, 0)

    Link(h2, s1, intfName1='h2-eth0')
    Link(h2, s2, intfName1='h2-eth1')
    h2.cmd('ifconfig h2-eth1 10.0.1.2 netmask 255.255.255.0')
    h2.cmd('sysctl net.ipv4.ip_forward=1')

    h1.cmd('route add default gw 10.0.10.2')
    h3.cmd('route add default gw 10.0.1.2')

    print "*** Starting network ***"
    net.build()
    c0.start()
    s1.start( [c0] )
    s2.start( [c0] )

    print "*** Running CLI ***"
    CLI( net )

    print "*** Stopping network ***"
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )
    topology()

试验时,运行./Router.py 然后利用h1 ping h3还是不通。
给两个交换机下发转发 规则

 # ovs-ofctl add-flow s1 in_port=1,actions=output:2
 # ovs-ofctl add-flow s1 in_port=2,actions=output:1
 # ovs-ofctl add-flow s2 in_port=1,actions=output:2
 # ovs-ofctl add-flow s2 in_port=2,actions=output:1
h1 route add default gw 10.0.10.2
h3 route add default gw 10.0.1.2

此时可以利用

h1 ping 10.0.10.2
h3 ping 100.1.2

但是h1 ping h3 仍然不通。开启ip_forward转发

h2 sysctl net.ipv4.ip_forward=1

此时h1 ping h3 就可以通了

ps:我在Router.py中明明写了

    h2.cmd('sysctl net.ipv4.ip_forward=1')
    h1.cmd('route add default gw 10.0.10.2')
    h3.cmd('route add default gw 10.0.1.2')

但是好像没有起作用,只有手动添加之后才生效,没有找到具体原因。还有实验时竟然将h1 的default gw 配置成 10.0.10.0 了,h3 的default gw 配置成 10.0.1.0 了,导致一直不通。基本网络知识没有过关。

Mininet是一个广泛使用的网络模拟工具,它允许开发者在一个简单的环境中构建和测试复杂的网络架构。在构建三层路由实验时,Mininet主要用于演示如何实现互联网协议栈中的核心组件,如路由选择、子网划分等。 首先,你需要安装Mininet,并通过命令行启动一个虚拟网络环境。在这个环境中: 1. **创建顶层网络**:你可以创建一个核心交换机(例如s1),作为网络的入口点,连接到其他设备。 ```bash $sudo mn -c; mn --topo=tree,depth=2,link=ovsk ``` 这将生成一个树状结构的拓扑,其中底层有两层交换机(可能是路由器)。 2. **配置路由器**:在每个节点上运行`OVSK`(Open vSwitch with沈静式封装),然后配置IP地址,以及三层路由表。例如,可以设置一个路由器(比如r1)作为内部网络的出口。 ```bash sudo ovs-vsctl add-br r1 ovs-ofctl add-flow r1 "actions=output:1" ip addr add 10.0.0.1/8 dev r1-eth1 ip route add default via 10.0.0.254 dev r1-eth1 ``` 3. **配置子网划分**:分配给主机的IP地址应属于不同的子网,以便路由器能进行包的转发。例如,你可以为每个层次分配一个不同的私有IP范围。 4. **连接和通信**:连接顶层交换机和其他设备,确保数据包能在各部分网络之间正常传输。例如,从外部网络访问内部网络,需要通过顶层路由器。 5. **验证结果**:通过ping测试或者其他网络应用检查是否能够成功穿越三层路由器进行通信。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值