linux下vxlan理论学习及实战配置方法

本次试验使用的操作系统环境基于Centos7.9版本进行学习。

什么是vxlan

vxlan一个协议,遵循了RFC标准,在RFC7348中有相关介绍,感兴趣的小伙伴可以下载学习。
vxlan 是一个在传统Layer 3 三层网络(网络层)上架设出来的Layer 2 二层网络(数据链路层)overlay网络。

Linux上对vxlan的支持

Linux对VXLAN的支持已经完备,支持单播和组播,IPv4和IPv6。

简单了解vxlan数据包封装概念

点重点:
1、VXLAN创建在原来的IP网络(三层)上,只要是三层可达的网络就能部署VXLAN。
2、在VXLAN网络的每个端点都有一个VTEP设备,负责VXLAN协议报文的封包和解包,也就是在虚拟报文上封装VTEP通信的报文头部。
3、VTEP(VXLAN Tunnel Endpoints):VXLAN网络的边缘设备,用来进行VXLAN报文的处理(封包和解包)
4、VNI(VXLAN Network Identifier):VNI是每个VXLAN的标识,占24 bits,所以是个24位整数,因此最大值是224=16777216
5、Underlay交换机(物理或虚拟)MTU 问题,传统网络 MTU 一般为 1500,这里加上 VXLAN 的封装多出的50 或 54 字节,需要调整 MTU 为 1550 或 1554,防止频繁分包。一般设置为1600+。

6、VXLAN通信双方(一般为虚拟机或容器)都认为在直接通信,并不知道底层网络的存在。从整体看,通过Vtep对包进行封装,每个VXLAN网络像是为通信的终端搭建了一个单独的通信通道,也就是隧道。

单播实验环境地址如下

宿主机主机名IP地址vxlan
vxlan-110.30.10.50/24vxlan0:192.168.1.1
vxlan-210.30.10.51/24vxlan0:192.168.1.2

组播实验环境地址如下

宿主机主机名IP地址vxlan
vxlan-110.30.10.50/24vxlan1:192.168.2.1
vxlan-210.30.10.51/24vxlan1:192.168.2.2

单播配置方法

vxlan1 主机

1、添加vxlan0接口

[root@vxlan1 /]#ip link add vxlan0 type vxlan id 42 dstport 4789 remote 10.30.10.51 local 10.30.10.50 dev ens33

重要参数解释: id 42 : 指定 VNI 的值,有效值在 1 到 (2^{24}) 之间。 dstport : VTEP 通信的端口,IANA 分配的端口是 4789。如果不指定,Linux 默认使用 8472。 remote : 对端 VTEP 的地址。 local : 当前节点 VTEP 要使用的 IP 地址,即当前节点隧道口的 IP 地址。 dev eth0 : 当前节点用于 VTEP 通信的设备,用来获取 VTEP IP 地址。这个参数与 local 参数目的相同,二选一即可。

2、配置VXLAN接口地址并激活

[root@vxlan1 /]# ip addr add 192.168.1.1/24 dev vxlan0
[root@vxlan1 /]# ip link set vxlan0 up

3、查看路由和FDB表项

[root@vxlan1 /]# ip route default via 10.30.10.254 dev ens33 proto static metric 100 10.30.10.0/24 dev ens33 proto kernel scope link src 10.30.10.50 metric 100 192.168.1.0/24 dev vxlan0 proto kernel scope link src 192.168.1.1

[root@vxlan1 /]# bridge fdb 01:00:5e:00:00:01 dev ens33 self permanent 33:33:00:00:00:01 dev ens33 self permanent 33:33:ff:c5:a1:25 dev ens33 self permanent 00:00:00:00:00:00 dev vxlan0 dst 10.30.10.51 via ens33 self permanent c2:cc:6f:5e:e8:16 dev vxlan0 dst 10.30.10.51 self

这个表项的意思是,默认的 VTEP 对端地址为 10.30.10.51。换句话说,原始报文经过 vxlan0 后会被内核添加上 VXLAN 头部,而外部 UDP 头的目的 IP 地址会被冠上 10.30.10.51。

vxlan2 主机

1、添加vxlan0接口

[root@vxlan2 ~]# ip link add vxlan0 type vxlan id 42 dstport 4789 remote 10.30.10.50 local 10.30.10.51 dev ens33

2、配置VXLAN接口地址并激活

[root@vxlan2 ~]# ip addr add 192.168.1.2/24 dev vxlan0
[root@vxlan2 ~]# ip link set vxlan0 up

路由和FDB表项

[root@vxlan2 ~]# ip route default via 10.30.10.254 dev ens33 proto static metric 100 10.30.10.0/24 dev ens33 proto kernel scope link src 10.30.10.51 metric 100 192.168.1.0/24 dev vxlan0 proto kernel scope link src 192.168.1.2

[root@vxlan2 ~]# bridge fdb 01:00:5e:00:00:01 dev ens33 self permanent 33:33:00:00:00:01 dev ens33 self permanent 33:33:ff:bb:45:a4 dev ens33 self permanent 00:00:00:00:00:00 dev vxlan0 dst 10.30.10.50 via ens33 self permanent 0a:f1:ef:f5:e7:36 dev vxlan0 dst 10.30.10.50 self

如果你的接口定义错了,想删除看一下操作命令

ip link del vxlan1 删除vxlan

ip addr s vxlan1 查看vxlan

组播配置方法

vxlan1 主机,这样操作

[root@vxlan1 /]# ip link add vxlan1 type vxlan id 65535 dstport 4789 local 10.30.10.50 group 228.1.1.1 dev ens33
[root@vxlan1 /]# ip addr add 192.168.2.1/24 dev vxlan1
[root@vxlan1 /]# ip link set vxlan1 up

  • 228.1.1.1为组播组,范围为224.0.0.0~239.255.255.255`

Host 02配置和Host 01类似,VNI=65535 group=228.1.1.1 这样操作

[root@vxlan2 ~]# ip link add vxlan1 type vxlan id 65535 dstport 4789 local 10.30.10.51 group 228.1.1.1 dev ens33
[root@vxlan2 ~]# ip addr add 192.168.2.2/24 dev vxlan1
[root@vxlan2 ~]# ip link set vxlan1 up

  • 多播模式下,vxlan的广播包会转发到多播组。
  • 一般在事先不知道MAC地址和VTEP IP信息,可以使用多播。
  • 但是,多播方式会带来报文浪费,在实际生产中VXLAN的多播模式很少被采用。

实验最终效果

  • vxlan1主机
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

今天是2022年8月24日,2022年国赛已落下帷幕,Linux模块考到的vxlan,赶紧去验证下吧。

如果本文对你有帮助请点赞支持,谢谢。

Logo

更多推荐