OpenvSwitch实现简单VLAN

2023-10-28

需求:

现有拓扑结构如下的网络结构(s1-s4为交换机,h1-h9为主机),现欲让单数主机(h1、h3、h5、h7、h9)之间互相能ping通,双数主机之间互相能够ping通,但单数和双数主机之间不能访问。

# 拓扑结构:
------------------------------------------------------
-------------------------s1---------------------------
---------------------/---|---\-------------------------
-----------------/-------|------\---------------------
--------------/----------|---------\------------------
------------/------------|------------\---------------
---------s2--------------s3--------------s4-----------
-------/--|--\---------/--|--\---------/--|--\--------
------h1--h2--h3------h4--h5--h6------h7--h8--h9------
------------------------------------------------------
------------------------------------------------------

OpenvSwitch实现分组

第一步,打开mininet 连接控制器

打开控制器

这里选择任意控制器均可,但是控制器要支持openflow1.3协议

打开mininet

mn --controller=remote,ip=127.0.0.1--mac --nat --topo=tree,depth=2,fanout=3 --switch ovs,protocols=OpenFlow13
  • –controller=remote,ip=127.0.0.1。指定了控制器为本地控制器
  • –topo=tree,depth=2,fanout=3。创建深度为2,度为3的树形结构的拓扑结构网络
  • –switch ovs,protocols=OpenFlow13。指定交换机为ovs,协议为OpenFlow1.3

第二步:

先在mininet里面pingall

用来生成初始流表

然后删除除了s1以外 其它控制器的流表

ovs-ofctl -O OpenFlow13 del-flows s2
ovs-ofctl -O OpenFlow13 del-flows s3
ovs-ofctl -O OpenFlow13 del-flows s4

第三步,添加流表:

自定义转发规则,单数主机和双数主机分别添加进入不同的VLAN组内,交换机分发报文时根据来源的组判断发往的端口。

# s2
ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=3,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=0,actions=pop_vlan,output:1,output:3
ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=1,actions=pop_vlan,output:2
# ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=0,actions=pop_vlan,output:3
# s3
ovs-ofctl -O OpenFlow13 add-flow s3 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s3 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s3 priority=1,in_port=3,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s3 priority=1,dl_vlan=1,actions=pop_vlan,output:1,output:3
ovs-ofctl -O OpenFlow13 add-flow s3 priority=1,dl_vlan=0,actions=pop_vlan,output:2
# ovs-ofctl -O OpenFlow13 add-flow s3 priority=1,dl_vlan=1,actions=pop_vlan,output:3
# s4
ovs-ofctl -O OpenFlow13 add-flow s4 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s4 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s4 priority=1,in_port=3,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s4 priority=1,dl_vlan=0,actions=pop_vlan,output:1,output:3
ovs-ofctl -O OpenFlow13 add-flow s4 priority=1,dl_vlan=1,actions=pop_vlan,output:2
# ovs-ofctl -O OpenFlow13 add-flow s4 priority=1,dl_vlan=0,actions=pop_vlan,output:3

含义:
从sx的in_port对应的机器分到set_field/vlan_id,通过4号口(对应s1)发出去
来自dl_vlan的数据包发送给output端口。

测试

在这里插入图片描述

目前存在的问题:

同一个交换机内部的组内总是ping不通,例如s2下的h1和h3 ping不通
可以通过继续添加流表(交换机内部节点之间的转发规则)解决

改进:实现VLAN

经过分析可知上述方法会阻断不同组之间的所有流量,而VLAN的目的是阻断广播流量而不阻断单播流量。
故对上述方法进行改进:增加流表的过滤条件的dl_dst字段,过滤出dl_dst=FF:FF:FF:FF:FF:FF的分组即广播分组,对此类分组做处理使其只能转发给特定的组。

操作步骤:

和上述方法类似,只是不用删除原始流表。

要添加的流表如下:


