当前位置: 首页 > news >正文

VXLAN详解:概念、架构、原理、搭建过程、常用命令与实战案例

一、VXLAN概述

1.1 VXLAN的定义

VXLAN(Virtual Extensible LAN,虚拟可扩展局域网)是一种网络虚拟化技术,通过在现有IP网络上创建虚拟网络,使数据中心可以实现大规模的网络隔离和扩展。VXLAN使用MAC-in-UDP封装技术,能够将第二层的以太网帧封装在第三层的IP包中,从而实现跨越物理网络边界的虚拟网络通信。

1.2 VXLAN的优势

扩展性:VXLAN使用24位的VNI(VXLAN Network Identifier),理论上支持多达16M(2^24)个隔离的虚拟网络。
灵活性:VXLAN可以在现有的IP网络基础上进行部署,无需对底层物理网络进行大幅改动。
多租户支持:VXLAN为每个租户创建独立的虚拟网络空间,提供良好的隔离性和安全性。
跨数据中心:VXLAN可以在不同的数据中心之间建立虚拟网络,实现数据中心的互联和资源共享。

二、VXLAN架构

2.1 VXLAN组件

 VXLAN的核心组件包括以下几个部分:

VTEP(VXLAN Tunnel Endpoint):VXLAN隧道终端,用于封装和解封VXLAN数据包。VTEP分为源VTEP和目标VTEP,源VTEP将以太网帧封装成VXLAN数据包,目标VTEP负责解封。
VXLAN隧道:VTEP之间的逻辑通道,用于传输VXLAN数据包。
VNI(VXLAN Network Identifier):VXLAN网络标识符,用于标识不同的虚拟网络。VNI是一个24位的标识符,范围为1到16777215。

2.2 VXLAN数据包结构

VXLAN数据包的结构如下:

外层以太网头:用于在物理网络上传输VXLAN数据包。
外层IP头:用于在IP网络上传输VXLAN数据包,包含源VTEP和目标VTEP的IP地址。
外层UDP头:用于在IP网络上传输VXLAN数据包,使用UDP协议,默认端口为4789。
VXLAN头:包含VNI和其他控制信息。
内层以太网帧:原始的以太网帧,包含原始的源MAC地址和目标MAC地址。

2.3 VXLAN工作原理

VXLAN的工作流程如下:

封装:当主机发送一个数据包时,源VTEP将该数据包封装在VXLAN头、外层IP头和UDP头中,并将其发送到目标VTEP。
传输:封装后的VXLAN数据包通过物理网络进行传输。
解封:目标VTEP接收到VXLAN数据包后,解封外层头部,恢复出原始的以太网帧,并将其发送到目标主机。

三、VXLAN的搭建过程

3.1 环境准备

在搭建VXLAN之前,需要准备以下环境:

一台或多台运行Linux操作系统的服务器。
配置好网络环境,确保服务器之间可以通信。

3.2 在Linux上搭建VXLAN


以下步骤演示如何在Linux上使用ip命令和Open vSwitch(OVS)配置VXLAN。

3.2.1 使用ip命令配置VXLAN


首先,在每台服务器上创建VXLAN接口:

sudo ip link add vxlan0 type vxlan id 42 dstport 4789 dev eth0
其中,vxlan0是VXLAN接口的名称,42是VNI,eth0是物理网络接口。

然后,为VXLAN接口分配IP地址:

sudo ip addr add 10.0.0.1/24 dev vxlan0
sudo ip link set vxlan0 up

3.2.2 使用Open vSwitch配置VXLAN

首先,安装Open vSwitch:

sudo apt-get update
sudo apt-get install -y openvswitch-switch
然后,创建一个OVS桥并添加VXLAN端口:

sudo ovs-vsctl add-br br0
sudo ovs-vsctl add-port br0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=flow options:key=flow
为OVS桥分配IP地址:

sudo ip addr add 10.0.0.1/24 dev br0
sudo ip link set br0 up

四、VXLAN常用命令

4.1 ip命令

创建VXLAN接口:

sudo ip link add vxlan0 type vxlan id 42 dstport 4789 dev eth0
删除VXLAN接口:

sudo ip link del vxlan0
查看网络接口信息:

ip link show
分配IP地址:

sudo ip addr add 10.0.0.1/24 dev vxlan0
启用网络接口:

sudo ip link set vxlan0 up

4.2 Open vSwitch命令

创建OVS桥

sudo ovs-vsctl add-br br0
删除OVS桥:

sudo ovs-vsctl del-br br0
添加VXLAN端口:

