Open vSwitch系列之一 Open vSwitch诞生

Open vSwitch系列之二 安装指定版本ovs

Open vSwitch系列之三 ovs-vsctl命令使用

Open vSwitch系列之四 ovs-ofctl命令使用

Open vSwitch系列之五 网桥特性功能配置

Open vSwitch系列之六 vlan隔离

Open vSwitch系列之七 meter表限速

OpenvSwitch系列之八 vxlan隧道

官方介绍

VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由IETF定义的NVO3(Network Virtualization over Layer 3)标准技术之一,是对传统VLAN协议的一种扩展。VXLAN的特点是将L2的以太帧封装到UDP报文(即L2 over L4)中,并在L3网络中传输。VXLAN本质上是一种隧道技术,在源网络设备与目的网络设备之间的IP网络上,建立一条逻辑隧道,将用户侧报文经过特定的封装后通过这条隧道转发。

vxlan 是一种网络协议,将原始数据封装到UDP数据包中传输。vxlan被广泛应用到云计算网络环境中,耳熟能详的云计算框架openstack主要的网络架构就是vxlan,kubernetes也有vxlan的网络插件。vxlan 有许多优点,诸如:

  1. 连接两个局域网,可以将局域网内主机之间流量互通。就像是在局域网之间架起桥梁
  2. 支持隔离。vlan最多支持4096个隔离,而vxlan支持2的次方数32即 4294967296据隔离

vxlan的封装格式

本篇文章使用ovs搭建vxlan网桥,连接两个mininet构建的局域网。

实验环境:两台虚拟机 ubuntu1804桌面版+ubuntu1604桌面版+mininet

安装mininet

分别在两台机器上安装mininet

安装git工具

root@ubuntu:~# apt install git
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
git-man liberror-perl
Suggested packages:
git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn
The following NEW packages will be installed:
git git-man liberror-perl
0 upgraded, 3 newly installed, 0 to remove and 406 not upgraded.
Need to get 3,932 kB of archives.
After this operation, 25.6 MB of additional disk space will be used.
Do you want to continue? [Y/n] y

从github上拉取mininet源码

root@openlab:~# git clone git://github.com/mininet/mininet
Cloning into 'mininet'...
remote: Enumerating objects: 9752, done.
remote: Total 9752 (delta 0), reused 0 (delta 0), pack-reused 9752
Receiving objects: 100% (9752/9752), 3.03 MiB | 1.35 MiB/s, done.
Resolving deltas: 100% (6472/6472), done.

安装mininet

mininet的安装是进入mininet/util目录中,然后执行 ./install -a-a表示安装全部的组件。mininet的安装可以有很多备选项。

root@openlab:~/mininet/util# ./install.sh -a
Detected Linux distribution: Ubuntu 18.04 bionic amd64
sys.version_info(major=3, minor=6, micro=7, releaselevel='final', serial=0)
Detected Python (python3) version 3
Installing all packages except for -eix (doxypy, ivs, nox-classic)...
Install Mininet-compatible kernel if necessary
.......
.......
.......
libtool: install: /usr/bin/install -c cbench /usr/local/bin/cbench
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/root/oflops/cbench'
make[1]: Leaving directory '/root/oflops/cbench'
Making install in doc
make[1]: Entering directory '/root/oflops/doc'
make[1]: Nothing to be done for 'install'.
make[1]: Leaving directory '/root/oflops/doc'
Enjoy Mininet!

验证安装

安装完成之后,ovs会安装好,使用ovs-vsctl show命令,查看ovs版本

root@openlab:~/mininet/util# ovs-vsctl show
58cc7b02-ef48-4de7-a96b-ee1c0259472d
ovs_version: "2.9.5"

使用命令 mn 创建一个最小拓扑的环境。包括一个控制器,一个交换机,两个主机。

root@openlab:~/mininet/util# mn
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet>

配置vxlan