# s1
ovs-ofctl -O OpenFlow13 add-flow s1 priority=10,in_port=1,actions=output:1,output:2,output:3
ovs-ofctl -O OpenFlow13 add-flow s1 priority=10,in_port=2,actions=output:1,output:2,output:3
ovs-ofctl -O OpenFlow13 add-flow s1 priority=10,in_port=3,actions=output:1,output:2,output:3

# s2
ovs-ofctl -O OpenFlow13 add-flow s2 priority=10,in_port=1,dl_dst=FF:FF:FF:FF:FF:FF,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4,output:3
ovs-ofctl -O OpenFlow13 add-flow s2 priority=10,in_port=2,dl_dst=FF:FF:FF:FF:FF:FF,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s2 priority=10,in_port=3,dl_dst=FF:FF:FF:FF:FF:FF,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4,output:1
ovs-ofctl -O OpenFlow13 add-flow s2 priority=10,dl_vlan=0,actions=pop_vlan,output:1,output:3
ovs-ofctl -O OpenFlow13 add-flow s2 priority=10,dl_vlan=1,actions=pop_vlan,output:2

# s3
ovs-ofctl -O OpenFlow13 add-flow s3 priority=10,in_port=1,dl_dst=FF:FF:FF:FF:FF:FF,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4,output:3
ovs-ofctl -O OpenFlow13 add-flow s3 priority=10,in_port=2,dl_dst=FF:FF:FF:FF:FF:FF,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s3 priority=10,in_port=3,dl_dst=FF:FF:FF:FF:FF:FF,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4,output:1
ovs-ofctl -O OpenFlow13 add-flow s3 priority=10,dl_vlan=1,actions=pop_vlan,output:1,output:3
ovs-ofctl -O OpenFlow13 add-flow s3 priority=10,dl_vlan=0,actions=pop_vlan,output:2

# s4
ovs-ofctl -O OpenFlow13 add-flow s4 priority=10,in_port=1,dl_dst=FF:FF:FF:FF:FF:FF,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4,output:3
ovs-ofctl -O OpenFlow13 add-flow s4 priority=10,in_port=2,dl_dst=FF:FF:FF:FF:FF:FF,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4
ovs-ofctl -O OpenFlow13 add-flow s4 priority=10,in_port=3,dl_dst=FF:FF:FF:FF:FF:FF,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4,output:1
ovs-ofctl -O OpenFlow13 add-flow s4 priority=10,dl_vlan=0,actions=pop_vlan,output:1,output:3
ovs-ofctl -O OpenFlow13 add-flow s4 priority=10,dl_vlan=1,actions=pop_vlan,output:2


测试

首先安装Scapy用于发送报文

sudo apt-get install scapy -y
# 或者去官网下载源码安装

连接mininet测试连通性

见下图

添加流表并测试VLAN

添加流表,然后pingall测试,可见节点之间仍然是通的。
在这里插入图片描述

后台打开h5,h6的xterm,启动wireshark对h1抓包(s2-eth1)。

# mininet输入:
h5 xterm &
h6 xterm &

h5,h6分别利用scapy发送arp报文,内容如下:

# sendp()来构造二层报文
# 这里构造了一个源MAC地址为00:00:00:00:00:05, 源IP地址为10.0.0.5, 目标MAC地址为ff:ff:ff:ff:ff:ff,目标IP地址为10.0.0.88(不存在),payload为i am cheney的ARP报文,该报文将从h5-eth0网卡发出。
sendp(Ether(dst='ff:ff:ff:ff:ff:ff') / ARP(hwsrc = '00:00:00:00:00:05', psrc = '10.0.0.5', hwdst = 'ff:ff:ff:ff:ff:ff', pdst = '10.0.0.88') / 'i am cheney', iface='h5-eth0')
# 下面类似
sendp(Ether(dst='ff:ff:ff:ff:ff:ff') / ARP(hwsrc = '00:00:00:00:00:06', psrc = '10.0.0.6', hwdst = 'ff:ff:ff:ff:ff:ff', pdst = '10.0.0.88') / 'i am cheney', iface='h6-eth0')   