sudo ovs-vsctl add-port br0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=flow options:key=flow
删除VXLAN端口:

sudo ovs-vsctl del-port br0 vxlan0
查看OVS配置:

sudo ovs-vsctl show

五、VXLAN实战案例

5.1 跨数据中心的VXLAN配置

假设有两个数据中心,分别位于10.0.0.0/24和10.0.1.0/24子网中。以下步骤演示如何在这两个数据中心之间配置VXLAN,实现虚拟网络的互联。

5.1.1 配置数据中心1

 在数据中心1的VTEP1上配置VXLAN:
sudo ip link add vxlan0 type vxlan id 42 dstport 4789 dev eth0
sudo ip addr add 10.0.0.1/24 dev vxlan0
sudo ip link set vxlan0 up


5.1.2 配置数据中心2


在数据中心2的VTEP2上配置VXLAN:

sudo ip link add vxlan0 type vxlan id 42 dstport 4789 dev eth0
sudo ip addr add 10.0.1.1/24 dev vxlan0
sudo ip link set vxlan0 up


5.1.3 配置OVS交换机


在数据中心1的VTEP1上创建OVS桥并添加VXLAN端口:

sudo ovs-vsctl add-br br0
sudo ovs-vsctl add-port br0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=10.0.1.1 options:key=42
在数据中心2的VTEP2上创建OVS桥并添加VXLAN端口:

sudo ovs-vsctl add-br br0
sudo ovs-vsctl add-port br0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=10.0.0.1 options:key=42


5.1.4 验证VXLAN配置

在两个数据中心的主机上配置IP地址,并测试相互之间的连通性:

ping 10.0.1.1
ping 10.0.0.1
5.2 VXLAN与Docker的结合

以下步骤演示如何将VXLAN与Docker结合,实现跨主机的容器互联。

5.2.1 配置主机1

在主机1上安装Docker并配置VXLAN:sudo apt-get update
sudo apt-get install -y docker.io
sudo ip link add vxlan0 type vxlan id 42 dstport 4789 dev eth0
sudo ip addr add 10.0.0.1/24 dev vxlan0
sudo ip link set vxlan0 up创建Docker网络并将其与VXLAN接口绑定:
sudo docker network create -d macvlan --subnet=10.0.0.0/24 --gateway=10.0.0.1 -o parent=vxlan0 vxlan-net
在该网络中运行容器:sudo docker run -it --rm --network=vxlan-net busybox

5.2.2 配置主机2

在主机2上安装Docker并配置VXLAN:

sudo apt-get update
sudo apt-get install -y docker.io
sudo ip link add vxlan0 type vxlan id 42 dstport 4789 dev eth0
sudo ip addr add 10.0.1.1/24 dev vxlan0
sudo ip link set vxlan0 up
创建Docker网络并将其与VXLAN接口绑定:

sudo docker network create -d macvlan --subnet=10.0.1.0/24 --gateway=10.0.1.1 -o parent=vxlan0 vxlan-net
在该网络中运行容器:

sudo docker run -it --rm --network=vxlan-net busybox

5.2.3 验证跨主机容器互联

在主机1的容器中执行以下命令,测试与主机2容器的连通性:ping 10.0.1.2
在主机2的容器中执行以下命令,测试与主机1容器的连通性:ping 10.0.0.2
六、VXLAN的高级功能与最佳实践

6.1 VXLAN多租户支持

VXLAN通过VNI提供多租户隔离,可以为不同的租户分配不同的VNI,以确保各租户之间的网络隔离。以下步骤演示如何为多个租户配置不同的VXLAN网络。

6.1.1 配置多租户VXLAN

在每台主机上为不同租户创建不同的VXLAN接口:# 租户A
sudo ip link add vxlan10 type vxlan id 10 dstport 4789 dev eth0
sudo ip addr add 10.0.10.1/24 dev vxlan10
sudo ip link set vxlan10 up# 租户B
sudo ip link add vxlan20 type vxlan id 20 dstport 4789 dev eth0
sudo ip addr add 10.0.20.1/24 dev vxlan20
sudo ip link set vxlan20 up

6.1.2 配置租户的Docker网络

为每个租户创建对应的Docker网络:# 租户A
sudo docker network create -d macvlan --subnet=10.0.10.0/24 --gateway=10.0.10.1 -o parent=vxlan10 vxlan-net-a# 租户B
sudo docker network create -d macvlan --subnet=10.0.20.0/24 --gateway=10.0.20.1 -o parent=vxlan20 vxlan-net-b

6.1.3 验证多租户隔离