第一台机器配置

记录下第一台机器的ip地址和路由信息,后面会使用这些信息。

root@openlab:~/mininet/util# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.175.130 netmask 255.255.255.0 broadcast 192.168.175.255
inet6 fe80::20c:29ff:fe45:a8b7 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:45:a8:b7 txqueuelen 1000 (Ethernet)
RX packets 247144 bytes 344597431 (344.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 74937 bytes 6024181 (6.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 993 bytes 76788 (76.7 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 993 bytes 76788 (76.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@openlab:~/mininet/util# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.175.2 0.0.0.0 UG 100 0 0 ens33
192.168.175.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
192.168.175.2 0.0.0.0 255.255.255.255 UH 100 0 0 ens33

第二台机器配置

同样,记录第二台机器的ip地址和路由信息。

ens33     Link encap:Ethernet  HWaddr 00:0c:29:a6:71:34
inet addr:192.168.175.128 Bcast:192.168.175.255 Mask:255.255.255.0
inet6 addr: fe80::b933:b350:fe27:b89a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:56351 errors:0 dropped:0 overruns:0 frame:0
TX packets:14943 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:76128903 (76.1 MB) TX bytes:1464272 (1.4 MB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:404 errors:0 dropped:0 overruns:0 frame:0
TX packets:404 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:33728 (33.7 KB) TX bytes:33728 (33.7 KB)
root@ubuntu:~/mininet/util# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.175.2 0.0.0.0 UG 100 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens33
192.168.175.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33

创建隧道网桥br-tun

使用ovs创建一个网桥,叫做br-tun,该网桥后面会作为vxlan隧道的端点。两个虚拟机都需要创建。

root@openlab:~/mininet/util# ovs-vsctl add-br br-tun
root@openlab:~/mininet/util#
root@openlab:~/mininet/util# ovs-vsctl show
58cc7b02-ef48-4de7-a96b-ee1c0259472d
Bridge br-tun
Port br-tun
Interface br-tun
type: internal
ovs_version: "2.9.5"

创建好br-tun之后,可以用ifconfig -a查看到这个设备

root@openlab:~/mininet/util# ifconfig -a
br-tun: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether 26:c9:1f:49:4e:4e txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.175.130 netmask 255.255.255.0 broadcast 192.168.175.255
inet6 fe80::20c:29ff:fe45:a8b7 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:45:a8:b7 txqueuelen 1000 (Ethernet)
RX packets 247744 bytes 344644771 (344.6 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 75331 bytes 6070686 (6.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 993 bytes 76788 (76.7 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 993 bytes 76788 (76.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ovs-system: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether 62:da:79:d8:d4:d3 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

第二台机器创建好的设备。

root@ubuntu:~/mininet/util# ifconfig -a
br-tun Link encap:Ethernet HWaddr 1e:66:43:f2:04:43
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) ens33 Link encap:Ethernet HWaddr 00:0c:29:a6:71:34
inet addr:192.168.175.128 Bcast:192.168.175.255 Mask:255.255.255.0
inet6 addr: fe80::b933:b350:fe27:b89a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:56569 errors:0 dropped:0 overruns:0 frame:0
TX packets:15061 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:76151455 (76.1 MB) TX bytes:1479464 (1.4 MB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:404 errors:0 dropped:0 overruns:0 frame:0
TX packets:404 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:33728 (33.7 KB) TX bytes:33728 (33.7 KB) ovs-system Link encap:Ethernet HWaddr 8e:fb:8e:a0:0c:e5
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

转移ens33 网卡的ip地址到br-tun上

将网卡上的ip地址转交给br-tun。从上一步可以看出br-tun和网卡其实是非常类似的,将其赋值ip地址就可以当做网卡使用。现在要做的是把虚拟机网卡的ip地址给br-tun。

增加路由信息。将ip地址转交给br-tun之后,路由信息也需要更新。ip地址和路由信息都要以实际的信息,在复制实验时不可直接使用我的。这也是为什么在前面记录ip信息和路由信息的原因。

ifconfig ens33 0 up
ifconfig br-tun 192.168.175.130/24 up
route add default gw 192.168.175.2

同样在第二台机器上完成同样的操作。

ifconfig ens33 0 up
ifconfig br-tun 192.168.175.128/24 up
route add default gw 192.168.175.2

将网卡ens33作为端口添加到br-tun

因为ens33是流量出虚拟机的接口,所以最后流量还是肯定走ens33网卡出去。br-tun只是一个虚拟机的设备,要将ens33作为端口加入br-tun中

ovs-vsctl add-port br-tun ens33

同样在第二台机器上完成同样的操作。

ovs-vsctl add-port br-tun ens33

启动mininet

使用命令mn启动一个最小拓扑的实验。创建的设备包括两个主机,h1,h2;一个交换机 s1

使用ovs-vsctl show 可以看到环境中新增了一个交换机s1

同样在第二台机器上完成同样的操作。

修改主机IP地址

上一步创建的mininet中两个主机的默认地址都是10.0.0.110.0.0.2,需要将第一台虚拟机中的mininet的主机的地址修改10.0.0.310.0.0.4。构建的环境如下:

创建vxlan隧道

在交换机s1创建vxlan隧道。这一步是最关键的一步。

ovs-vsctl add-port s1 vx1 -- set interface vx1 type=vxlan options:remote_ip=192.168.175.128

其中s1是创建隧道的网桥,remote_ip就是隧道另外一端机器的ip地址。



查看创建好的隧道

在第二台虚拟机上做同样的操作

ovs-vsctl add-port s1 vx1 -- set interface vx1 type=vxlan options:remote_ip=192.168.175.130



查看创建好的隧道

验证通信

在第一台虚拟机上打开h2。使用命令xterm h2可以打开mininet中h2的操作终端。

在终端中ping 10.0.0.1



在终端中ping 10.0.0.2

抓取vxlan数据包

打开wireshark,监听br-tun隧道端点上的流量。可以看到目前流量就是ICMP

打开具体的icmp查看,与普通icmp有什么不同之处。正常icmp流量是icmp+网络层+数据链路层,而使用vxlan的icmp则是 icmp + 网络层 + 数据链路层 + vxlan报文头 + udp + 网络层 + 数据链路层。内层是10.0.0.3 ping 10.0.0.1的流量,这些流量被vxlan封装之后有外层包 192.168.175.130到192.168.175.128的UDP数据包。

最后看一下vxlan报文头的具体信息。里面包含了一个 vxlan network identity 即vni,就是类似与vlan tag的ID号。不同的ID号之间不可以通信。

总结

在两个交换机上配置了vxlan之后,就像是在s1和s1之间打通了隧道,跨越局域网的限制传输数据。逻辑上是如上,实际是流量是从 h1 -->s1-->br-tun -->ens33 -->ens33 -->br-tun -->s1 -->h1

OpenvSwitch系列之八 vxlan隧道的更多相关文章

  1. OpenvSwitch系列之七 meter表限速

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...

  2. Open vSwitch系列实验(三):Open vSwitch的VxLAN隧道网络实验

    1 实验目的 该实验通过Open vSwitch构建Overlay的VxLAN网络,更直观的展现VxLAN的优势.在实验过程中,可以了解如何建立VxLAN隧道并进行配置,并实现相同网段和不同网段之间的 ...

  3. Red Gate系列之八 SQL Connect 1.1.1.19 Edition 数据库连接及操作工具 完全破解+使用教程

    原文:Red Gate系列之八 SQL Connect 1.1.1.19 Edition 数据库连接及操作工具 完全破解+使用教程 Red Gate系列之八 SQL Connect 1.1.1.19 ...

  4. 单元测试系列之八:Sonar 数据库表关系整理一(续)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:Sonar平台是目前较为流行的静态代码扫描平台,为了便于使用以及自己二次开发,有必要对它的数据库结构进行学习 ...

  5. OVS-----CentOS7上搭建基于Open vSwitch的VxLAN隧道实验

    一.关于VXLAN VXLAN 是 Virtual eXtensible LANs 的缩写,它是对 VLAN 的一个扩展,是非常新的一个 tunnel 技术,在Open vSwitch中应用也非常多. ...

  6. nginx高性能WEB服务器系列之八--nginx日志分析与切割

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  7. mongo 3.4分片集群系列之八:分片管理

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  8. WPF编游戏系列 之八 银行界面及金额校验

    原文:WPF编游戏系列 之八 银行界面及金额校验        在前面<WPF编游戏系列 之四 用户控件>一文中通过用户控件创建了"My Shop"中物品列表框.本篇继 ...

  9. OVS DPDK VXLAN隧道处理

    原文链接: OVS DPDK VXLAN隧道处理

随机推荐

  1. 铁大树洞APP视频讲解和原型演示

    首先放上我们团队视频讲解演示的视频:https://v.youku.com/v_show/id_XNDYyMzA3MTgzNg==.html 团队名称:超能陆战队 团队成员:刘梦鑫(队长) 段行行 徐 ...

  2. csapp第六章笔记-存储器结构

    目录 随机访问存储器(Random-Access-Memory) 静态RAM 动态RAM 增强的DRAM 非易失性存储器 磁盘存储 磁盘构成 磁盘容量 磁盘操作 逻辑磁盘块 访问磁盘和连接I/O设备 ...

  3. sftp与ftp的区别

    SFTP和FTP非常相似,都支持批量传输(一次传输多个文件),文件夹/目录导航,文件移动,文件夹/目录创建,文件删除等.但还是存在着差异,下面我们来看看SFTP和FTP之间的区别. 1. 安全通道FT ...

  4. Visual Studio Code中设置sftp同步代码到服务器

    ## **前言** - 绝对的大佬才会直接在Linux下用vim写代码,我等小白只能通过IDE来了,所以将代码同步到服务器上就很重要了.使用vs code设置好sftp就可以实现这一功能. - 设置之 ...

  5. C#LeetCode刷题之#404-左叶子之和​​​​​​​​​​​​​​(Sum of Left Leaves)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4084 访问. 计算给定二叉树的所有左叶子之和. 3      / ...

  6. golang 整型

    目录 前言 整型 1.分类 2.类型 3.类型补充 4.补充: 跳转 前言 不做文字的搬运工,多做灵感性记录 这是平时学习总结的地方,用做知识库 平时看到其他文章的相关知识,也会增加到这里 随着学习深 ...

  7. Linux下安装pgadmin,并外部访问

    环境: Centos 7 .已经安装的postgresql11,具体安装可以查看https://www.cnblogs.com/whitebai/p/12122240.html 1.下载阿里的 rep ...

  8. 完了,这个硬件成精了,它竟然绕过了 CPU...

    我们之前了解过了 Linux 的进程和线程.Linux 内存管理,那么下面我们就来认识一下 Linux 中的 I/O 管理. Linux 系统和其他 UNIX 系统一样,IO 管理比较直接和简洁.所有 ...

  9. asp.net core 应用docke部署到centos7

    前言 前期准备 win10 (不要安装hyper-V) VMware-Workstation-Pro/15.0 Xshell6 (非必需) VS2019 以上环境请自行安装 都是默认安装没什么可说的 ...

  10. iNeuOS工业互联平台,WEB组态(iNeuView)集成rtmp和websocket视频元件,支持海康、大华等摄像头实时显示视频

    目       录 1.      概述... 1 2.      平台演示... 2 3.      硬件摄像头... 2 4.      视频流协议转换管理... 2 5.      组态视频元件 ...