VXLAN(VirtualeXtensible Local Area Network)是一种将二层报文用三层协议进行封装的技术,可以对二层网络在三层范围进行扩展。它应用于数据中心内部,使虚拟机可以在互相连通的三层网络范围内迁移,而不需要改变IP地址和MAC地址,保证业务的连续性。VXLAN采用24bit的网络标识,使用户可以创建16M相互隔离的虚拟网络,突破了目前广泛采用的VLAN所能表示的4K个隔离网络的限制,这使得大规模多租户的云环境中具有了充足的虚拟网络分区资源。
通过Linux网桥/vxlan网络设备实现两个VM间相同子网经Vxlan隧道实现网络互访,了解Vxlan在Linux网络报文转发路径上的实现原理.
VM1网络配置:
eth1:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.242.11 netmask255.255.255.0 broadcast 192.168.242.255
inet6 fe80::20c:29ff:fe5c:cddb prefixlen 64 scopeid0x20<link>
ether 00:0c:29:5c:cd:db txqueuelen 1000 (Ethernet)
RX packets 2500 bytes 151003(147.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 99 bytes 9785 (9.5KiB)
TX errors 0 dropped 0 overruns0 carrier 0 collisions 0
在VM1上执行以下操作创建Linux Bridge/Vxlan网络设备,并配置租户内部网络地址
1)创建Linux Bridge
brctl addbr br-vxlan
ifconfig br-vxlan up
2)创建Linux Vxlan网络设备指定VxlanId,远端地址即VM2地址,本端出口网络设备
ip link add vxlan-101 type vxlan id 101remote 192.168.242.31 dstport 4789 deveth1
ifconfig vxlan-101 up
brctl addif br-vxlan vxlan-101
3)配置租户内部网络地址
ifconfig br-vxlan 192.168.123.11
VM2网络配置:
eth1:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.242.31 netmask255.255.255.0 broadcast 192.168.242.255
inet6 fe80::20c:29ff:fe9d:61c0 prefixlen 64 scopeid0x20<link>
ether 00:0c:29:9d:61:c0 txqueuelen1000 (Ethernet)
RX packets 6536 bytes 978637(955.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9605 bytes 1461763(1.3 MiB)
TX errors 0 dropped 0 overruns0 carrier 0 collisions 0
在VM2上执行以下操作创建Linux Bridge/Vxlan网络设备,并配置租户内部网络地址
1)创建Linux Bridge
brctl addbr br-vxlan
ifconfig br-vxlan up
2)创建Linux Vxlan网络设备指定VxlanId,远端地址即VM2地址,本端出口网络设备
ip link add vxlan-101 type vxlan id 101remote 192.168.242.11 dstport 4789 dev eth1
ifconfig vxlan-101 up
brctl addif br-vxlan vxlan-101
3)配置租户内部网络地址
ifconfig br-vxlan 192.168.123.13
在VM1上可以ping VM2租户内部网络地址说明Vxlan隧道建立成功且网络实现互通
查看Linux UDP Socket监听状态
在VM2抓包查看Vxlan封装的租户内部网络ICMP报文