理解并实践vxlan
Vxlan
The VXLAN protocol is a tunnelling protocol designed to solve the problem of limited VLAN IDs (4096) in IEEE 802.1q
. With VXLAN the size of the identifier is expanded to 24 bits (16777216).
Unlike most tunnels, a VXLAN is a 1 to N network, not just point to point. A VXLAN device can learn the IP address of the other endpoint either dynamically in a manner similar to a learning bridge, or make use of statically-configured forwarding entries.
原理
VXLAN
是在underlay
底层物理网络之上的一种隧道技术(Overlay
网络):其将原始报文封装在UDP
报文中进行发送,使逻辑网络与物理网络解耦,可以实现灵活的组网需求。它对原有的网络架构几乎没有影响,不需要对原网络做任何改动,即可架设一层新的网络。也正是因为这个特性,很多CNI
插件才会选择VXLAN
作为通信手段。
VXLAN
报文的转发过程:原始报文经过VTEP
,被Linux内核添加上VXLAN
头部以及外层的UDP
头部,再发送出去,对端VTEP
接收到VXLAN
报文后拆除外层UDP
头部,并根据VXLAN
头部的VNI
把原始报文发送到目的服务器。
VTEP 转发表的学习可以通过以下两种方式:
- 多播
- 外部控制中心(如
Flannel
等CNI
插件)
具体vxlan的介绍介绍请参考这里
本地测试
基于多播的vxlan
This creates a new device named vxlan0. The device uses the multicast group 239.1.1.1 over eno1 to handle traffic for which there is no entry in the forwarding table. The destination port number is set to the IANA-assigned value of 4789.
36.66上配置如下:
1 |
|
10.161配置如下:
1 |
|
36.58配置如下:
1 |
|
在36.66上执行ping 192.168.5.12 -c1
:
1 |
|
在36.58的eno2接口上抓包,可以看到只有第一个报文是多播报文,后续的都是单播的UDP
报文:
1 |
|
多播的以太网
MAC
地址高位为:01:00:5e
,低23bit位是通过将多播
组号239.1.1.1
的低23bit映射过来实现的,所以239.1.1.1
对应的以太网地址为01:00:5e:01:01:01
在36.58的vxlan0接口上抓包,可以看到正常的真实的交互报文:
1 |
|
在36.66上ping 192.168.5.11
就不测试了,网关对多播报文的转发需要额外IGMP
配置,暂时跳过。
点对点的vxlan
36.66上配置如下:
1 |
|
10.161上配置如下:
1 |
|
注意:当配置完10.161的vxlan0接口时,转发表同样已经自动添加了一条36.66的vxlan0
口的转发条目。这是由于MDNS
和NETBIOS
协议引起的:
1 |
|
MDNS
协议: mDNS multicast DNS , 使用5353端口,组播地址 224.0.0.251。在一个没有常规DNS服务器的小型网络内,可以使用mDNS
来实现类似DNS的编程接口、包格式和操作语义。MDNS协议的报文与DNS的报文结构相同,但有些字段对于MDNS来说有新的含义。每个进入局域网的主机,如果开启了mDNS
服务的话,都会向局域网内的所有主机组播一个消息,我是谁,和我的IP地址是多少。然后其他也有该服务的主机就会响应,也会告诉你,它是谁,它的IP地址是多少。NETBIOS
协议: 137和138端口在Linux系统中主要用于NETBIOS
协议,其中137端口提供名称服务, 当使用者向局域网或互联网上的某台计算机的137端口发送一个请求时,可以获取该计算机的名称、注册用户名,以及是否安装主域控制器、IIS是否正在运行等信息。而138端口则用于通过网上邻居传输文件时。
在36.66上执行ping 192.168.5.123 -c1
:
1 |
|
在10.161的eno2接口上抓包如下:
1 |
|
10.161的vxlan0接口上抓包如下:
1 |
|
Overlay
Overlay网络是通过网络虚拟化技术,在同一张Underlay网络上构建出的一张或者多张虚拟的逻辑网络。不同的Overlay网络虽然共享Underlay网络中的设备和线路,但是Overlay网络中的业务与Underlay网络中的物理组网和互联技术相互解耦。详情请参考这里