1 实验目的

该实验通过Open vSwitch构建Overlay的VxLAN网络,更直观的展现VxLAN的优势。在实验过程中,可以了解如何建立VxLAN隧道并进行配置,并实现相同网段和不同网段之间的通信。

2 实验原理

VxLAN 是 Virtual eXtensible LANs 的缩写,它是对 VLAN 的一个扩展,是非常新的一个 tunnel 技术,在Open vSwitch中应用也非常多。Linux 内核的 upstream 中也刚刚加入 VXLAN 的实现。相比 GRE tunnel 它有着很好的扩展性,同时解决了很多其它问题。

从数量上讲,它把 12 bit 的 VLAN tag 扩展成了 24 bit。从实现上讲,它是 L2 over UDP,它利用了UDP 同时也是 IPv4 的单播和多播,可以跨 L3 边界,很巧妙地解决了 GRE tunnel 和 VLAN 存在的不足,让组网变得更加灵活。

3 实验任务

基于Open vSwitch的VxLAN隧道,实现了相同和不同网段内设备的通信,启动OpenvSwitch服务,创建VxLAN隧道,本实验主要是通过在OpenvSwitch上手动命令操作设置连接VxLAN来实现相同和不同网段的通信;

vxlan隧道头端复制列表 vxlan nat 建立隧道_数据

因实验平台中在虚拟机中没有创建数据层面下的虚拟机,如图中的VM1、VM2,所以通过在数据层面Br0上实现不同网段通信,以达到和VM1、VM2相同和不同网段通信的目的。此实验将创建两个网桥,一个作为控制层面,如包含eth0端口的Br1;一个作为数据层面,如Br0,两台Mininet虚拟机的Br0在实验中分别属于相同和不同的网段。

首先先对Vxlan有一个了解:


网段的定义:

通常使用同一物理层的设备之间必然通过相同的传输介质直接相互连接,(如交叉双绞线直接连接的两台主机),但是两组其传输介质并非直接相连的网络设备,如果它们的传输介质通过工作在物理层的扩展设备如中继器集线器等转接连接,则仍然被视为同一物理层中的设备,是一个而非两个网段。另外,工作在数据链路层或更高层的设备如网桥交换机路由器等等,由它们连接起来的两组设备仍然分别处于各自独立的物理层,因此是两个网段。

网桥实现两个网段的桥接功能,同时也起到重发器的作用,即延长线路距离及信号再生和转发。交换机原理上也工作在数据链路层,可实现多个网段的信息交换,网桥和交换机可以隔离两个网段,可以防止在某一个网段的数据被无条件地广播到另一网段,这是因为网桥接到数据帧后,判断接收到的数据帧目的地址是否和源地址在同一网段,是的话,就不再转发。交换机被称为多端口网桥,交换机的每个端口可以连接一个网段。 [1]

前面所讨论的学术定义是“网段”在物理层的严格定义,“网段”还有一些不严格的含义,比如指代以太网上的一个广播域,这是数据链路层上一个独立的内部相互作用区域。

4.1 预先配置好两个虚拟机

4.1.1   ifconfig

vxlan隧道头端复制列表 vxlan nat 建立隧道_数据帧_02

vxlan隧道头端复制列表 vxlan nat 建立隧道_数据链路层_03

4.1.2  分别在两台机器上创建网桥

ovs-vsctl add-br br0 #数据层面
 
ovs-vsctl add-br br1 #控制层面

 

4.1.3   将ens33的IP赋予给这个网桥br1

ifconfig ens33 0 up
 
ifconfig br1 20.0.4.196/29 up

 

4.1.4  给mn虚拟机的br1重新添加路由并添加端口ens33

route add default gw 20.0.4.193

 

vxlan隧道头端复制列表 vxlan nat 建立隧道_数据_04

ovs-vsctl add-port br1 ens33

 

vxlan隧道头端复制列表 vxlan nat 建立隧道_数据链路层_05

另一台虚拟机也是如此:

ovs-vsctl add-br br0
 
ovs-vsctl add-br br1
 
ifconfig ens33 0 up
 
ifconfig br1 20.0.4.195/29 up
 
route add default gw 20.0.4.193
 
ovs-vsctl add-port br1 ens33
 
ovs-vsctl show

 

4.2  设置VxLAN实现同一网段的通信

4.2.1 给两台虚拟机上的br0配置一个IP

ifconfig br0 30.0.0.2/8 up #第一个虚拟机
 
ifconfig br0 30.0.0.3/8 up #第二个虚拟机

可发现两个的br1是可以ping通的:

vxlan隧道头端复制列表 vxlan nat 建立隧道_vxlan隧道头端复制列表_06

而一号机ping二号机的br0是不通的:

vxlan隧道头端复制列表 vxlan nat 建立隧道_数据_07

4.2.2  开通Vxlan隧道

我们需要搭建一个隧道让两机的br0连接起来这样就可以ping通啦(如下:第一行是一号机第二行是二号机)

ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:remote_ip=20.0.4.195
 
ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:remote_ip=20.0.4.196

vxlan隧道头端复制列表 vxlan nat 建立隧道_数据帧_08

两机互ping:

vxlan隧道头端复制列表 vxlan nat 建立隧道_数据链路层_09

vxlan隧道头端复制列表 vxlan nat 建立隧道_数据链路层_10

抓包测试:

sudo tcpdump -i ens33

vxlan隧道头端复制列表 vxlan nat 建立隧道_数据链路层_11

4.4 设置VxLAN实现不同网段的通信

重新设置两机的br0的地址:

1  
2 ifconfig br0 30.0.0.1/8 up
3  
4 ifconfig br0 40.0.0.1/8 up

 

 然后设置静态路由:

1  
2 route add –net 40.0.0.0 netmask 255.0.0.0 gw 30.0.0.1 dev br0
3  
4 route add –net 30.0.0.0 netmask 255.0.0.0 gw 40.0.0.1 dev br0

HOWEVER设置静态路由的时候出了点小问题导致无法ping通

vxlan隧道头端复制列表 vxlan nat 建立隧道_数据帧_12

总结:了解了对网段,网关,网桥还有Vxlan隧道的概念