Linux隧道网络VxLAN

概述

VXLAN(Virtual eXtensible LAN,虚拟可扩展的局域网),是一种虚拟化隧道通信技术。它是一种overlay(覆盖网络)技术,通过三层的网络搭建虚拟的二层网络。

  • 由RFC7348中定义:A framework for overlaying virtualized layer 2 networks over lay 3 networks.
  • 在底层物理网络(underlay)之上,依托UDP层构建
  • 逻辑网络与物理网络解耦
  • 对原有的网络架构影响小
  • 底层多厂家设备组网需求
  • 能适配虚拟机和容器环境

VXLAN封装

VXLAN创建在原来的IP网络(三层)上,只要是三层可达的网络就能部署VXLAN。
在VXLAN网络的每个端点都有一个VTEP设备,负责VXLAN协议报文的封包和解包,也就是在虚拟报文上封装VTEP通信的报文头部。
其封装如下
Linux隧道网络VxLAN_第1张图片

  • VTEP(VXLAN Tunnel Endpoints):VXLAN网络的边缘设备,用来进行VXLAN报文的处理(封包和解包)
  • VNI(VXLAN Network Identifier):VNI是每个VXLAN的标识,占24 bits,所以是个24位整数,因此最大值是224=16777216

Underlay交换机(物理或虚拟)MTU 问题,传统网络 MTU 一般为 1500,这里加上 VXLAN 的封装多出的50 或 54 字节,需要调整 MTU 为 1550 或 1554,防止频繁分包。一般设置为1600+。

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

Linux对VXLAN的支持

2012 年 Stephen Hemminger 把相关的工作合并到 kernel 中,并最终出现在 kernel 3.7.0 版本。
到了 kernel 3.12 版本,Linux 对 VXLAN 的支持已经完备,支持单播和组播,IPv4 和 IPv6。

实验

静态配置vxlan

环境参数

Linux隧道网络VxLAN_第2张图片

Name IP Addr 对端 备注
主机1 ens33 Host 01 192.168.21.11/24 vtep
主机2 ens33 Host 02 192.168.21.12/24 vtep
vxlan0@Host 01 172.19.1.11/24 vxlan0@Host 02 单播
vxlan1@Host 01 172.19.2.11/24 vxlan1@Host 02 单播
vxlan0@Host 02 172.19.1.12/24 vxlan0@Host 01 组播
vxlan1@Host 02 172.19.2.12/24 vxlan1@Host 01 组播

单播模式

  • Host 01配置

创建VXLAN接口
[root@worker-01 ~]# ip link add vxlan0 type vxlan id 42 dstport 4789 remote 192.168.21.12 local 192.168.21.11 dev ens33
其中,VNI=42,两边要一样
dstport为vtep通讯端口,IANA - Internet Assigned Numbers Authority定义为4789,不指定将使用Linux定义的8472

配置VXLAN接口地址并激活
[root@worker-01 ~]# ip addr add 172.19.1.11/24 dev vxlan0
[root@worker-01 ~]# ip link set vxlan0 up

  • Host 02配置与Host 01一致,VNI要一致
  • 查看端口情况

[root@worker-01 ~]# ifconfig vxlan0
vxlan0: flags=4163 mtu 1450
inet 172.19.1.11 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::1407:1aff:fe7e:bf23 prefixlen 64 scopeid 0x20
ether 16:07:1a:7e:bf:23 txqueuelen 1000 (Ethernet)
RX packets 39 bytes 5097 (4.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6351 bytes 1067978 (1.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

  • 路由和FDB表项
[root@worker-01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.21.2    0.0.0.0         UG    100    0        0 ens33
...
172.19.1.0      0.0.0.0         255.255.255.0   U     0      0        0 vxlan0

[root@worker-01 ~]# ip route
default via 192.168.21.2 dev ens33 proto static metric 100 
... 
172.19.1.0/24 dev vxlan0 proto kernel scope link src 172.19.1.11 
[root@worker-01 ~]# bridge fdb
...
00:00:00:00:00:00 dev vxlan0 dst 192.168.21.12 via ens33 self permanent
  • 联通情况
[root@worker-01 ~]# ping 172.19.1.12
PING 172.19.1.12 (172.19.1.12) 56(84) bytes of data.
64 bytes from 172.19.1.12: icmp_seq=1 ttl=64 time=0.620 ms
64 bytes from 172.19.1.12: icmp_seq=2 ttl=64 time=1.67 ms
64 bytes from 172.19.1.12: icmp_seq=3 ttl=64 time=1.16 ms
64 bytes from 172.19.1.12: icmp_seq=4 ttl=64 time=3.13 ms
^C
--- 172.19.1.12 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3010ms
rtt min/avg/max/mdev = 0.620/1.648/3.137/0.937 ms

组播模式

  • Host 01配置

[root@worker-01 ~]# ip link add vxlan1 type vxlan id 65535 dstport 4789 local 192.168.21.11 group 228.1.1.1 dev ens33
[root@worker-01 ~]# ip addr add 172.19.2.11/24 dev vxlan1
[root@worker-01 ~]# 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@worker-01 ~]# ip route
default via 192.168.21.2 dev ens33 proto static metric 100 
...
172.19.1.0/24 dev vxlan0 proto kernel scope link src 172.19.1.11 
172.19.2.0/24 dev vxlan1 proto kernel scope link src 172.19.2.11 

[root@worker-01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.21.2    0.0.0.0         UG    100    0        0 ens33
...
172.19.1.0      0.0.0.0         255.255.255.0   U     0      0        0 vxlan0
172.19.2.0      0.0.0.0         255.255.255.0   U     0      0        0 vxlan1

路由表看起来和单播模式没有什么区别

  • FDB
[root@worker-01 ~]# bridge fdb
...
00:00:00:00:00:00 dev vxlan0 dst 192.168.21.12 via ens33 self permanent
00:00:00:00:00:00 dev vxlan1 dst 228.1.1.1 via ens33 self permanent

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

  • 联通情况
[root@worker-01 ~]# ping 172.19.2.12  -c 3
PING 172.19.2.12 (172.19.2.12) 56(84) bytes of data.
64 bytes from 172.19.2.12: icmp_seq=1 ttl=64 time=0.404 ms
64 bytes from 172.19.2.12: icmp_seq=2 ttl=64 time=1.81 ms
64 bytes from 172.19.2.12: icmp_seq=3 ttl=64 time=0.747 ms

--- 172.19.2.12 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2006ms
rtt min/avg/max/mdev = 0.404/0.988/1.813/0.599 ms

以上

你可能感兴趣的:(Linux,linux,网络)