飞羽小随笔-个人技术文章 - OpenVSwitch
type: channel
link: https://blog.8086k.cn/tag/OpenVSwitch/
items: 使用OVS+Docker+quagga搭建BGP网络
items: 初体验：OVS的openflow协议
items: OVS源码编译

使用OVS+Docker+quagga搭建BGP网络
type: item
date: 2019-07-01T12:16:00+08:00
description: 本文主要讲解使用quagga、Docker和quagga搭建简单的BGP网络。使用OVS+Docker+quagga搭建BUG网络首先对本次使用的技术进行一个简单的介绍，接着说明一下本次试验的环境，最后进行BGP简单网络的搭建。1. 简单介绍1.1 BGP网络介绍[collapse title="BGP网络介绍" status="false"]BGP(边界网关协议)主要用于互联网AS(自治系统)之间的互联，BGP的最主要功能在于控制路由的传播和选择最好的路由。中国联通 、中国电信、中国移动、教育网和一些大的民营IDC运营商都具有AS号，全国各大网络运营商多数都是通过BGP协议与自身的AS号来实现多线互联的。使用BGP协议互联后，网络运营商的所有骨干路由设备将会判断到IDC机房IP段的最佳路由，以保证不同网络运营商用户的高速访问。[/collapse]1.2 Docker介绍[collapse title="Docker介绍" status="false"]Docker 是一个开源的应用容器引擎，让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中，然后发布到任何流行的 Linux或Windows 机器上，也可以实现虚拟化。容器是完全使用沙箱机制，相互之间不会有任何接口。[/collapse]1.3 quagga介绍[collapse title="quagga介绍" status="false"]quagga软件原名是Zebra是由一个日本开发团队编写的一个以GNU版权方式发布的软件。它将linux机器打造成一台功能完备的路由器。Quagga支持的路由协议 Quagga能够同时支持RIPv1、RIPv2、RIPng、OSPFv2、OSPFv3、BGP-4和 BGP-4+等诸多TCP/IP协议。其中： RIPv1、RIPv2、OSPFv2适用于Ipv4的自治域系统内部网络路由协议。 BGP-4是用于Ipv4的自治域系统之间的外部网络路由协议。 RIPng、OSPFv3、BGP-4+主要扩展对Ipv6的支持。Quagga的特性 模块化设计：Quagga基于模块化方案的设计，即对每一个路由协议使用单独的守护进程。 运行速度快：因为使用了模块化的设计，使得Quagga的运行速度比一般的路由选择程序要快。 可靠性高：在所有软件模块都失败的情况下，路由器可以继续保持连接并且daemons也会继续运行。故障诊断不必离线的状态下被诊断和更正 支持Ipv6：Quagga不仅支持Ipv4，还支持Ipv6。Quagga的运行机制 由于Quagga采用模块化的设计，因此Quagga运行时要运行多个守护进程，包括ripd ripngd ospfd ospf6d bgpd 和Zebra。 其中，Zebra守护进程用来更新内核的路由表，而其他的守护进程负责进行相应路由选择协议的路由更新。Quagga的好处[/collapse]1.4 OpenVSwitch介绍[collapse title="OpenVSwitch介绍" status="false"]OpenvSwitch，简称OVS是一个虚拟交换软件，主要用于虚拟机VM环境，作为一个虚拟交换机，支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。虽然是虚拟交换机，但是其工作原理与物理交换机类似。在虚拟交换机的实现中，其两端分别连接着物理网卡和多块虚拟网卡，同时虚拟交换机内部会维护一张映射表，根据MAC地址寻找对应的虚拟机链路进而完成数据转发。 OpenvSwitch是实现虚拟化网络的重要基础组件，在OpenStack中利用OpenvSwitch作为底层部件来完成虚拟网络提供和租户网络管理。OpenvSwitch可以实现访问控制功能，通过转发规则，可以实现简单的安全行为，包括通过、禁止等。[/collapse]2. 本次运行的环境2.1 系统环境Centos 7.6.18102.2 软件环境Docker 17.06【docker镜像为centos7】OpenVSwitch 2.5.8版本3. BGP网络搭建[scode type="blue"]3.1为首先准备BGP的一些基础环境，[/scode]3.1 BGP环境准备准备Docker和OVS3.1.1 安装Docker和OVS[root@localhost ~]#yum install docker-ce.x86_64 openvswitch.x86_64 -y #安装docker和OVS [root@localhost ~]#systemctl start docker [root@localhost ~]#systemctl start openvswitch #启动docker和OVS3.1.2 Docker…