在这里插入图片描述

可见h1能够收到h5的arp报文,但是收不到h6 的,可见VLAN起了作用,测试结束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenvSwitch实现简单VLAN 的相关文章

  • 有了网段为什么还要有VLAN???

    近几日 xff0c 在学习VLAN及VXLAN方面的知识 xff0c 对于产生原因做一个总结及详解 VLAN xff08 Virtual Local Area Network xff0c 虚拟局域网 xff09 xff0c 其主要用途是用来
  • 关于VLAN Tag,PVID的问题

    VLAN Virtual Local Network xff0c 虚拟局域网 xff0c 对于VLAN的划分方法有很多种 xff1a 基于端口划分 xff0c 基于MAC地址划分 xff0c 基于网络协议划分 xff0c 基于IP地址划分
  • centos7.5 + ryu+mininet+docker+wireshark+ovs

    1 安装pip 没有python pip包就执行命令 yum y install epel release 执行成功之后 xff0c 再次执行yum install python pip 2 安装ryu4 30 pip install ry
  • SDN和SD-WAN的概念别再搞混了

    最近 xff0c SD WAN 在融资领域是一个比较热的话题 国外几家 SD WAN 的头部企业不断地取得融资 xff0c 也包括被思科 VMware等巨头收购和兼并 xff0c 国内创业公司推出了各种 SD WAN 产品和解决计划 不得不
  • Openstack Neutron 集成 SDN控制器

    Neutron 集成SDN控制器 一 xff0e Neutron的组成元素 Neutron server 可以理解为一个专门用来接收Neutron REST API 调用的服务器 xff0c 然后负责将不同的REST API分发到不同的ne
  • Mininet教程(七)Mininet Walkthrough

    文章目录 Mininet教程 xff08 七 xff09 Mininet Walkthrough日常使用指令显示mininet开启选项开启Wireshark主机与路由器之间交互测试主机之间连通性运行一个简单的web服务器和客户端清理缓存 高
  • SDN介绍(什么是SDN)

    SDN介绍 一 xff0e 什么是SDN 二 xff0e SDN解决什么问题 xff1f 三 xff0e 传统网络概念和结构体系传统网络数据控制与转发 xff1a 传统网络架构 xff1a 四 xff0e SDN概述SDN xff08 So
  • SDN之NETCONF Call Home

    本文主要内容都来自于今年二月发布的RFC8071 NETCONF Call Home and RESTCONF Call Home xff0c 该RFC从2015年4月提出到最终发布一共修改了17个版本 xff0c 其间修改内容可以点击查看
  • 交换机VLAN的定义、意义以及划分方式

    什么是VLAN 虚拟网技术 xff08 VLAN xff0c Virtual Local Area Network xff09 的诞生主要源于广播 广播在网络中起着非常重要的作用 xff0c 如发现新设备 调整网络路径 IP地址租赁等等 x
  • Ubuntu下如何关闭指定端口的进程

    1 查看该端口的占用情况 lsof i 端口号 2 关闭进程 kill PID 可能不止一个进程
  • ubuntu16.04源码安装mininet,Ryu控制器以及Ryu GUI

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net qq 38003260 article details 78965715 写给初学者
  • 基于OVSDB协议在SDN控制器ONOS开发配置管理OVS API

    为了更好的分享体验 博客搬迁至极客驿站 欢迎查阅 基于OVSDB协议在SDN控制器ONOS开发配置管理OVS API 介绍 准备工作 开发步骤 问题排查 介绍 目前protocol 中ovsdb协议层面已经实现 但是基于ovsdb prot
  • NS-3的安装及配置

    本教程基于VM Ware 虚拟机上安装的Ubuntu20 04 一 安装 NS 3 本体 准备 安装开始之前建议大家更换一下软件源并更新一下库 这样接下来的安装会块很多 由于安装过程中需要用到一些工具 所以提前准备好 已经安装的直接下一步
  • 网络系列--计算机系统与人工智能之我见

    文章目录 计算机系统与人工智能之我见 for AI 硬件 XPU的发展 软件 AI编程框架 by AI AIOps 传统产业 AI 总结 参考文献 人工智能 AI 是当前的发展热点 从计算机系统的角度看 有两个角度 一是for AI 即何优
  • OVS datapath流表结构及匹配过程

    datapath流表的查找函数是ovs flow tbl lookup stats 在此之前 先看下datapath组织流表的方式 最新2 6的ovs流表 已经不是最早单纯的精确匹配了 而是一种精确匹配 带掩码匹配合并在一起的方式 叫做me
  • OpenVSwitch数据面流表cache机制浅谈

    稍许笔墨写了一篇关于OpenVSwitch 以下简称OVS 的文章 https blog csdn net dog250 article details 103492099 但有些事情并没有说清楚 关于OVS的流表是如何映射成数据平面的Fl
  • 计算机网络实验——交换机及VLAN的配置

    VLAN Virtual Local Area Network 虚拟局域网 环境 Win7 Cisco Packet Tracer Instructor 需求 划分三个子网 具体步骤如下 第一步 打开Cisco Packet Tracer
  • SDN应用场景实践--指定业务带宽保障

    SDN应用场景实践 指定业务带宽保障 温州大学 12网络工程 欢迎转载 转载请注明出处 谢谢 目录 第一章 背景介绍 2 1 1实验背景
  • 使用 OpenDaylight 入门原型不起作用

    尝试跟随开放日光开发者教程获得在控制器上运行的初始 hello world 应用程序 但是运行命令 mvn archetype generate DarchetypeGroupId org opendaylight controller D
  • 如何向 OpenDayLight Karaf 添加新功能?

    如何将新功能添加到 ODL Oxygen SR3 0 8 3 作为 Karaf 模块 例如 我从以下位置下载了预构建的 ODL 官方网站 https nexus opendaylight org content repositories p

