构建OVS网络

news2024/11/27 16:29:07

构建OVS网络

1. 配置虚拟机环境

(1)配置虚拟机交换机

1 创建一个名为br-xd的虚拟交换机。

# ovs-vsctl add-br br-xd

2 查询虚拟交换机。

# ovs-vsctl show

5a1cd870-fc31-4820-a7f4-b75c19450582

    Bridge br-xd

        Port br-xd

            Interface br-xd

                type: internal

3 确认组件安装。

在使用虚拟交换机之前首先确认TAP所需要的组件的组件是否安装。

#yum -y localinstall tunctl-1.5-26.14.x86_64.rpm (tunctl包上传至root目录)

4 创建TAP设备,创建前需要确认tun模块是否被加载。

# tunctl  -b -u root -t tap1

# tunctl  -b -u root -t tap2

5 设备连接到虚拟交换机。

# ovs-vsctl add-port br-xd tap1

# ovs-vsctl add-port br-xd tap2

6 查看是否添加成功。

# ovs-vsctl show

5a1cd870-fc31-4820-a7f4-b75c19450582

    Bridge br-xd

        Port "tap1"

            Interface "tap1"

        Port "tap2"

            Interface "tap2"

        Port br-xd

            Interface br-xd

                type: internal

启动TAP设备

# ip link set up tap1

# ip link set up tap2

(2)启动虚拟机

1 启动OVS1。

启动虚拟机之前首先创建两个镜像文件,拷贝本任务所提供的cirros-0.3.3-x86_64-disk.img为ovs1.img。

# cp -p  cirros-0.3.3-x86_64-disk.img ovs1.img

# /usr/libexec/qemu-kvm -drive file=ovs1.img -m 1024 -vnc :100 -net nic,macaddr=32:a9:76:d9:46:2b,model=virtio -net tap,ifname=tap1,script=no,downscript=no -name OVS1 -daemonize

2 启动OVS2。

启动虚拟机之前首先创建镜像文件,拷贝本任务所提供的cirros-0.3.3-x86_64-disk.img为ovs2.img。

# cp -p  cirros-0.3.3-x86_64-disk.img ovs2.img

# /usr/libexec/qemu-kvm -drive file=ovs2.img  -m 1024  -vnc :101 -net nic,macaddr=32:a9:76:d9:46:3a,model=virtio -net tap,ifname=tap2,script=no,downscript=no -name OVS2 -daemonize

2. 登陆虚拟主机配置地址

1 VNC登陆虚拟主机,查看虚拟机的VNC端口。

通过netstat -ntpl命令可以查询qemu-kvm对应的实例监听的端口。

# netstat -ntpl

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1092/rpcbind        

tcp        0      0 0.0.0.0:6000                0.0.0.0:*                   LISTEN      7173/qemu-kvm       

tcp        0      0 0.0.0.0:6001                0.0.0.0:*                   LISTEN      7201/qemu-kvm    

2 VNC登陆虚拟机。

通过查询虚拟机的VNC端口可以知道,OVS1虚拟机的端口为6000,OVS2的端口为6001,利用VNC Viewer登陆虚拟机。

登陆OVS1虚拟机,配置服务器地址为192.168.1.131:6000,如图4-10所示。配置完成后登陆主机,如图4-11所示。

图4-10 OVS1 VNC Viewer配置

图4-11 登陆OVS1虚拟机

登陆OVS2虚拟机,配置服务器地址为192.168.1.131:6001,如图4-12所示。配置完成后登陆主机,如图4-13所示。

图4-12 OVS2 VNC Viewer配置

图4-13 登陆OVS1 虚拟机

3 修改IP地址。

在OVS1上修改eth0的IP地址为10.0.1.2/24。

$sudo ifconfig eth0 10.0.1.2 netmask 255.255.255.0

在OVS2上修改eth0的IP地址为10.0.1.3/24。

# sudo ifconfig eth0 10.0.1.3 netmask 255.255.255.0

修改完成后检查两个节点之间的连通性。

# ping 10.0.1.3 -c 4 -I 10.0.1.2

PING 10.0.1.20 (10.0.1.20) from 10.0.2:56(84) bytes of data.

64 bytes from 10.0.1. 3: icmp_seq=1 ttl=255 time=1.04 ms

64 bytes from 10.0.1. 3: icmp_seq=2 ttl=255 time=1.13 ms

64 bytes from 10.0.1. 3: icmp_seq=3 ttl=255 time=0.438 ms

64 bytes from 10.0.1. 3: icmp_seq=4 ttl=255 time=0.134 ms

--- 10.0.1. 3ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3003ms

rtt min/avg/max/mdev = 0.134/0.687/1.138/0.417 ms

3. OVS交换机操作

1 查询网桥信息。

在宿主机上查看Port信息, 确认虚拟机对应的Port ID

# ovs-ofctl show br-xd

OFPT_FEATURES_REPLY (xid=0x2): dpid:00005e440f43e144

n_tables:254, n_buffers:256

capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP

actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst

 1(tap1): addr:16:40:8d:ed:76:32

     config:     0

     state:      0

     current:    10MB-FD COPPER

     speed: 10 Mbps now, 0 Mbps max

 2(tap2): addr:8a:37:2f:e4:9b:b2

     config:     0

     state:      LINK_DOWN

     current:    10MB-FD COPPER

     speed: 10 Mbps now, 0 Mbps max

 LOCAL(br-xd): addr:5e:44:0f:43:e1:44

     config:     PORT_DOWN

     state:      LINK_DOWN

     speed: 0 Mbps now, 0 Mbps max

OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

2 查看流表信息。

# ovs-ofctl dump-flows br-xd

NXST_FLOW reply (xid=0x4):

 cookie=0x0, duration=124323.206s, table=0, n_packets=3129, n_bytes=201115, idle_age=1, hard_age=65534, priority=0 actions=NORMAL

3 检查OVS流表端口。

# ovs-ofctl  dump-ports br-xd

OFPST_PORT reply (xid=0x2): 3 ports

  port 10: rx pkts=6172, bytes=590184, drop=0, errs=0, frame=0, over=0, crc=0

           tx pkts=6171, bytes=590086, drop=12, errs=0, coll=0

  port  8: rx pkts=8576, bytes=759677, drop=0, errs=0, frame=0, over=0, crc=0

           tx pkts=7278, bytes=684136, drop=18, errs=0, coll=0

  port LOCAL: rx pkts=139, bytes=14672, drop=0, errs=0, frame=0, over=0, crc=0

           tx pkts=687, bytes=48528, drop=0, errs=0, coll=0

4 流表删除操作。

由流表端口可以看出port8和port10为OVS1和OVS2两台KVM虚拟机的端口,从流表信息还可以看出由一条流表对应的规则actions为NORMAL,就是按普通交换机处理数据包。这里添加一条流,将来自OVS1对应Port的数据包全部丢弃,完成后再次检查OVS的数据流表信息。

# ovs-ofctl add-flow br-xd "priority=10,in_port=8,actions=drop"

# ovs-ofctl dump-flows br-xd

NXST_FLOW reply (xid=0x4):

 cookie=0x0, duration=175718.172s, table=0, n_packets=17735, n_bytes=1576239, idle_age=0, hard_age=65534, priority=0 actions=NORMAL

 cookie=0x0, duration=202.882s, table=0, n_packets=229, n_bytes=11410, idle_age=0, priority=10,in_port=8 actions=drop

这时再次尝试检查两个节点之间的连通性。

# ping 10.0.1.3 -c 4 -I 10.0.1.2

PING 10.0.1. 3 (10.0.1.20) from 10.0. 2:56(84) bytes of data.

--- 10.0.1. 3ping statistics ---

4 packets transmitted, 0 received, 100% packet loss

5 恢复流表操作。

删除添加的流

# ovs-ofctl del-flows br-xd in_port=8

删除完成后再次检查节点之间的连通性。

# ping 10.0.1.3 -c 4 -I 10.0.1.2

PING 10.0.1.20 (10.0.1.20) from 10.0.2:56(84) bytes of data.

64 bytes from 10.0.1. 3: icmp_seq=1 ttl=255 time=1.04 ms

64 bytes from 10.0.1. 3: icmp_seq=2 ttl=255 time=1.13 ms

64 bytes from 10.0.1. 3: icmp_seq=3 ttl=255 time=0.438 ms

64 bytes from 10.0.1. 3: icmp_seq=4 ttl=255 time=0.134 ms

--- 10.0.1. 3ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3003ms

rtt min/avg/max/mdev = 0.134/0.687/1.138/0.417 ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT C++入门学习(1) QT Creator安装和使用

Qt官方下载 Qt 官网有一个专门的资源下载网站,所有的开发环境和相关工具都可以从这里下载,具体地址是:http://download.qt.io/ 进入链接后,是一个文件目录,依次进入这个路径:archive/qt/5.12/5.12.9/qt-o…

NXP公司LPC21XX+W25Q128实现外扩Flash