在租户A和租户B的网络中运行容器,并测试不同租户之间的网络隔离:# 租户A的容器
sudo docker run -it --rm --network=vxlan-net-a busybox

# 租户B的容器
sudo docker run -it --rm --network=vxlan-net-b busybox
尝试在租户A的容器中ping租户B的容器,应该无法连通。

6.2 VXLAN与SDN的结合

VXLAN常与软件定义网络(SDN)技术结合使用,以实现更加灵活和自动化的网络配置。以下演示如何使用OpenDaylight控制器管理VXLAN。

6.2.1 安装OpenDaylight

在控制器主机上下载并安装OpenDaylight:

wget https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/0.7.2/distribution-karaf-0.7.2.tar.gz
tar -zxvf distribution-karaf-0.7.2.tar.gz
cd distribution-karaf-0.7.2/bin
./karaf
在Karaf控制台中安装OpenFlow和VXLAN相关功能:feature:install odl-restconf odl-l2switch-switch odl-openflowplugin-flow-services-ui odl-dlux-all

6.2.2 配置Open vSwitch与OpenDaylight

在每台主机上配置Open vSwitch以连接OpenDaylight:sudo ovs-vsctl set-manager tcp:10.0.0.100:6640
sudo ovs-vsctl set-controller br0 tcp:10.0.0.100:6653
sudo ovs-vsctl set-fail-mode br0 secure
其中,10.0.0.100是OpenDaylight控制器的IP地址。

6.2.3 配置并管理VXLAN网络

通过OpenDaylight的DLUX界面或REST API配置并管理VXLAN网络,实现动态的网络配置和流量控制。

七、VXLAN的安全性考虑

7.1 数据加密

VXLAN本身不提供数据加密,可以通过以下方法实现数据加密:

IPsec:在VXLAN隧道上使用IPsec协议加密数据,确保数据在传输过程中不被窃听或篡改。
TLS:在应用层使用TLS协议加密数据,保护应用层数据的安全性。

7.2 访问控制

在VXLAN网络中配置访问控制策略,以限制不同租户和主机之间的访问:网络分段:为不同租户配置不同的VXLAN网络,确保租户之间的网络隔离。
防火墙规则:在VTEP上配置防火墙规则,控制不同租户和主机之间的网络访问。

7.3 日志和监控

通过日志和监控工具,实时监控VXLAN网络的运行状态和安全事件:日志记录:记录VXLAN网络的配置和流量日志,以便事后分析和审计。
监控工具:使用网络监控工具(如Prometheus、Grafana)监控VXLAN网络的性能和安全状态。

八、总结

通过本文,我们详细介绍了VXLAN的概念、架构、工作原理,搭建过程,常用命令,以及一些高级功能和实战案例。VXLAN作为一种网络虚拟化技术,广泛应用于现代数据中心,提供了高扩展性、灵活性和多租户支持。希望本文能帮助读者更好地理解和应用VXLAN,提高数据中心的网络管理效率和安全性。

相关文章:

VXLAN详解:概念、架构、原理、搭建过程、常用命令与实战案例

一、VXLAN概述 1.1 VXLAN的定义 VXLAN(Virtual Extensible LAN,虚拟可扩展局域网)是一种网络虚拟化技术,通过在现有IP网络上创建虚拟网络,使数据中心可以实现大规模的网络隔离和扩展。VXLAN使用MAC-in-UDP封装技术&a…...

Redis-数据类型-Hash