随机推荐

  • matlab求函数的极小值和零点,函数的根、极小值原来可以这么求!

    今天给大家介绍MATLAB命令fzero和fminbnd fzero可以用于寻找一个函数的零点 fminbnd可以用于寻找一个函数的最小值 以下面这个函数为例 先用户自定义函数把上面的函数叫为func 并存入func m的M文件中 其文件内
  • Ceph论文译文--Ceph:一个可扩展,高性能分布式文件系统

    译者注 本文是出于作者对于ceph的兴趣 在开源中国上关注ceph翻译 没有看到ceph论文的相关翻译 索性在阅读过程中把它翻译了出来 花费了几个周末时间 翻译过程中收获颇多 现把译文分享出来 如对您有益则倍感荣幸 肯定有很多不足之处 如有
  • CentOS 7下go环境配置(超多问题)

    文章目录 1 安装Visual Code 2 获得golang安装包并安装 3 第一个GO语言程序 hello go 4 安装必要工具与插件 1 安装Visual Code 在终端中安装VScode 使用以下命令 sudo rpm impo
  • matplotlib画图、标点、打标签

    Rendering 这是想要的效果 Notes 记录几个功能的做法 函数作图 座标轴 下 左边框 移到过原点 上 右边框去掉 标出一个点 虚线描出这个点的横 纵坐标所在 给这个点打标签 图片标题 保存 Code import matplot
  • 一款优秀持久层框架Mybatis详解!

    Mybatis ssm框架 配置文件的 最好的方式 看官方文档 1 简介 1 1 什么是Mybatis MyBatis 是一款优秀的持久层框架 它支持定制化 SQL 存储过程以及高级映射 MyBatis避免了几乎所有的JDBC代码和手动设置
  • CTF-杂项与密码学总结

    杂项 01文件操作与隐写 文件类型识别 1 File命令 当文件没有后缀名或者有后缀名而无法正常打开时 根据识别出的文件类型来修改后缀名即可正常打开文件 使用场景 不知道后缀名 无法打开文件 格式 file myheart 2 winhex
  • 怎么将服务器中图片显示出来,服务器显示图片

    服务器显示图片 内容精选 换一换 将图片导入图片索引库 该图片可以是同一区域OBS桶内的图片或请求消息体里的图片 只有导入图片索引库的图片方可被搜索到 添加或搜索的图片存储在OBS的桶中时 需要对OBS的桶授权 在图像搜索服务管理控制台实例
  • sublim python提示插件

    python解释器的路径 python interpreter C Users xy AppData Local Programs Python Python36 32 python exe 去掉白框 anaconda linting fa
  • SpringCloud服务发现-ribbon

    服务消费者 api order add 通过 eureka 查找服务提供者 order add 通过服务调 组件调 提供者 创建springboot应用 添加依赖 eureka server ribbon 配置application yml
  • 智能车图像处理20-进阶篇12--正入十字补线1

    前言 希望大家多多点赞评论收藏哦 不懂的地方评论区留言就好 这篇文章主要讲述基本的正入十字补线方法 场景图 效果图 一 函数主体 思路讲解 void buzhongxian2 secondmid 0 if
  • 基于减法优化SABO优化ELM(SABO-ELM)负荷预测(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及数据 1 概述 基于减法优化的 SABO ELM Sub
  • IDEA反编译jar包源码

    1 maven 项目查看jar源码 如何在idea中查看jar包源码 文章目录 准备jar包 idea打开文件夹 最后一步 准备jar包 例如 我准备看resin的jar 在桌面准备了一份 idea打开文件夹 在idea中file gt o
  • spring redis 永不过期_Springboot-Redis分布式锁

    随着现在分布式架构越来越盛行 在很多场景下需要使用到分布式锁 分布式锁的实现有很多种 比如基于数据库 zookeeper 等 本文主要介绍使用 Redis 做分布式锁的方式 并封装成spring boot starter 方便使用 一 Re
  • C++输出中文字符 C/C++多字节字符与宽字符的输出

    原文 http www cnblogs com lixiaohui ambition archive 2012 07 17 2596490 html C 输出中文字符 1 cout 场景1 在源文件中定义 const char str 中文
  • (一)TiDB简介

    TiDB是PingCAP公司自主设计 研发的开放源分布式关系型数据库 NewSQL 是一个款同时支持在线事务处理与在线分析处理 Hybird Transactional and Analytical Processing HTAP 的融合型
  • Android Studio JNI开发入门教程

    概述 在Andorid Studio不支持JNI开发之前大家一般都是使用Eclipse开发JNI 各种配置让人觉得很蛋疼 从Andorid Studio支持JNI开发后 让我们开发JNI变的如此简单 下面我就介绍一下Android Stud
  • Python+Selenium_UI自动化操作(1)——将浏览器最大化

    UI自动化 最大化浏览器 语法 maximize window unittest框架执行顺序 1 先执行setUp 做测试数据准备 2 执行测试用例方法testXXXX 测试用例都是以test开头的方法 可以有多个测试用例 3 所有的测试用
  • LInux脚本- 将一个路径下的前500个文件复制到另一个路径下

    需求 从 home majn llvm project extract main 路径下复制前500个 c 文件到 home majn llvm project extract main 500 目录 以下是一个用于实现该功能的 Bash
  • 将本地的代码上传到github ,Github提交更改的代码,

    1 将本地的代码上传到github 首先你需要一个github账号 所有还没有的话先去注册吧 https github com 我们使用git需要先安装git工具 这里给出下载地址 下载后一路直接安装即可 https git for win
  • OpenvSwitch实现简单VLAN

    需求 现有拓扑结构如下的网络结构 s1 s4为交换机 h1 h9为主机 现欲让单数主机 h1 h3 h5 h7 h9 之间互相能ping通 双数主机之间互相能够ping通 但单数和双数主机之间不能访问 拓扑结构 s1