初体验：OVS的openflow协议
type: item
date: 2019-06-18T17:13:20+08:00
description: 本章讲解了使用OpenVSwitch的openflow协议的一些记录。初体验：OVS的openflow协议全文概括本章讲解了使用OpenVSwitch的openflow协议的一些命令，以后可能会用到，因此，在博客里做个记录。openflow介绍[collapse title="OpenVSwitch介绍" status="true"]软件定义网络（Software Defined Network，SDN）是由美国斯坦福大学CLean State课题研究组提出的一种新型网络创新架构，是网络虚拟化的一种实现方式。其核心技术OpenFlow通过将网络设备的控制面与数据面分离开来，从而实现了网络流量的灵活控制，使网络作为管道变得更加智能，为核心网络及应用的创新提供了良好的平台。OpenFlow，一种网络通信协议，属于数据链路层，能够控制网上交换器或路由器的转发平面（forwarding plane），借此改变网络数据包所走的网络路径。[/collapse][scode type="blue"]如果想要看openvswitch的介绍或者ovs的编译步骤，请看以下文章：[/scode][post cid="44" /]命令汇总列出br1网桥的接口[root@localhost ~]# ovs-ofctl -O OpenFlow13 show br1 #列出br4网桥的接口 OFPT_FEATURES_REPLY (OF1.3) (xid=0x2): dpid:0000227f47f14b45 n_tables:254, n_buffers:256 capabilities: FLOW_STATS TABLE_STATS PORT_STATS GROUP_STATS QUEUE_STATS OFPST_PORT_DESC reply (OF1.3) (xid=0x3): 1(ca5ab26545b04_l): addr:da:ed:cd:c6:bf:0a config: 0 state: 0 current: 10GB-FD COPPER speed: 10000 Mbps now, 0 Mbps max 2(619496038daf4_l): addr:3a:0b:d6:59:99:4f config: 0 state: 0 current: 10GB-FD COPPER speed: 10000 Mbps now, 0 Mbps max LOCAL(br1): addr:22:7f:47:f1:4b:45 config: PORT_DOWN state: LINK_DOWN speed: 0 Mbps now, 0 Mbps max OFPT_GET_CONFIG_REPLY (OF1.3) (xid=0x5): frags=normal miss_send_len=0列出br1网桥的接口[root@localhost ~]# ovs-ofctl dump-ports -O OpenFlow13 br1 #列出br1网桥的接口 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports port LOCAL: rx pkts=0, bytes=0, drop=1, errs=0, frame=0, over=0, crc=0 tx pkts=0, bytes=0, drop=0, errs=0, coll=0 duration=6401.851s port 1: rx pkts=551, bytes=1043382, drop=0, errs=0, frame=0, over=0, crc=0 tx pkts=391, bytes=29298, drop=0, errs=0, coll=0 duration=6392.311s port 2: rx pkts=383, bytes=28650, drop=0, errs=0, frame=0, over=0, crc=0 tx pkts=394, bytes=702996, drop=0, errs=0, coll=0 duration=6390.151s列出br1网桥的某个接口的详细信息[root@localhost ~]# ovs-ofctl dump-ports -O OpenFlow13 br1 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports port LOCAL: rx pkts=0, bytes=0, drop=1, errs=0, frame=0, over=0, crc=0 tx pkts=0, bytes=0, drop=0, errs=0, coll=0 duration=6401.851s port…

OVS源码编译
type: item
date: 2019-06-14T14:44:00+08:00
description: 本文主要内容是编译OpenVSwitch，当做自己的一个编译记录。OVS源码编译OpenVSwitch介绍[collapse title="OpenVSwitch介绍" status="true"]Open vSwitch是在开源的Apache2.0许可下的产品级质量的多层虚拟交换标准！它旨在通过编程扩展，使庞大的网络自动化（配置、管理、维护），同时还支持标准的管理接口和协议（如NetFlow， sFlow， SPAN， RSPAN， CLI， LACP， 802.1ag）。[/collapse]OVS编译[scode type="blue"]下载OVS源代码[/scode]wget http://openvswitch.org/releases/openvswitch-版本.tar.gz[scode type="blue"]具体的可以去OVS官网查看版本[/scode][scode type="blue"]解压并生成配置文件[/scode]tar -xvzf openvswitch-版本.tar.gz cd openvswitch-版本 ./configure --with-linux=/lib/modules/$(uname -r)/build[scode type="blue"]直接编译安装可以使用make -j $number[/scode]make # 或者make -j 16 make install make modules_install[scode type="blue"]加载模块[/scode]modprobe openvswitch #不要使用insmod openvswitch[scode type="blue"]因为openvswitch模块与linux的bridge模块冲突，所以如果发生冲突，不能加载ovs的内核模块时，先卸载掉bridge模块。[/scode]rmmod bridge modprobe openvswitch[scode type="blue"]使用lsmod查看已加载的所有模块，验证是否加载ovs的内核模块成功。 使用dmesg查看模块加载报错信息[/scode]lsmod | grep openvswitch[scode type="blue"]如果一直加载模块不成功，可以用命令modinfo openvswitch查看该模块的信息，内核版本以及依赖关系等。或者用dmesg | tail查看kernel的日志信息。[/scode]OVS编译成功