文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到db3数据库4、插入新数据返回15、获取指定哈希(hash)对象的所有字段(field)名6、获取存储在指定哈希(hash)对象中的所有字段(fiel…...

基于redisson实现tomcat集群session共享

目录 1、环境 2、修改server.xml 3、修改context.xml 4、新增redisson配置文件 5、下载并复制2个Jar包到Tomcat Lib目录中 6、 安装redis 7、配置nginx负载均衡 8、配置测试页面 9、session共享测试验证 前言: 上篇中,Tomcat session复制及ses…...

postgres数据库的流复制

1. 流复制和逻辑复制的差异 逻辑复制和流复制最直观的不同是,逻辑复制支持表级别复制区分点事原理不同 逻辑日志是在wal日志产生的数据库上,由逻辑解析模块对wal日志进行初步的解析,解析结果是ReorderBufferChange(理解为HeapTup…...

Dxf库中的DL_Extrusion类

类DL_Extrusion DL_Extrusion 是 DXF 库中的一个类,用于表示三维实体的扩展信息。在 DXF 文件中,DL_Extrusion 类通常用于表示具有高度的三维图形实体,如立方体、圆柱体等,以及其它具有体积的几何对象。 以下是一个简单的示例代…...

“ONLYOFFICE 8.1版本评测:功能更强大,用户体验更佳”

最新版本的在线编辑器已经发布 ONLYOFFICE在线编辑器的最新版本8.1已经发布,整个套件带来了30多个新功能和432个bug修复。这个强大的文档编辑器支持处理文本文档、电子表格、演示文稿、可填写的表单和PDF,并允许多人在线协作,同时支持AI集成…...

搜维尔科技:【研究】触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验

自然交互可提高VR模拟的有效性。研究表明,触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验。 以下是验证 医疗培训中的触觉技术 “ 95.5%的参与者表示触摸是 XR 教育的重要组成部分,90.9% 的参与者表示 XR 触觉将提供一个安全的学习场所。…...

【小学期】实体类设计——以学生管理系统为例

项目目录中的位置 将Student.java文件放在src/model目录中,即: student_management │ ├── src │ ├── model │ │ ├── Student.java // 这里是Student实体类 │ │ └── StudentDAO.java │ │ │ ├── view │ │ …...

Java测试类

在Java中,为了编写测试类,通常使用JUnit框架。 1. 首先,创建一个名为Calculator的简单Java类,它包含一个方法add用于计算两个整数的和: public class Calculator {public int add(int a, int b) {return a b;} } 2.…...

python 中面向对象编程:深入理解封装、继承和多态

在本章中,我们将深入探讨Python中的高级面向对象编程概念,包括封装、继承和多态。让我们开始吧! 目录 面向对象简介类和实例属性和方法继承和多态 高级面向对象概念私有变量使用 property使用 __slots__类的特殊成员__doc____call____str____…...

OpenCV练习(2)图像校正

1、傅里叶变换 霍夫变换 直线 角度 旋转2、边缘检测 霍夫变换 直线角度 旋转3、四点透视 角度 旋转4、检测矩形轮廓 角度 旋转 1.目的 实现类似全能扫面王的图像校正功能 2. 基于轮廓提取和透射变换 基于轮廓提取和透射变换的矫正算法更适用于车牌、身份证、人民…...

Excel中的“点选输入”——次级下拉列表创建

在Excel中,用“数据验证”功能可以设置下拉列表,二级下拉列表需要设置公式。 (笔记模板由python脚本于2024年06月16日 18:36:37创建,本篇笔记适合经常使用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:http…...

基于 Spring AOP 实现安全检查

在现代应用程序中,安全性是一个至关重要的方面。通过对系统中的关键操作进行安全检查,可以有效防止未授权的访问和操作。Spring AOP(面向切面编程)提供了一种优雅的方式来实现安全检查,而无需修改业务逻辑代码。本文将…...

【MySQL】数据库事务详解

文章目录 前言1. 事务的定义2. 事务的四个特性2.1 原子性2.2 一致性2.3 隔离性2.4 持久性 3. 事务的并发问题3.1 脏读3.2 不可重复读3.3 幻读3.4 更新丢失 4. 事务的隔离级别5. 事务的使用结语 前言 假设我们现在需要操作数据库进行转账,A 给 B 转账 100 块钱&…...

ubuntu链接mysql

C链接mysql 报错 sudo apt-get update sudo apt-get install libmysqlclient-dev 指令编译 g -o mysql_example mysql_example.cpp -I/usr/include/mysql -lmysqlclient g mysql_test.cpp mysql_config --cflags --libs 安装mysql sudo apt updatesudo apt install mysql-…...

QStyledItemDelegate 和 QItemDelegate 的作用

在Qt中,QStyledItemDelegate和QItemDelegate是用于自定义和控制项视图控件(如QListView、QTableView、QTreeView)中项的显示和编辑的委托类。它们提供了对项的外观和编辑行为的定制能力。尽管它们在功能上有相似之处,但它们之间有…...

3.任务的创建与删除

1.什么是任务? 任务可以理解为进程/线程,创建一个任务,就会在内存开辟一个空间。 任务通常都含有while(1)死循环 2.任务创建与删除相关的函数 3.CUBEMAX相关配置 编辑一个led1闪烁的任务...

进程、CPU、MMU与PCB之间的关系

目录 进程与cpu(中央处理器) 源代码、程序、cpu与进程的关系 cpu超线程 CPU的简易架构与处理数据过程 进程与MMU(内存管理单元) mmu作用 cpu和mmu的关系 进程与PCB(进程控制块) PCB介绍与内部成员…...

代码随想录算法训练营Day50|1143.最长公共子序列、1035.不相交的线、53.最大子序和、392.判断子序列

最长公共子序列 1143. 最长公共子序列 - 力扣(LeetCode) 代码随想录 (programmercarl.com) 最长公共子序列 - 动态规划 Longest Common Subsequence - Dynamic Programming_哔哩哔哩_bilibili 本题和上一题718.最长重复子数组在很多方面相似&#xf…...

国家自然科学基金标书大全(2002-2024)

数据来源:在20世纪80年代初,为了促进中国的科技体制革新并改革科研资金分配机制,中国科学院的89位院士联名向党和国家领导人提出建议,设立了国家自然科学基金的设立。国自然基金自创立以来,根据国家发展科学技术方针、…...

ARM TLB机制与虚拟化加速:TLBIP指令与TLBID域深度解析

1. ARM TLB机制与虚拟化加速 在现代ARM架构中,TLB(Translation Lookaside Buffer)作为内存管理单元(MMU)的核心组件,其性能直接影响虚拟地址转换效率。随着虚拟化技术的普及,ARMv8/v9架构引入了…...

从零构建智能体工作流引擎:核心架构、实现与生产级实践

1. 项目概述:从零构建一个智能体工作流引擎最近在GitHub上看到一个名为agentkit的项目,来自BCG X的官方仓库。这个标题立刻引起了我的兴趣,因为它直指当前AI应用开发中的一个核心痛点:如何高效、可靠地编排和管理多个AI智能体&…...

小白程序员必看!收藏这份Agent入门指南,抢占未来运维高薪岗位

本文用通俗易懂的语言解释了什么是AI Agent,将其类比为能自主决策并调用工具的“实习生”,强调其与普通AI聊天的区别在于能自动完成任务。文章详细阐述了Agent的“感知-思考-行动”工作流程,并通过运维场景对比,展示了Agent在告警…...

抖音无水印视频下载神器:3分钟快速上手,轻松保存高清无水印视频

抖音无水印视频下载神器:3分钟快速上手,轻松保存高清无水印视频 【免费下载链接】douyin_downloader 抖音短视频无水印下载 win编译版本下载:https://www.lanzous.com/i9za5od 项目地址: https://gitcode.com/gh_mirrors/dou/douyin_downlo…...

基于CircuitPython的嵌入式传感器数据可视化系统设计与实现

1. 项目概述 如果你手头有一块Adafruit CLUE开发板,上面集成了温度、湿度、气压、颜色、加速度计等一大堆传感器,你可能会想:怎么才能最直观地看到这些传感器数据的变化呢?是盯着串口监视器里不断滚动的数字,还是把它们…...

从系统光标到个性化指针:动漫主题鼠标指针的完整实现指南

1. 项目概述:从“二次元”到“生产力”的鼠标指针革命如果你和我一样,每天有超过8小时的时间与电脑为伴,那么鼠标指针就是你最亲密的“数字伙伴”。它可能是一个单调的白色箭头,也可能是一个乏味的沙漏。但你想过吗?这…...

探索GitHub导航菜单:平台功能、解决方案、资源及GlycemicGPT项目全揭秘

导航菜单包含登录、外观设置等选项,还有平台、解决方案、资源、开源、企业版等板块。平台有AI代码创作(如GitHub Copilot、GitHub Spark等)、开发者工作流(如Actions、Codespaces等)、应用程序安全(如GitHu…...

AI技能库实战:模块化设计赋能博客创作自动化工作流

1. 项目概述:一个面向AI时代的博客技能开源库最近在GitHub上闲逛,发现了一个挺有意思的项目,叫inblog-inc/inblog-ai-skills。光看这个名字,就透着一股子“务实”的味道。它不是又一个教你如何调参炼丹的AI模型库,也不…...

嵌入式系统遥测框架设计:从数据采集到实时可视化的工程实践

1. 项目概述:从“黑盒”到“白盒”的工程实践在嵌入式系统、机器人控制乃至任何涉及复杂硬件交互的软件开发中,我们常常面临一个共同的困境:系统运行起来后,内部到底发生了什么?当电机没有按预期转动,当传感…...

开源HR智能体openhr-agent:本地部署、模块化设计与核心应用场景解析

1. 项目概述:一个开源的HR智能体最近在GitHub上看到一个挺有意思的项目,叫openhr-agent。光看名字,你可能会觉得这又是一个“AI要取代HR”的噱头工具。但实际深入了解一下,我发现它的定位和设计思路,比想象中要务实和清…...