W25Q128FV串行Flash存储器由65536页组成,每一页256字节,总共128Mbit,相当于16M字节的存储空间。一次写入可操作高达256字节,擦除可以按16个页擦除(即一个Sector),128个页擦除(八个Se…

元宇宙营销策略、玩法与案例

“元宇宙”依旧是当下品牌创新营销的重要形式,从时趣的行业观察来看,大量品牌方都有着元宇宙的营销意向,但在营销落地上存在不同的进度。一个显而易见的事实是,元宇宙不仅仅是一个虚拟的游戏空间,更是一个未来人人都会…

泛型编程 之模板(template)

C另一种编程思想称为 泛型编程,主要利用的技术就是模板 目录 C另一种编程思想称为 泛型编程,主要利用的技术就是模板 一、概念 二、函数模板 1、语法与使用: 2、函数模板注意事项 3、普通函数与函数模板的区别 4、普通函数与函数模板的调用规…

“探究二叉搜索树:从原理到实现“

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段>——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程&…

数量形状遗传率及计算方法

数量性状的遗传率/遗传力(heritability) (1)表型值及其方差的分量 1. 表型值及其剖分 某数量性状的表型值就是实际所度量或观察到的数值。表型值受许多外界因素如士壤、肥力、水分、光照、温度等的改变而发生变异,这种变异归因于环境因素。任何一个数量性状的表现…

SentiBank Dector上手指南

​ 官网链接:https://www.ee.columbia.edu/ln/dvmm/vso/download/sentibank.html SentiBank Detector可以抽取图片中的形容词-名词对,之前一直看到,这次复现模型才第一次用到,上手的时候有点手足无措,因为官网在如何使…

傅里叶变换解析

p.s.本文无论是cos还是sin,都统一用“正弦波”(Sine Wave)一词来代表简谐波。 一、什么是频域 从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会随着时间发生改变。这种以时间作为参照来观察动态世界的方法我们称…

自动驾驶技术的优势、局限性及未来发展趋势

自动驾驶技术是当前汽车行业的热门话题之一。该技术的发展,不仅可以提高车辆的安全性和行驶效率,还可以为人们的出行带来更多便利。但与此同时,自动驾驶技术也存在着许多争议和挑战。接下来从以下四个方面谈一下我对自动驾驶技术的看法。 一…

贝叶斯决策理论

贝叶斯决策理论的相关知识 贝叶斯的思想:顾名思义,贝叶斯决策论是利用概率来进行决策,是概率框架下的方法。贝叶斯决策论是利用概率的不同分类决策与相应的决策代价之间的平衡,核心思想是决策问题可以通过概率的形式来描述。 1.…

数量性状基因座QTL及其作图

数量性状基因座作图原理与步骤 经典的数量遗传分析方法 ->只能分析控制数量性状表现的众多基因的综合遗传效应,无法准确鉴别基因的数目、单个基因在染色体上的位置和遗传效应 (1)数量性状基因座(QTL) Quantitative trait loci: QTL 数量性状位点(基因座) 所谓QTL是指通过…

基于TCP的C/S模型代码实现

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

自学C#,要懂得善用MSDN

很多初学者学习编程,都会通过看别人写的教程、或者录制的视频,来学习。 这是一个非常好的途径,因为这个是非常高效的。 但是这样,存在两个问题: 1、教程不够全面:任何再好的教程,都无法囊括所…

Java 输出机制 数据类型 基本数据类型转换 基本数据类型和String类型的转换

目录 一、输出机制 1.print和println的差别 2.可接收不同类型参数 3.输出函数中 符号的使用 二、数据类型 1.整型类型 2.浮点类型 3.字符类型 三、基本数据类型转换 1.自动类型转换 2.强制类型转换 3.练习题 四、基本数据类型和String类型的转换 1.基本类型转S…

论文写作精品课程

本文介绍了一些论文写作的在线课程,方便读者朋友们自学,提高论文写作的能力。论文写作的在线课程非常多,读者朋友们也可以在网上自行搜索,选择适合自己的在线课程进行学习。如需要打开课程的网站,请复制课程的网址到浏…

PostgreSQL16中pg_dump的LZ4和ZSTD压缩

PostgreSQL16中pg_dump的LZ4和ZSTD压缩 pg_dump压缩lz4和zstd LZ4和ZSTD压缩算法合入了PG16。LZ4补丁的作者是Georgios Kokolatos。由Tomas Vondra提交。由Michael Paquier、Rachel Heaton、Justin Pryzby、Shi Yu 和 Tomas Vondra 审阅。提交消息是: Expand pg_dum…

【Java EE初阶】计算机简介及多线程之创建线程

目录 1.计算机发展史 2.冯诺依曼体系 3.操作系统 操作系统的作用: 4.进程 1.PID(进程编号) 2.内存指针 应用程序申请到的内存中的首地址 3.文件描述符表 问:什么是并发?什么是并行? 4.进程的优先级&a…

Tomcat8和Tomcat9乱码问题

今天新开了一个小项目,我丢,乱码了,咋回事,好久没遇到过了,都忘了咋回事。今天必须记录下来,避免继续踩坑 Tomcat 8 不需要进行任何配置即可,它默认的是GBK,而win10 win7 默认的也是…

[Data structure]单链表 | 一文介绍线性数据结构之一的单链表(Java实现)

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:数据结构。数据结构专栏主要是在讲解原理的基础上拿Java实现 ⭐如果觉得文章写的不错,欢迎点个关注一…

R语言 | 数据框

目录 一、认识数据框 7.1 建立第一个数据框 7.2 验证与设定数据框的列名和行名 二、认识数据框的结构 三、获取数据框内容 3.1 一般获取 3.2 特殊字符$ 3.3 再看取得的数据 四、使用rbind()函数增加数据框的行数据 五、使用cbind()函数增加数据框的列数据 5.1 使用$符号…